summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnas Nashif <anas.nashif@intel.com>2012-11-08 10:42:26 -0800
committerAnas Nashif <anas.nashif@intel.com>2012-11-08 10:42:26 -0800
commit729fab075a4909a547248d67a31a7bac29eb42c5 (patch)
tree3a0a33570135b1448c09a6f6e001d70881326270
downloadxproto-729fab075a4909a547248d67a31a7bac29eb42c5.tar.gz
xproto-729fab075a4909a547248d67a31a7bac29eb42c5.tar.bz2
xproto-729fab075a4909a547248d67a31a7bac29eb42c5.zip
Imported Upstream version 7.0.23upstream/7.0.23
-rw-r--r--AUTHORS23
-rw-r--r--COPYING108
-rw-r--r--ChangeLog2014
-rw-r--r--DECkeysym.h65
-rw-r--r--HPkeysym.h164
-rw-r--r--INSTALL291
-rw-r--r--Makefile.am49
-rw-r--r--Makefile.in881
-rw-r--r--README32
-rw-r--r--Sunkeysym.h106
-rw-r--r--X.h717
-rw-r--r--XF86keysym.h233
-rw-r--r--XWDFile.h113
-rw-r--r--Xalloca.h121
-rw-r--r--Xarch.h94
-rw-r--r--Xatom.h79
-rw-r--r--Xdefs.h108
-rw-r--r--Xfuncproto.h.in173
-rw-r--r--Xfuncs.h69
-rw-r--r--Xmd.h185
-rw-r--r--Xos.h148
-rw-r--r--Xos_r.h1095
-rw-r--r--Xosdefs.h116
-rw-r--r--Xpoll.h.in218
-rw-r--r--Xproto.h2157
-rw-r--r--Xprotostr.h77
-rw-r--r--Xthreads.h313
-rw-r--r--Xw32defs.h79
-rw-r--r--Xwindows.h91
-rw-r--r--Xwinsock.h65
-rw-r--r--aclocal.m43027
-rw-r--r--ap_keysym.h51
-rw-r--r--config.guess1505
-rw-r--r--config.sub1739
-rwxr-xr-xconfigure12848
-rw-r--r--configure.ac217
-rw-r--r--do-not-use-config.h.in79
-rw-r--r--docbook.am105
-rwxr-xr-xinstall-sh520
-rw-r--r--keysym.h74
-rw-r--r--keysymdef.h2491
-rwxr-xr-xmissing376
-rw-r--r--specs/Makefile.am21
-rw-r--r--specs/Makefile.in742
-rw-r--r--specs/SIAddresses/IPv6.txt11
-rw-r--r--specs/SIAddresses/Makefile.am6
-rw-r--r--specs/SIAddresses/Makefile.in369
-rw-r--r--specs/SIAddresses/README4
-rw-r--r--specs/SIAddresses/hostname.txt11
-rw-r--r--specs/SIAddresses/localuser.txt20
-rw-r--r--specs/encoding.xml3268
-rw-r--r--specs/glossary.xml1320
-rw-r--r--specs/keysyms.xml6050
-rw-r--r--specs/sect1-9.xml15309
-rw-r--r--specs/x11protocol.xml64
-rw-r--r--xproto.pc.in10
56 files changed, 60221 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..1bfcc43
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,23 @@
+The architect of the X11 core protocol was Bob Scheifler of MIT LCS, with
+significant contributions from Jim Gettys, Phil Karlton and Scott
+McGregor of Digital, Dave Rosenthal of Sun, and many others of
+the xpert mailing list.
+
+The original sample server implementation of the X11 protocol was
+implemented by Phil Karlton and Susan Angebrandt doing the device
+independent part of the server, with Raymond Drewry and Todd Newman of
+Digital Equipment Corporation, doing the mi and original ddx
+implementation; their feedback was vital to a good design, along with
+that of the more than 100 alpha and beta testers who bravely tested
+the X11 core design.
+
+The X11 protocol library (Xlib) was built principally by Jim Gettys of
+Digital and MIT Project Athena, with assistance from Ron Newman of MIT
+Project Athena.
+
+Our thanks to those at MIT, Digital Equipment Corporation, Hewlett-Packard,
+IBM, and many others who had faith in us reimplementing X from first
+principles.
+
+If there are mistakes here, they are mine; entirely possible after
+over 15 years. - Jim Gettys
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..32cb88f
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,108 @@
+Copyright (c) 1991, 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 1985, 1987, 1988, 1990, 1991, 1993-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.
+
+The X Window System is a Trademark of 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.
+
+
+Copyright 1987 by Apollo Computer Inc., Chelmsford, Massachusetts.
+Copyright 1989 by Hewlett-Packard Company.
+
+ All Rights Reserved
+
+Permission to use, duplicate, change, and distribute this software and
+its documentation for any purpose and without fee is granted, provided
+that the above copyright notice appear in such copy and that this
+copyright notice appear in all supporting documentation, and that the
+names of Apollo Computer Inc., the Hewlett-Packard Company, or the X
+Consortium not be used in advertising or publicity pertaining to
+distribution of the software without written prior permission.
+
+HEWLETT-PACKARD MAKES NO WARRANTY OF ANY KIND WITH REGARD
+TO THIS SOFWARE, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. Hewlett-Packard shall not be liable for errors
+contained herein or direct, indirect, special, incidental or
+consequential damages in connection with the furnishing,
+performance, or use of this material.
+
+
+Copyright (c) 1999 The XFree86 Project Inc.
+
+All Rights Reserved.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The XFree86 Project
+Inc. shall not be used in advertising or otherwise to promote the
+sale, use or other dealings in this Software without prior written
+authorization from The XFree86 Project Inc.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..92c5502
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,2014 @@
+commit 20202784b9700d973d5301f0cb3243eba99fc349
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Thu Mar 15 23:11:19 2012 -0700
+
+ xproto 7.0.23
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit ab1fba1a0967ac2289909c3f1a643f876a5dd393
+Author: Marko Myllynen <myllynen@redhat.com>
+Date: Mon Feb 20 17:01:21 2012 +0200
+
+ x11proto: add permille, ezh, and EZH to keysymdef.h
+
+ This patch adds the following mnemonic symbols:
+
+ XK_permille for U+2030 PER MILLE SIGN
+ XK_EZH for U+01B7 LATIN CAPITAL LETTER EZH
+ XK_ezh for U+0292 LATIN SMALL LETTER EZH
+
+ These are the last mnemonic symbols missing from the Finnish keyboard
+ layout. The characters are part of the Finnish standard, ezh is used
+ in Sami and permille sign is used commonly in Finland, probably in
+ other countries as well.
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=19687
+
+ Signed-off-by: Marko Myllynen <myllynen@redhat.com>
+ Reviewed-by: Matt Dew <marcoz@osource.org>
+ Signed-off-by: James Cloos <cloos@jhcloos.com>
+
+commit 67dd3bfe1ea20473944aec414d9f4b5eba196d8b
+Author: Frédéric Boiteux <fboiteux@calistel.com>
+Date: Wed Nov 30 07:46:54 2011 -0500
+
+ Definition of dead greek symbol
+
+ Define a new dead greek symbol for use in Dvorak-like Bepo keyboard layout.
+
+ FreeDesktop Bug 21475 <https://bugs.freedesktop.org/show_bug.cgi?id=21475>
+
+ Signed-off-by: Frédéric Boiteux <fboiteux@calistel.com>
+ Signed-off-by: James Cloos <cloos@jhcloos.com>
+
+commit 4769a96385e0eb47550773abb00631af89977320
+Author: Matt Dew <marcoz@osource.org>
+Date: Sun Jan 15 17:17:24 2012 -0700
+
+ informaltable 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 <?dbfo keep-together='always'> 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 <marcoz@osource.org>
+
+commit 7f26709e4bda1154287c27d57cb22465fa815380
+Author: Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
+Date: Mon Nov 14 17:22:30 2011 -0600
+
+ Cygwin/X: Include <strings.h> early to avoid compile errors
+
+ http://lists.x.org/archives/xorg-devel/2011-November/027117.html
+
+ Signed-off-by: Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
+ Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+
+commit 3d7be5c61b991a3b33526546acda2ab663cdc1d5
+Author: Matt Dew <marcoz@osource.org>
+Date: Mon Oct 3 18:26:22 2011 -0600
+
+ 1 - fix the capitolization of the ID attriutes to match either the
+ <title> 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 f5d77f49dbd99d54324a6f1807b872d800abddf7
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Wed Sep 21 15:52:39 2011 -0400
+
+ x11proto spec: fix copyright markup
+
+ Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 8cf26b29001b1fe87cce6b56433ffe7874c7e234
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Wed Sep 14 14:49:03 2011 -0400
+
+ spec: remove duplicate Copyright line
+
+ Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit aefda8ec34ef64aef43015e6e31ea908da38c4c7
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Mon Sep 12 11:06:29 2011 -0400
+
+ docs: use the &fullrelvers; entity to set X11 release information
+
+ Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit a4fca029b5ace31e56941970151c226e221e1dcf
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Sun Sep 11 19:49:54 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 acd12d6096bad0d0e45b34f52ae92cc32f8ba7bf
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Thu Sep 8 20:00:00 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 bd46f6d09c849335574ac84a0aa2de7c28daa552
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Wed Sep 7 10:31:04 2011 -0400
+
+ docbook.am: global maintenance update - entities, images and olinking
+
+ Adding support in libX11 for html chunking caused a reorg of docbook.am
+ as well as the xorg-sgml-doctools masterdb for olinking.
+ The parameter img.src.path is added for pdf images.
+ A searchpath to the root builddir is added for local entities, if present.
+
+ The docbook.am makefile hides all the details and is identical for
+ all 22 modules having DocBook documentation. It is included by a thin
+ Makefile.am which requires no docbook knowledge.
+
+ Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit c270f8bed465daff386967c5586eb3c8490b86e0
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Fri Aug 26 13:55:29 2011 -0700
+
+ Fix Xfuncproto.h to work when #included in a C89-mode compilation
+
+ Variable argument macros are not supported in C89, only C99 or a
+ compiler-specific extension like gcc's. Even just defining the
+ macro causes builds with C89 compilers to fail, as they can't
+ figure out how to handle #define _X_NONNULL(...), so only define
+ the fallback for C99 compilers.
+
+ Since this means C89 compilers will see _X_NONNULL unexpanded in
+ sources, add a comment to remind users that this should only be
+ used with #ifdef _X_NONNULL guards in public/exported API headers
+ we install for other software to compile against, so that we don't
+ break their builds.
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+ Reviewed-by: Julien Cristau <jcristau@debian.org>
+
+commit 06ebd5b88bee8c54222bde3178dc773776036802
+Author: James Cloos <cloos@jhcloos.com>
+Date: Wed Jun 29 09:24:51 2011 -0400
+
+ Add some keysyms to support Breton’s n-graphs.
+
+ These keysyms are necessary for XIM to support single-keystroke
+ multiple-character keys on Breton C’HWERTY keyboards.
+
+ Addresses: https://bugs.freedesktop.org/show_bug.cgi?id=34453
+
+ Signed-off-by: James Cloos <cloos@jhcloos.com>
+ Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+
+commit 42c16165df536f74d1177eae2b94f96b3ebbdfb2
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Thu Jun 23 09:28:57 2011 +1000
+
+ xproto 7.0.22
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 13799852a8b8116094a885809782604fa7507115
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Thu Jun 16 11:01:39 2011 +1000
+
+ Add two more symbols for logging grab and window trees
+
+ These two keysyms provide exciting new possibilities of a close relationship
+ between our valued users and hard-working developers through innovative
+ logging solutions. Such keysyms truly pave new ground in the reponsiveness
+ to bug reports and and debug-ability of grabs.
+
+ For unprecedented uses of these keysyms, see the patches here:
+ http://patchwork.freedesktop.org/patch/5936/
+ http://patchwork.freedesktop.org/patch/5935/
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+ Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+
+commit 7c3c4332d63d9003f7115173b7ece6ab1297cc15
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Sun Jun 12 17:54:50 2011 -0400
+
+ Install xml versions of specs even if HAVE_XMLTO is false
+
+ DocBook/XML input source is also a usefull output format that can be viewed
+ with an XML viewer or editor and by some O/S help system.
+
+ Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit c10589c12f45bfb8c0134d0370cf5f36ac7262bf
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Sun Jun 5 16:27:37 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 951295cceb72e929c55f639bbb91314fa276b2aa
+Author: Cyril Brulebois <kibi@debian.org>
+Date: Sun Jun 5 09:26:33 2011 +0000
+
+ Fix sorting by codepoint in Latin 2.
+
+ Sort performed by calling “sort -k 3” on the part between #ifdef
+ XK_LATIN8 and #endif.
+
+ Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+ Signed-off-by: Cyril Brulebois <kibi@debian.org>
+
+commit d8920f71b68fe3fabd4ba04e2a4308579a8fe333
+Author: Cyril Brulebois <kibi@debian.org>
+Date: Fri Jun 3 14:27:45 2011 +0200
+
+ build: Add SIAddresses as a subdir of specs.
+
+ Fix the following distcheck failure:
+ | configure: creating ./config.status
+ | config.status: creating Makefile
+ | config.status: creating specs/Makefile
+ | config.status: error: cannot find input file: `specs/SIAddresses/Makefile.in'
+ | make: *** [distcheck] Error 1
+
+ Signed-off-by: Cyril Brulebois <kibi@debian.org>
+ Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+ Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 2ef6cb7ced5812975b3630cf201e75db439936e6
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sat May 28 17:31:36 2011 -0700
+
+ spec: Add more indexterm & glossterm links
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 0ffb15d69844f1a653d51e29e0c6a1140cd52c3e
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sat May 28 13:53:10 2011 -0700
+
+ spec: move id attributes for event definitions so fop can find them
+
+ FOP gives 'Unresolved ID reference "events:FocusOut" found.' errors
+ when the id attribute is on the emphasis tag, so moved up to the
+ surrounding entry tag.
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 41da11426e0ad420952fbd329527c2ae267e232b
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sat May 28 13:39:37 2011 -0700
+
+ spec: Add zone attributes to indexterm tags for more stable link ids
+
+ Use named id's instead of autogenerating idXXXXXX values that change
+ in different versions so that it's easier to have stable links.
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 58897af838482f52abc8a70fc1e1d39c89736bfb
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sat May 28 11:04:17 2011 -0700
+
+ spec: move &gt; outside emphasis to match &lt; in note after error list
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 19b35215c9cff167c62dabecef89e3d5f8df2853
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sat May 28 10:56:36 2011 -0700
+
+ spec: Syntactic Conventions examples should not be separate list entries
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit e6ad4dd8d054caf6cd63575167db468929532089
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sat May 28 09:54:07 2011 -0700
+
+ spec: Add cross-reference links in glossary to InputOnly & InputOutput
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 2fc4719ba4f122ce5604d693442fa041114526ac
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sat May 28 09:43:04 2011 -0700
+
+ spec: Markup VoidSymbol and NoSymbol with <keysym> instead of <emphasis>
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 9bbb6e3f835219110ec0f7bd72ba7fa92974bae8
+Author: Cyril Brulebois <kibi@debian.org>
+Date: Tue May 24 13:08:27 2011 +0200
+
+ Sort Latin 8 keysyms by codepoints.
+
+ The overall chaos misled implementors into writing interval checks to
+ determine the case, but that doesn't work too well when lines aren't
+ sorted.
+
+ Sort performed by calling “sort -k 3” on the part between #ifdef
+ XK_LATIN8 and #endif.
+
+ Signed-off-by: Cyril Brulebois <kibi@debian.org>
+ Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit b283f6cba77987b215556f80b6b2f1da45672d8b
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Mon May 23 16:01:02 2011 -0700
+
+ Add comments to Xfuncproto.h noting required xproto versions for each macro
+
+ Saves time trawling git logs to determine what to put in the call to
+ PKG_CHECK_MODULES in configure.ac when you start using one of these.
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+ Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+ Acked-by: Cyril Brulebois <kibi@debian.org>
+
+commit 217d1dae0093ccaaac59a4fa42000e732492cb66
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date: Wed Apr 27 17:25:53 2011 -0700
+
+ Add _X_NONNULL macro to annotate when a function expects arguments to be non-null
+
+ This will allow with compiler optimization and better static analysis.
+
+ Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+ Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+
+commit 6648db8f910fb74c100cf24436bf0df12cba7fd7
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date: Wed Apr 27 17:25:40 2011 -0700
+
+ Add _X_UNUSED attribute to designate unused variables and silence warnings
+
+ Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+ Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+
+commit 19c12c60c22d5a23039bc90845a6ecacdd64f2db
+Author: Matthieu Herrb <matthieu.herrb@laas.fr>
+Date: Wed Apr 20 22:57:05 2011 +0200
+
+ Fix __STDC_VERSION__ tests.
+
+ the existing test:
+ defined(__STDC__) && (__STDC_VERSION__ - 0 >= 199901L) causes an
+ warning when building X stuff with gcc -Wundef. Other tests for
+ __STDC_VERSION__ in the X sources all use
+ defined(__STDC_VERSION__) && (__STDC_VERSION__ -0 >= 199901L)
+
+ Signed-off-by: Matthieu Herrb <matthieu.herrb@laas.fr>
+ Reviewed-by: Matt Turner <mattst88@gmail.com>
+ Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit da46c2d0e11c1709b7dd6b2c79253ce8751c81bb
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Sun Feb 27 15:06:18 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 452ae1076b4ad8ccd60e218a3676baa274c083ff
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Wed Mar 23 11:44:18 2011 +1000
+
+ xproto 7.0.21
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 423f5faddbb1023d0c1cf55b9d1da4397aa1aa26
+Author: Harshula Jayasuriya <harshula@gmail.com>
+Date: Tue Mar 15 10:46:48 2011 +0000
+
+ Add #defines for Unicode Sinhala to keysymdef.h
+
+ Add #defines for Unicode Sinhala so that they can be used in the lk XKB
+ keyboard layout.
+
+ Signed-off-by: Harshula Jayasuriya <harshula@gmail.com>
+ Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+
+commit f0c5b701a5f8fe6be24229dea35c35b50afe8646
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Thu Feb 24 20:13:20 2011 -0800
+
+ Support _X_INLINE in any C99-compliant compiler
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 6eed63f7455d718bf6238ca2f24515329b2a3895
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Thu Jan 6 22:24:33 2011 -0800
+
+ Add missing notices to COPYING
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 1870ec9ce40e8852e1cdce473afa90d21d780e52
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Mon Dec 13 16:25:31 2010 -0800
+
+ Xfuncproto.h: Add _X_RESTRICT_KEYWORD for C99 & gcc in non-strict-C89 mode
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit e5604f04482350eb922a31ad4342aab91ab3b412
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Thu Dec 9 16:04:52 2010 -0800
+
+ Enable gcc attribute(__format__) on gcc versions older than 4.0
+
+ Enabled on 2.3 and up, since that's where it's available according to
+ http://www.ohse.de/uwe/articles/gcc-attributes.html#func-format
+
+ Tested with gcc 3.4.3 on Solaris.
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+ Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+
+commit d25f90fe260f546cdea0ec2ebc84df446eef5f47
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Tue Dec 7 19:05:26 2010 -0800
+
+ xproto 7.0.20
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 78806c9fc4be8da93581dcbdafbd668cac9f2d8b
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sat Dec 4 17:57:24 2010 -0800
+
+ spec: Convert .DS/.DE nroff sections to <literallayout> tags
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit f1309dd259f29357b362c7c40913f33d3c144f49
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sat Dec 4 17:37:05 2010 -0800
+
+ spec: Convert some tables that didn't get converted from troff properly
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 19e314d95219d64aea079eb9d2b378533b6efdcd
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sat Dec 4 16:28:48 2010 -0800
+
+ Replace ASCII -> arrows with Unicode ▶
+
+ Matches formatting used in current extension specs like randr
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit fa2daaceb0fe5324589b9fca9d156b41697d3a52
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sat Dec 4 16:06:37 2010 -0800
+
+ spec: Make request names in text hyperlinks to request definition sections
+
+ Same basic process as previous commit for event names
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 998f64c6c986feee7a745a5169152025b229c6d8
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sat Dec 4 15:31:21 2010 -0800
+
+ spec: Make event names in text hyperlinks to event definition sections
+
+ Started by taking list of event names and generating a list of perl
+ commands such as:
+ s{^\<emphasis role='bold'\>KeyPress\</emphasis\>}{<link linkend="events:KeyPress"><emphasis role='bold'>KeyPress</emphasis></link>}g;
+
+ and running that with perl -i -p /tmp/e.pl *.xml
+
+ Many of those changes were then manually reverted to avoid having
+ the same link appear multiple times in a paragraph or to avoid having
+ the definition sections link to themselves.
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit c4be93c2188c9d8b1b186dde4d80ef91b31f4123
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sat Dec 4 14:31:08 2010 -0800
+
+ spec: Convert Events chapter into sections
+
+ Started with a similar replace-regexp as the Requests chapter, but
+ with a lot more manual editing due to the sections with multiple
+ events grouped into a set.
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit eb772110ff1a4f6fc6d574bd23679b0408621ef3
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sat Dec 4 13:22:04 2010 -0800
+
+ spec: Convert Requests chapter to have a section per request
+
+ Bulk of change performed with emacs replace-regexp:
+ <para id="requests:[^"]+">
+ <emphasis role='bold'>\([^<]+\)</emphasis>
+ <indexterm significance="preferred"><primary>[^<]+</primary></indexterm>
+ </para>
+ with:
+ </section>
+ <section id="requests:\1">
+ <title>\1</title>
+ <indexterm significance="preferred"><primary>\1</primary></indexterm>
+
+ Plus manual editing of the first & last section, and manual
+ conversion of GrabButton & GrabServer due to extra indexterm lines.
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 14a0efb08c5e5ca12c8afce213d457e07900b5e6
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sat Dec 4 11:45:48 2010 -0800
+
+ spec: Fix a bunch of the .RB -> <emphasis> mappings
+
+ Cleans up the opening { of enum lists that the closing was handled
+ by commit 68bf1a7a0c89
+
+ perl -i -p -e 's{^<emphasis([^>]*)>(\W+?\s+)}{$2<emphasis$1>}g' *.xml
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit c11f17ab7654ff32bcf486db24e36a3620408871
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sat Dec 4 01:38:10 2010 -0800
+
+ spec: add more indexterms linking into the body of the document
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 19ce91d22578e0a12c4afb4171ae03a497c1fff3
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sat Dec 4 00:21:36 2010 -0800
+
+ spec: move another indexterm in glossary to workaround fop crashing bug
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 2406b705e546a97b39b3238bd95f125e0f004993
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Fri Dec 3 22:09:05 2010 -0800
+
+ spec: Change titles of other specs from emphasis to citetitle tags
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 10b0200992ee81c0749a69eeba1a05562d724b3a
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Fri Dec 3 22:00:44 2010 -0800
+
+ spec: Fix section title markup in Connection Setup chapter
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 573cf6480727dafa68bd14e5bc725f0b5839f34e
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Fri Dec 3 21:49:39 2010 -0800
+
+ spec: Fix section title markup in Protocol Formats chapter
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 79afc5fb996e820eaf437f1dff42df3a7f70810a
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Fri Dec 3 21:42:00 2010 -0800
+
+ spec: convert predefined atom list from table to simplelist
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 68bf1a7a0c89cdc1c48ed967793d083519f2fb96
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Fri Dec 3 16:02:45 2010 -0800
+
+ spec: Fix a bunch of the .BR -> <emphasis> mappings
+
+ perl -i -p -e 's{ (\W*?)\s*</emphasis>}{</emphasis>$1}g' *.xml
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit eef13837a6296cbe8d4cd9bda74352769f6a1a66
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Thu Dec 2 15:33:34 2010 -0500
+
+ specs: add ServerInterpreted addresses directory
+
+ Relocated from xorg-docs/specs/SIAddresses
+
+ Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit fb8a596aec87133500b6ee33b7843d82b09ecdf7
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Mon Nov 29 00:23:38 2010 -0800
+
+ spec: Add glossterm cross reference links to glossary
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit ee6ddb4b0e6852df8c07680bd6b1dddaa5c24616
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sun Nov 28 23:56:12 2010 -0800
+
+ spec: Stopping marking glossary terms as functions when they're not
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 710b9979c9db2d0be0dcc787fa1a9229d2b30636
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sun Nov 28 23:41:36 2010 -0800
+
+ spec: Finish converting some unconverted index entries in glossary
+
+ Change made by:
+ perl -i -p -e 's{\<\!-- \.IN "([^"]+)" "([^"]+)" "\@DEF\@" --\>}{ <indexterm significance="preferred"><primary>$1</primary><secondary>$2</secondary></indexterm>}' glossary.xml
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit ae571ef20dce0281cd7961663decd9e45838368e
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sun Nov 28 23:33:54 2010 -0800
+
+ spec: Add id's to glossary entries for use in cross-reference links
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 6bc03d2e9f390638295966714b96ec517ea0b3af
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sun Nov 28 23:26:53 2010 -0800
+
+ spec: Add cross-reference links in doc ("see ...")
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 2fd776b24ed85865186d40d95e2e9f11831a8e33
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sun Nov 21 11:46:30 2010 -0800
+
+ Sun's copyrights belong to Oracle now
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit fe7b269fd329201fdbffa12ce7724287c10a3abf
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sun Nov 21 09:48:52 2010 -0800
+
+ Bug 31132: Xarch.h needs to include <sys/types.h> on Solaris 10
+
+ Workaround older Solaris releases using types from <sys/types.h> in
+ <sys/byteorder.h> and not including it directly.
+ (That was fixed in OpenSolaris/Solaris 11 as part of:
+ http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=4483139 )
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+ Acked-by: Pat Kane <pekane52@gmail.com>
+
+commit 5d3428de974d15357b0ad407f4c5222cfaa8f9f3
+Author: Bastien Nocera <hadess@hadess.net>
+Date: Mon Nov 8 15:24:55 2010 +1000
+
+ Add XF86XK_TouchpadOn/Off
+
+ Those keysyms will be used to report events from the hardware. Hardware
+ like the HP laptops emit 2 separate keycodes when the touchpad is enabled
+ or disabled. So we can catch those in user-space and display a popup.
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=31300
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit d441b9b0230b57159fa8522b80f18a0b87f5aac5
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Tue Nov 9 15:19:09 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 cda6ce66caa01997b9dd32eb8689d6e746558369
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Wed Nov 3 00:04:22 2010 -0700
+
+ xproto 7.0.19
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 25bd19ee8587e2c00be7179cf809f4bd8e2a3bed
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Wed Nov 3 00:04:06 2010 -0700
+
+ README: Provide a small description
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit ce8b17064d38ec03527a51c2191674d56989807b
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sun Oct 31 15:35:52 2010 -0700
+
+ specs: Fix nesting of chapters included in sect1-9.xml
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 14acb707dbd1f49eb0e8e5bf4164f32c3209e030
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sun Oct 31 14:56:08 2010 -0700
+
+ specs: Move indexterms out of glossdef tags
+
+ Try to avoid problems similar to those fixed in libX11
+ commit 511c4f6d29b2da4f71093feabcbb3913cb5d12a7
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 0d44b3e4db593f3fb48835c9b39e23ef231efcb7
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sun Oct 31 14:51:55 2010 -0700
+
+ specs: Restore missing indexterms for request, type, error & event definitions
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit ea96e0e74fca3306c1320a5daf7fb9ff609b3c5a
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sat Oct 30 20:01:25 2010 -0700
+
+ specs: Convert troff ``quotes'' to DocBook <quote>quotes</quote>
+
+ perl -i -p -e 's{\`\`([^\047]+)\047\047}{<quote>$1</quote>}g' *.xml
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit d27f326c976d7da9ea43706bca1c3766f225ee6f
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sat Oct 30 19:54:56 2010 -0700
+
+ specs: Convert .IN troff tags to <indexterm> DocBook Tags
+
+ Many of the .IN tags seem to have been lost in translation before this.
+
+ Converted those still in comments with:
+
+ perl -i -p -e 's{\<\!-- \.IN "([^"]+)" "" "\@DEF\@" --\>}{<indexterm significance="preferred"><primary>$1</primary></indexterm>}' *.xml
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 34b099b7b6e72ceaf8edcbf0ca351af410c3b2fb
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sat Oct 30 19:26:10 2010 -0700
+
+ specs: Fix authorship section
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit c23cc9a4a728e5cccf685388f2e54eff31c3867f
+Author: Matt Dew <matt@osource.org>
+Date: Tue Aug 17 20:49:44 2010 -0400
+
+ specs: convert protocol .ms from xorg-docs to DocBook XML
+
+ Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit cb020b302c1ebb9477cd5b4adae8677597269733
+Author: Adam Jackson <ajax@redhat.com>
+Date: Tue Aug 10 10:20:01 2010 -0400
+
+ xproto 7.0.18
+
+ Signed-off-by: Adam Jackson <ajax@redhat.com>
+
+commit d14e0d02507dd873f43b1122c468a52ed5b295c1
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Mon May 17 20:57:27 2010 -0700
+
+ Add Sun cc 5.9 & later to compilers supporting noreturn attribute
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+ Reviewed-by: Adam Jackson <ajax@redhat.com>
+
+commit 9ffca704438993516016671e9a7f67c5ca21f142
+Author: Julien Cristau <jcristau@debian.org>
+Date: Sat May 15 17:43:32 2010 +0200
+
+ xproto 7.0.17
+
+ Signed-off-by: Julien Cristau <jcristau@debian.org>
+
+commit 81c3cc1ce1f163de91d33bfa1b335f8b4d309c13
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Sun Mar 28 19:25:52 2010 -0400
+
+ config: update AC_PREREQ statement to 2.60
+
+ Unrelated to the previous patches, the new value simply reflects
+ the reality that the minimum level for autoconf to configure
+ all x.org modules is 2.60 dated June 2006.
+
+ ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.60.tar.gz
+
+ Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 1f442cdd1c26fa10e654ef2e957e24c2306abb11
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Sun Mar 28 19:00:31 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 1511eb6065c103149b7ce59b4cc0aa538449cf80
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date: Sat Mar 27 19:42:59 2010 -0700
+
+ Add _X_NORETURN macro to signify functions that don't return
+
+ Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+ Reviewed-by: Alan Coopersmith <alan.coopersmith@sun.com>
+
+commit e7d73aec46f2ebc21e8b80378c3647b69f098b9a
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Sat Mar 27 16:38:27 2010 -0400
+
+ config: remove execute permission on configuration file
+
+ Introduced in commit c879dab58f82f4789f27933c22706c84015f8684
+ "avoid checking for fds_bits on mingw"
+
+ Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit bf25d06799da98c3df655d8a734fe98c98bf143e
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Fri Jan 15 13:31:40 2010 -0800
+
+ Update Sun license notices to current X.Org standard form
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
+
+commit d02f4b124489016f43478ac2ca2fbb2d0253ba02
+Author: Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
+Date: Tue Oct 13 16:51:14 2009 -0500
+
+ xproto: Cygwin GCC does not support visibility attributes
+
+ Signed-off-by: Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
+ Acked-by: Peter Hutterer <peter.hutterer@who-t.net>
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit ec13f2cc5af936aafc3a483f441c44aa5ed14fe3
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Sun Nov 22 19:24:48 2009 -0500
+
+ Makefile.am: add ChangeLog and INSTALL on MAINTAINERCLEANFILES
+
+ Now that the INSTALL file is generated.
+ Allows running make maintainer-clean.
+
+commit 45135e80f1e1f8818159f7d80372a77df0537738
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Mon Nov 16 11:13:30 2009 -0500
+
+ README: file created or updated #24206
+
+ Contains a set of URLs to freedesktop.org.
+
+commit cdd22487f12f7058404759bd138ada421debc93a
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Sun Nov 15 19:45:27 2009 -0500
+
+ 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 b99b992915dd19914c9464d9a96278d2cc2ceeeb
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Sun Nov 15 18:31:29 2009 -0500
+
+ Makefile.am: INSTALL file is missing or incorrect #24206
+
+ The standard GNU file on building/installing tarball is copied
+ using the XORG_INSTALL macro contained in XORG_DEFAULT_OPTIONS
+ Add INSTALL target
+
+commit caea0fd5a966a74465d965ecab89f4829dced157
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Sun Nov 15 18:11:36 2009 -0500
+
+ configure.ac: 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 f1b1d45cd955f24a338af098ebd6a181b1454b38
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Sat Nov 14 20:47:09 2009 -0500
+
+ configure.ac: AM_MAINTAINER_MODE missing #24238
+
+ This turns off maintainer mode build rules in tarballs.
+ Works in conjunction with autogen.sh --enable-maintainer-mode
+
+commit 78947b5a7e0ef934fdce7e1bce734d2cf29639b4
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Sat Nov 14 18:26:47 2009 -0500
+
+ .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 3ec82cd722407e4dccd6165786d3452f3ab80bea
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Fri Oct 2 10:46:06 2009 +1000
+
+ Add XF86XK_TouchpadToggle
+
+ Many laptops provide a key to enable or disable the touchpad and the
+ trackstick. On Lenovo T61s, this key is located on Fn + F8.
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 4253e208088d166a8666f673360ef69a3c86f8b0
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Wed Sep 23 17:04:09 2009 -0700
+
+ xproto 7.0.16
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
+
+commit 05914c82696432126a72845dd061c7f5e24963c5
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Wed Sep 23 17:00:18 2009 -0700
+
+ Don't need an #ifdef when both cases just include the same file
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
+
+commit ef37625372546efb32cdb37823b9927cf16b0840
+Author: Jon TURNEY <jon.turney@dronecode.org.uk>
+Date: Wed Jun 17 15:28:54 2009 +0100
+
+ Restore macro definition of sleep(), needed by Xming
+
+ Removed in error by commit 1defe6b37c23941fe2a67ad4fa66e8ab5f37f9b3
+
+ Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
+
+commit e9df99b12ef9fefdbc1c05ff51bddffe723051e9
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Sun Jun 14 09:54:58 2009 -0700
+
+ Drop #ifdef USG checks for some truly ancient (pre-SVR4) SysV's
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
+
+commit 385c1343f7e0782b89e40fa17e378bc1f75ce62e
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Sun Jun 14 09:43:53 2009 -0700
+
+ Get rid of unneeded && clause in list of LP64 ifdefs in Xmd.h
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
+
+commit 5aaec3c7a583354a07ec765327fd0edd6216981f
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Sun Jun 14 09:33:16 2009 -0700
+
+ Drop support for SunOS 4 and Solaris releases older than 2.5 (1995)
+
+ Includes changing remaining sun ifdef's to check for standard-conformant /
+ non-namespace-polluting #ifdef __sun instead of older #ifdef sun.
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
+
+commit 5bad478221c54c0dbf682ef2569f6ca5ac050049
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Sun Jun 14 09:10:06 2009 -0700
+
+ Use indentation to provide a map through the twisty maze of ifdefs, all alike
+
+ git diff -w shows no changes other than whitespace in this patch
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
+
+commit 1f59b5f8eac522bb0a5155393224496c39deca42
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Sun Jun 14 08:31:13 2009 -0700
+
+ Removing dangling #else block from X_NOT_STDC_ENV removal
+
+ Fixes mass damage caused by ced38e880b54f2aae31a5354aecb4235a129f0a4
+ moving the includes for unistd.h, fcntl.h, etc. from the else for
+ X_NOT_STDC_ENV into the #else for #ifndef _XOS_H_, which made them
+ go away for everyone.
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
+
+commit 4435ea3d806f5b9cd66b563a6b751ac5020404e3
+Author: Adam Jackson <ajax@redhat.com>
+Date: Fri Jun 12 12:41:57 2009 -0400
+
+ Use ## catenation not /**/
+
+commit 74d18e89a3a315ae9ee4fb3efcaf515abd339b1d
+Author: Adam Jackson <ajax@redhat.com>
+Date: Fri Jun 12 12:39:06 2009 -0400
+
+ __STDC__ is always defined in C89.
+
+commit bab9c572cd4dc916ff0acab99de8bb526212d77f
+Author: Adam Jackson <ajax@redhat.com>
+Date: Fri Jun 12 12:33:22 2009 -0400
+
+ Remove a bunch of garbage for unsupported platforms.
+
+commit ced38e880b54f2aae31a5354aecb4235a129f0a4
+Author: Adam Jackson <ajax@redhat.com>
+Date: Fri Jun 12 11:55:37 2009 -0400
+
+ Remove all trace of X_NOT_STDC_ENV (#6527)
+
+ Seriously C89 already you guys.
+
+commit 3fc87608d4b3f85d0dbd44ee9040d5ab60130bea
+Author: Adam Jackson <ajax@redhat.com>
+Date: Fri Jun 12 11:43:45 2009 -0400
+
+ Death to RCS tags.
+
+commit a2a0f01d367050ca182927b8219deb581a497c2c
+Author: Jeremy Huddleston <jeremyhu@freedesktop.org>
+Date: Tue Jun 9 00:47:25 2009 -0700
+
+ Apple: Only define _DARWIN_C_SOURCE if it isn't already defined
+
+commit 1defe6b37c23941fe2a67ad4fa66e8ab5f37f9b3
+Author: Jon TURNEY <jon.turney@dronecode.org.uk>
+Date: Fri Jun 5 18:04:58 2009 +0100
+
+ Cygwin/X: Don't destroy min/max macros in Xwindows.h
+
+ Now that macros named min/max rather than MIN/MAX are used consistently in the
+ X server, we need to ensure they work for Xwin builds. Change Xwindows.h from
+ simply destroying any definition of min/max, to avoiding defining them but
+ allowing any pre-existing definition to stand.
+
+ Also, try to improve the comment describing why this madness is needed in the
+ first place, and remove a no-longer needed macro definition of sleep()
+
+commit 32d14e349964c5b16e83eda902d9724aac380b59
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Thu Mar 5 15:12:26 2009 -0800
+
+ Remove #ifdef macII code left over from ancient A/UX 3.0 support
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
+
+commit 034319189648eaaa483f9546c62451edb7be0c28
+Author: James Cloos <cloos@jhcloos.com>
+Date: Mon Mar 2 12:54:41 2009 -0500
+
+ Bump to 7.0.15.
+
+commit 391f302a7d71b9169ce4c18794251ea3ccc95904
+Author: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br>
+Date: Tue Jan 27 20:06:28 2009 -0200
+
+ Janitor: Correct make distcheck and dont distribute autogen.sh
+
+commit 1e33337d4dd151da4f0898a86608a1ee67588163
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Mon Oct 27 16:36:34 2008 +1030
+
+ Add XF86XK_Suspend and XF86XK_Hibernate keysym defs.
+
+ At the moment, we have the following keysyms defined to put a computer into a
+ sleep state:
+
+ XF86XK_Standby 0x1008FF10 /* System into standby mode */
+ XF86XK_PowerDown 0x1008FF21 /* Deep sleep the system */
+ XF86XK_Sleep 0x1008FF2F /* Put system to sleep */
+
+ Proposed change by Richard Hughes:
+ "The nomenclature I've been trying to make stick
+ (most projects now use this) for a few years now is:
+
+ standby: high sleep state, nobody uses this any more
+ hibernate: sleep to disk - slow, but can remove power
+ suspend: sleep to ram - fast, but can't remove power
+ hybrid sleep: sleep to both, slow, and can remove power, but quick to
+ resume if you don't - most users don't use this"
+
+ This patch adds XF86XK_Suspend and XF86XK_Hibernate. The behaviour of
+ XF86XK_Sleep can then be configured on a per-session basis.
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@redhat.com>
+
+commit 2563153ed69d3d6f052ba275ff79df3cbe54b76d
+Author: James Cloos <cloos@jhcloos.com>
+Date: Tue Nov 11 16:26:28 2008 -0500
+
+ [keysymdef.h] Add dead_currency symbol.
+
+ As requested for the Bépo keyboard layout (http://clavier-dvorak.org/wiki/).
+
+ Cf. bugs:
+
+ http://bugs.freedesktop.org/show_bug.cgi?id=17821
+ http://bugs.freedesktop.org/show_bug.cgi?id=17822
+
+commit 735d745e17a6180f569f24f9792513b44e100aef
+Author: James Cloos <cloos@jhcloos.com>
+Date: Mon Oct 13 03:11:33 2008 -0400
+
+ Add a dead_belowcomma keysym
+
+ Requested by the Bépo group.
+
+ The belowcomma is only used for:
+
+ U+0218 [Ș] LATIN CAPITAL LETTER S WITH COMMA BELOW
+ U+0219 [ș] LATIN SMALL LETTER S WITH COMMA BELOW
+ U+021A [Ț] LATIN CAPITAL LETTER T WITH COMMA BELOW
+ U+021B [ț] LATIN SMALL LETTER T WITH COMMA BELOW
+
+ (aka 0xAA, 0xBA, 0xDE and 0xFE from iso-8859-16).
+
+ Cf: http://bugs.freedesktop.org/show_bug.cgi?id=17822
+ http://bugs.freedesktop.org/show_bug.cgi?id=17821
+ http://clavier-dvorak.org/wiki/
+
+commit 935dd37be409bd616ef46a4d3b62c44327b3f710
+Author: Sayamindu Dasgupta <sayamindu@gmail.com>
+Date: Mon Oct 13 03:00:53 2008 -0400
+
+ Add dead vowels in keysymdef.h
+
+ At OLPC, we are using an XKB based Amharic keyboard layout, which requires the
+ use of dead vowels to generate the various consonant + vowel combinations (see
+ http://en.wikipedia.org/wiki/Ge%27ez_alphabet#Syllable_signs for a detailed
+ explanation).
+
+ [Patch modified to use available keysym codes. -JimC]
+
+ Cf: http://bugs.freedesktop.org/show_bug.cgi?id=17437
+
+ Signed-off-by: James Cloos <cloos@jhcloos.com>
+
+commit c43f804f44ba3d751f343c2e27d9b491a1ebb458
+Author: James Cloos <cloos@jhcloos.com>
+Date: Wed Sep 17 04:09:39 2008 -0400
+
+ Add dead keysyms for DOUBLE GRAVE and INVERTED BREVE accents
+
+ Several COMBINING characters are used in libX11's Compose tables
+ where dead keys should be used; these are the two most-used which
+ so far have not had equivalent dead keys.
+
+commit 33a7de5cdacb59503b26c6523ffb33dba118faed
+Author: Peter Hutterer <peter.hutterer@redhat.com>
+Date: Thu Oct 23 22:41:01 2008 +1030
+
+ Bump to 7.0.14.
+
+commit 1cf41088ff751e60071a519466b5a51b65c7626a
+Author: Bastien Nocera <bnocera@redhat.com>
+Date: Wed Oct 15 14:20:45 2008 +1030
+
+ Keysyms needed for some HID remote controls to work under X. #16519
+
+ In particular, this enables Sony Ericsson phones and PS3 BD remotes.
+
+ X.Org Bug 16519 <https://bugs.freedesktop.org/show_bug.cgi?id=16519>
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@redhat.com>
+
+commit 0b541b3fa282531c97c6ecee574c8b92b1489bfc
+Author: Peter Hutterer <peter.hutterer@redhat.com>
+Date: Tue Oct 14 21:56:14 2008 +1030
+
+ Fix typos in comments (UP/DOWN TACK and LEFT/RIGHT TACK wrong way round).
+
+ Spotted by Erik Streb and Julien Cristau.
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@redhat.com>
+
+commit c94477f16356790741ebc139d2d0b15d79c83e28
+Author: Peter Hutterer <peter.hutterer@redhat.com>
+Date: Tue Oct 14 21:54:16 2008 +1030
+
+ Revert "Fix typos in comments (UP/DOWN TACK and LEFT/RIGHT TACK wrong way round)."
+
+ Codepoints should have moved with the comments. See next commit for correct
+ patch.
+
+ This reverts commit 2945d2f97c264783e4050a8f6c3016290014b9e2.
+
+commit 2945d2f97c264783e4050a8f6c3016290014b9e2
+Author: Peter Hutterer <peter.hutterer@redhat.com>
+Date: Tue Oct 14 21:04:08 2008 +1030
+
+ Fix typos in comments (UP/DOWN TACK and LEFT/RIGHT TACK wrong way round).
+
+ Spotted by Erik Streb.
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@redhat.com>
+
+commit 610eb9698316b7cdfe378ce7776c4520f8b061ff
+Author: Peter Hutterer <peter.hutterer@redhat.com>
+Date: Mon Oct 13 12:01:16 2008 +1030
+
+ Add keysyms for XF86XK_Battery, XF86XK_Bluetooth, XF86XK_WLAN, XF86XK_UWB.
+
+commit 0846d7adfe790897e879c5ed53d4f81db459a20d
+Author: James Cloos <cloos@jhcloos.com>
+Date: Sun Jul 13 17:57:09 2008 -0400
+
+ Add dead_perispomeni to keysymdef.h
+
+ Make the dead_perispomeni keysym an alias to dead_tilde
+ (which is currently used for entering characters with
+ perispomeni).
+
+ Cf: https://bugs.freedesktop.org/show_bug.cgi?id=14013
+
+commit 38edd9839fa8495602378af36c67b2477b24eca2
+Author: James Cloos <cloos@jhcloos.com>
+Date: Sun Jul 13 17:54:47 2008 -0400
+
+ fix typo in commit 40ed4eef
+
+commit 53859ee4e431c21000e282971894dbe9384ed205
+Author: Peter Hutterer <peter@cs.unisa.edu.au>
+Date: Wed May 28 17:17:38 2008 +0930
+
+ Bump to 7.0.13.
+
+commit 44e458285bb2e7771963a9ab9b5f03d2fb48e611
+Author: Peter Hutterer <peter@cs.unisa.edu.au>
+Date: Tue May 15 16:41:08 2007 +0930
+
+ Add GenericEvent and xGenericEvent definitions.
+ (cherry picked from commit 8a96cdca08db2563e8c4c7c9a110a3ab6d973fcc)
+
+commit 22878c30d21580146200c00070478f88d969bcaa
+Author: Jeremy Huddleston <jeremyhu@freedesktop.org>
+Date: Thu May 8 15:02:41 2008 -0700
+
+ Apple: Added a comment to explain _DARWIN_C_SOURCE
+
+commit e3035a7e6e56e01eb79478ea5342e032ec67a190
+Author: Jeremy Huddleston <jeremyhu@freedesktop.org>
+Date: Thu May 8 12:16:15 2008 -0700
+
+ Apple: Define _DARWIN_C_SOURCE otherwise _XOPEN_SOURCE, _POSIX_SOURCE, or _POSIX_C_SOURCE will cause fd_mask to not be defined due to the strict namespace
+
+commit 05b119d78e1c6a4db563b2a976cee0173489f9b6
+Author: Jeremy Huddleston <jeremyhu@freedesktop.org>
+Date: Thu May 8 11:36:03 2008 -0700
+
+ Apple: Cleaned up some Apple definitions
+
+commit c879dab58f82f4789f27933c22706c84015f8684
+Author: Alan Hourihane <alanh@tungstengraphics.com>
+Date: Tue Apr 29 00:37:28 2008 +0100
+
+ avoid checking for fds_bits on mingw
+
+commit 8642ec676db0dd875f4d3a97d8a3cdbf6843a985
+Author: Colin Harrison <colin.harrison-at-virgin.net>
+Date: Sat Apr 26 18:21:41 2008 +0100
+
+ Use Sleep() instead of sleep() on windows
+
+ (was already done in Xwindows.h, just not Xw32defs.h)
+
+commit a893a6ac5d9fdfe9a420d1812402a01904e6482b
+Author: Colin Harrison <colin.harrison-at-virgin.net>
+Date: Sat Apr 26 08:52:29 2008 +0100
+
+ Use winsock2.h
+
+commit c705bab0f6efcb6937b7ccc2fb415e701878fddb
+Author: Markus Kuhn <Markus.Kuhn@cl.cam.ac.uk>
+Date: Mon Apr 21 21:27:26 2008 +0100
+
+ Added comment to slightly discourage the definition of ever more Unicode keysyms
+
+commit 44e24a27bca023cf7b799f191fe6d52e12efbe5f
+Author: James Cloos <cloos@jhcloos.com>
+Date: Sat Apr 12 15:48:46 2008 -0400
+
+ Add more dead key syms
+ Add dead keys to support input of the precomposed latin characters in
+ ISO 10747 which have ring, line, circumflex, tilde, breve or diaeresis
+ below.
+
+ This addresses: https://bugs.freedesktop.org/show_bug.cgi?id=15446
+
+commit 07e83988ec0b1c9577646daca3943badd5dcc0d1
+Author: James Cloos <cloos@jhcloos.com>
+Date: Thu Mar 6 11:34:17 2008 -0500
+
+ Fix typo in XF86Keysym.h
+
+ Fix typo reported in https://bugs.freedesktop.org/show_bug.cgi?id=11193
+ thereby making XF86Keysym.h match libX11’s XKeysymDB.
+
+commit d34310efef11264ddff79320b8c6f03705b1208a
+Author: Adam Jackson <ajax@redhat.com>
+Date: Wed Mar 5 22:09:16 2008 -0500
+
+ x11proto 7.0.12
+
+commit e4ad7a8080e4ac0b868fa7cf39bc5ad9a6e0bee1
+Author: Jeremy Huddleston <jeremy@tifa.local>
+Date: Sun Feb 10 19:07:49 2008 -0800
+
+ Fixed #ifdef checks that were using i386 to use __i386__
+
+ """
+ It's simply obsolete, sloppy, compiler namespace pollution. The
+ compiler is not allowed to predefine symbols that might conflict with
+ ordinary identifiers. For backwards compatibility gcc currently
+ predefines i386 when compiling for x86 32-bit (but not 64-bit), but that
+ will go away. It is also not defined if you specify -ansi when invoking
+ the compiler, because then it is seriously standards compliant. Other
+ compilers shouldn't define it either. Correct code shouldn't rely on it
+ being defined. However __i386__ is safe and proper.
+ """
+
+commit e49280c1c33622dbf288b0ac4f8324b01ff9b4aa
+Author: Jeremy Huddleston <jeremy@yuffie.local>
+Date: Mon Dec 10 21:33:01 2007 -0800
+
+ Changed __DARWIN__ to __APPLE__
+
+commit 5ae4d304ecb5fb4af0435c9f2efde3d2da5905d1
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Tue Oct 30 18:44:49 2007 -0700
+
+ Make Xalloca.h work with Sun C++ compiler
+
+commit 5ccc71161283fdb2c42da1eeb4049650f6a2f429
+Author: Ben Byer <bbyer@bbyer.apple.com>
+Date: Tue Oct 30 18:40:47 2007 -0700
+
+ fd_mask needs to be defined on OS X, too
+
+commit 8be48ca399c3efd0e5d59f53da1b37d02647f33b
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Mon Sep 24 12:28:25 2007 +0300
+
+ Check headers before testing for fds_bits access method (bug #8442)
+
+ HP-UX doesn't have sys/select.h, so make sure we don't overzealously include
+ headers when we try to find out how to use fds_bits.
+
+commit 68e841fb4bf489531635e6bee70f041d2c3cb87c
+Author: James Cloos <cloos@jhcloos.com>
+Date: Sat Sep 8 08:30:17 2007 -0400
+
+ bump to 7.0.11
+
+commit 11fd082a384499c38065e06065bf80f244e9909a
+Author: Eric Anholt <eric@anholt.net>
+Date: Tue Aug 28 14:54:44 2007 -0700
+
+ Describe what XF86XK_Display does (or now is meant to do).
+
+commit 40ed4eef92e31fcf7ea0a436e1a00cdf49484c1b
+Author: James Cloos <cloos@jhcloos.com>
+Date: Wed Aug 22 21:10:47 2007 -0400
+
+ Add dead_abovecomma and dead_abovereversedcomma
+
+ Also added aliases dead_psili and dead_dasia.
+
+ The UCS unifies Combining Psili and Combining Dasia with
+ Combining Comma Above and Combining Reversed Comma Above.
+ These two aliases mirror that unification.
+
+commit ab74d270c76b17926504815ba43ee35b8b18d3be
+Author: James Cloos <cloos@jhcloos.com>
+Date: Wed Aug 22 21:01:48 2007 -0400
+
+ Comment on the new locations of the files referenced in keysymdef.h
+ keysymdef.h has a comment from the monolithic days suggesting that
+ the file be kept in sync with mappings inxc/lib/X11/KeyBind.c and
+ the protocol specication in xc/doc/specs/XProtocol/X11.keysyms.
+
+ This commit adds pointers to the new locations of those two files.
+
+commit 1edcfdb7f5c51e5c8014c56c4d5937337b7d4302
+Author: James Cloos <cloos@jhcloos.com>
+Date: Tue Aug 21 00:10:08 2007 -0400
+
+ Add *~ to .gitignore to skip patch/emacs droppings
+
+commit d8a49874bbd05a927c42102c0c5c147cf72cb1dd
+Author: Colin Harrison <colin.harrison-at-virgin.net>
+Date: Wed May 9 16:46:25 2007 +0100
+
+ bcopy needs definition in Xfuncs.h for Xming
+
+commit 7505880329d6b81f0c77d6aaa3995390659d5c63
+Author: Tilman Sauerbeck <tilman@code-monkey.de>
+Date: Tue May 1 14:54:27 2007 +0200
+
+ Added some more files to .gitignore.
+
+commit 0c55a57dca2e888ba089e280f62e1c5bb55db7d7
+Author: Tilman Sauerbeck <tilman@code-monkey.de>
+Date: Tue May 1 14:52:57 2007 +0200
+
+ Enable GCC's visibility attributes on GCC 4 or greater only.
+
+commit 30f5eedf800f6683161fca9fc3e2d6ddc9ce0ac3
+Author: Zephaniah E. Hull <warp@agamemnon.b5>
+Date: Fri Feb 2 15:11:26 2007 -0500
+
+ Add keysym definitions from Jim Gettys.
+
+commit 5951f0355c6b1c591241bccb2023e6c4d493e701
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Sat Dec 16 01:09:50 2006 +0200
+
+ bump to 7.0.10
+
+commit 0422755ef9373fbb6f69fbb599d791331837f747
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Sat Dec 16 01:09:44 2006 +0200
+
+ don't distribute Xfuncproto.h and Xpoll.h
+ Don't distribute these two files, as they're generated during the build.
+
+commit cf44526713681ccfb6ef929a9c25ea650c5d1a32
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Wed Dec 6 19:02:19 2006 +0200
+
+ Makefile.am: make ChangeLog hook safer
+ Make ChangeLog hook as safe as possible.
+
+commit 528e313fd1f1ae6f2303d3963afe41545f55ef88
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Thu Oct 26 00:45:44 2006 +0300
+
+ bump to 7.0.9
+
+commit ab484c934301a61edc66dc1e4f554ec97b53aaf8
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Thu Oct 26 00:45:36 2006 +0300
+
+ Xfuncproto: add _X_LIKELY and _X_UNLIKELY
+ Add gcc branch hinting annotations.
+
+commit 178cae180bc8b2e8feaaeda6d7c0317cf2715e14
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Thu Sep 21 18:43:06 2006 +0300
+
+ Xfuncproto: define _X_INLINE for older compilers
+
+commit 241e9dfd400aa21919d06fb7c78b5730eee12aab
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Thu Sep 21 14:51:00 2006 +0300
+
+ bump to 7.0.8
+
+commit e51b21e316a5a1b9442a5d972b4ffa03455aca6e
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Thu Sep 21 14:50:45 2006 +0300
+
+ XF86keysym: add keyboard/monitor brightness controls (Bug #8120)
+ Add XF86{Kbd,Mon}Brightness{Up,Down}, and XF86KbdLightOnOff.
+
+commit c3f56593f776e7f9e3e0d220c6bcf8be38a16839
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Wed Sep 20 21:11:30 2006 +0300
+
+ Xfuncproto: add _X_INLINE
+
+commit 4fb2e257ae6de38971be8005283402226aea1ee5
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Fri Jul 14 17:59:19 2006 -0700
+
+ Replace manual ChangeLog with dist-hook to generate from git log
+
+commit 2153ef4b7c2a93cba39ae08352ea2c46e5f0eefb
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Fri Jul 14 17:54:38 2006 -0700
+
+ renamed: .cvsignore -> .gitignore
+
+commit 0b76eb310307cd16e55d0c0792b54a2c6774fb88
+Author: Dan McNichol <mcnichol@austin.ibm.com>
+Date: Fri Jul 14 17:53:34 2006 -0700
+
+ Bug #7458: AIX changes to Xmd.h
+
+ Bugzilla Bug #7458 <https://bugs.freedesktop.org/show_bug.cgi?id=7458>
+ Patch #6179 <https://bugs.freedesktop.org/attachment.cgi?id=6179>
+
+commit bb7584b5c88236c59c4e3040bc7c28c150abf048
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Sat Jun 10 15:33:50 2006 +0000
+
+ Add ISO_Level5_{Shift,Latch,Lock}.
+
+commit e9aebeae3661d4c464c7aa53722d0a6bf915101a
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Thu Jun 1 23:31:20 2006 +0000
+
+ Bug #6887: Add dead_stroke, bump to 7.0.7. (Troy Korjuslommi)
+
+commit f3886640d29026359ffc4add39b66b8ff48472d3
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Thu Jun 1 23:00:34 2006 +0000
+
+ Bump to 7.0.6.
+
+commit d10d0302be37adb22804270926332e9d701935bb
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Thu Jun 1 23:00:03 2006 +0000
+
+ Bug #6296: Add support for Braille. (Samuel Thibault)
+
+commit 0471bfcce2787d2f1ff0fc2d019840e2bae8bc49
+Author: Adam Jackson <ajax@nwnk.net>
+Date: Wed Apr 26 23:26:49 2006 +0000
+
+ Bump to 7.0.5
+
+commit 2a2b6db1f78f94c8f3690f675f0c032401fb2541
+Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
+Date: Wed Apr 26 00:00:02 2006 +0000
+
+ Fix more comment typos.
+
+commit 33cea539618d58d64efb6a5c0465d14a471256cd
+Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
+Date: Thu Apr 20 01:24:25 2006 +0000
+
+ On Solaris, #include <sys/isa_defs.h> to be sure _LP64 is defined in 64-bit
+ builds.
+ Fix some comment typos.
+
+commit 5e7d5cbf21c33f883ab508a51422775f59c4da00
+Author: Kevin E Martin <kem@kem.org>
+Date: Thu Dec 15 00:24:39 2005 +0000
+
+ Update package version number for final X11R7 release candidate.
+
+commit 1827a78f3a23c77dbcddfc8227d85c5add59d819
+Author: Kevin E Martin <kem@kem.org>
+Date: Sat Dec 3 05:49:47 2005 +0000
+
+ Update package version number for X11R7 RC3 release.
+
+commit 45811c86eb34e9f09e7d807ba4633107513f0d52
+Author: Kevin E Martin <kem@kem.org>
+Date: Sat Dec 3 01:13:36 2005 +0000
+
+ Automatically generate FUNCPROTO and NARROWPROTO defines in Xfuncproto.h.
+
+commit c03cc7739b37ca504a2b56a73945755c41c68b2a
+Author: Eric Anholt <anholt@freebsd.org>
+Date: Mon Nov 21 10:51:15 2005 +0000
+
+ Ignore Xpoll.h, which is generated now.
+
+commit 54c8ddf303053fb398e00fc8a35df712a7f3d47d
+Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
+Date: Mon Nov 21 02:47:21 2005 +0000
+
+ Change values of XK_MATHEMATICAL symbols to use 0x1000000 + Unicode value,
+ as Xorg Architecture Task Force agreed last year should be done for all
+ new keysyms mapped to Unicode characters.
+
+commit f13eca1bc0feba2476f87e019a4ef40693a61ed8
+Author: Kevin E Martin <kem@kem.org>
+Date: Wed Nov 9 21:20:33 2005 +0000
+
+ Update package version number for X11R7 RC2 release.
+
+commit 448763bde4a31cb012ad17cd6c5159411102432b
+Author: Kean Johnson <kean@armory.com>
+Date: Tue Nov 8 06:33:25 2005 +0000
+
+ See ChangeLog entry 2005-11-07 for details.
+
+commit 59a5a5ebb6781d417d7a4d5905999da5fc76a083
+Author: Kevin E Martin <kem@kem.org>
+Date: Wed Oct 19 02:48:15 2005 +0000
+
+ Update package version number for RC1 release.
+
+commit 3f74cc5e8309b2a4ac7671ca3c52c304ec5aa57f
+Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
+Date: Sat Oct 15 00:48:27 2005 +0000
+
+ Remove duplicate keysyms accidentally added to XK_MATHEMATICAL section.
+
+commit eaffdc0d593b94d9036033911535371e73698573
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Sun Oct 9 15:37:29 2005 +0000
+
+ Bug #4688: Add various mathematical keysyms (all Unicode).
+
+commit 40b6e64fb1084f7b0270c279ac7132e52886c912
+Author: Matthieu Herrb <matthieu.herrb@laas.fr>
+Date: Sun Aug 21 15:27:27 2005 +0000
+
+ define CSRG_BASED here on systems that used to define it in Imake
+ configuration. For use in the modular tree.
+
+commit 04f9f7fd17cab16e5b0b135409011c0d284b002c
+Author: Eric Anholt <anholt@freebsd.org>
+Date: Tue Aug 2 19:19:40 2005 +0000
+
+ Add basic .cvsignore files for proto modules.
+
+commit cd0400eeda5d7818232844d93343877ef0ff8168
+Author: Adam Jackson <ajax@nwnk.net>
+Date: Tue Aug 2 18:36:30 2005 +0000
+
+ Fix the fds_bits test on OSX and maybe others. OSX defines fd_set in
+ <sys/types.h> just to be perverse.
+
+commit a475adb523a4d24cd53d436ba8c98ac7c8d37934
+Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
+Date: Sat Jul 30 21:07:25 2005 +0000
+
+ Add prototypes of Xalloc/free functions.
+ Export ImUtil.h to match modular tree install.
+ Define SVR4 to 1 to avoid warning about redefining to different values.
+ Include missing headers to clear more compiler warnings.
+
+commit f6bd2288d3630ff7cb864e54cc7ebab1b3069067
+Author: Kevin E Martin <kem@kem.org>
+Date: Fri Jul 29 21:22:57 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 74a3f7f77830e4417a4bc4145114030dfaef6f4e
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Sat Jul 23 02:53:32 2005 +0000
+
+ Remove all _XOPEN_SOURCE definitions from Xos.h, as Xpoll.h.in now deals
+ with this by using which of fds_bits or __fds_bits we have.
+
+commit f97e34e65e403140dde00d260be0fd7f853ac8f0
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Fri Jul 22 08:01:39 2005 +0000
+
+ Add includex11dir as a path to the includes, sans X11/.
+ Turn Xpoll.h into a generated file. In the modular tree, substitute in
+ whichever of fds_bits or __fds_bits is being used for the member of
+ fd_set on the system; in the monolithic tree, substitute in fds_bits
+ unconditionally, as that's the way it was before thanks to
+ _XOPEN_SOURCE being defined.
+
+commit 7a9ce57163172557d6ba41119a5a3b2837dbbc8e
+Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
+Date: Sat Jul 16 20:54:13 2005 +0000
+
+ Guard INCLUDE_ALLOCA_H define to end redefinition warnings.
+
+commit 825b6ae347b3896b8ea38e6021170d45ae3bfd65
+Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
+Date: Thu Jul 14 22:08:38 2005 +0000
+
+ Don't define _XOPEN_SOURCE on SVR4, because it will REMOVE required
+ definitions.
+
+commit acc0551fb1af1152c1b630ff5e82f023f11751e2
+Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
+Date: Wed Jul 13 23:43:08 2005 +0000
+
+ #define INCLUDE_ALLOCA_H when building with Sun compilers. (Imake *.cf
+ files define this for a number of platforms in the monolith, but these
+ will need to be translated into #ifdef's or similar mechanism to work
+ in a world without Imake.)
+
+commit b8301067b6e962a3dc786dd909726b7e6cb81085
+Author: Alexander Gottwald <alexander.gottwald@s1999.tu-chemnitz.de>
+Date: Wed Jul 13 20:12:13 2005 +0000
+
+ include <X11/Xwindows.h> instead of <windows.h>. Several namespace
+ conflicts are worked around in Xwindows.h
+
+commit ec7a156bcdbe8e4bddf232d4a03f47d426096736
+Author: Keith Packard <keithp@keithp.com>
+Date: Wed Jul 13 07:23:56 2005 +0000
+
+ Make some minor source adjustments so that we don not need to use
+ -D_XOPEN_SOURCE -D_BSD_SOURCE everywhere as this will leak out of the
+ modular environment and into application build processes, potentially
+ foulling up their compiles.
+
+commit 2a0445903d06c332acf70cfd18ba57ddbbeada32
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Sun Jul 3 07:55:00 2005 +0000
+
+ Move misc.h and os.h from proto/X11 to xserver/xorg/include.
+
+commit ef6f542053b30af29b8045ffa6ce26386aab7bba
+Author: Søren Sandmann Pedersen <sandmann@daimi.au.dk>
+Date: Tue Jun 28 13:15:27 2005 +0000
+
+ - Remove xfixes.pc.in from lib/lbxutil
+ - Add missing backslash in proto/X11/Makefile.am
+ Both pointed out by ISHIKAWA Mutsumi
+
+commit 4cf89be7baf8a79d2d399abd17c4e23279cca364
+Author: Søren Sandmann Pedersen <sandmann@daimi.au.dk>
+Date: Mon Jun 27 17:41:09 2005 +0000
+
+ - Add os.h and misc.h to proto/X11
+ - In symlink.sh move os.h and misc.h from xserver/include to proto/X11
+ - in xc/lib/lbxutil/ do some include-with-<>-instead-of-with-""
+
+commit e575c5104a8627428dd18c4040d4ad787655164a
+Author: Søren Sandmann Pedersen <sandmann@daimi.au.dk>
+Date: Wed May 25 22:12:21 2005 +0000
+
+ - Use XTRANS_CONNECTION_FLAGS macro in lib/FS/configure.ac
+ - Don't symlink transport.c, which is a generated file
+ - instead add a new file fs_transport.c that include Xtrans/X11/transport.c
+
+commit 207e3f82011d5f83db0eca318a1de50f0c1da0dc
+Author: Søren Sandmann Pedersen <sandmann@daimi.au.dk>
+Date: Wed May 25 21:47:56 2005 +0000
+
+ - Add FSlib to symlink.sh
+ - Change Xtrans includedir back to be X11/Xtrans, so that users of it can
+ continue to include <X11/*>
+ - Add build system for FSlib
+ - Conditionally include config.h in xc/lib/FS
+ - Remove redundant include of FSproto.h in xc/lib/FS
+ - Add check to proto/X11/configure.ac whether -D_XOPEN_SOURCE is needed.
+
+commit a5a4bfe9b432e7d8238f9a02d80be4ce6bb64978
+Author: Josh Triplett <josh@speakeasy.net>
+Date: Mon May 23 01:22:10 2005 +0000
+
+ The macros in Xpoll.h poke at the guts of struct fd_set in ways that only
+ work if _XOPEN_SOURCE is defined, so define it in Cflags in the
+ pkg-config file.
+
+commit 2f4c3aa871a047359f8121e6401be1ba4cf0b8e0
+Author: Adam Jackson <ajax@nwnk.net>
+Date: Thu May 19 00:22:40 2005 +0000
+
+ revert last change, didn't do right thing at all, sorry for the noise
+
+commit 4809dd9150599a9e88f64cd1b82737872b7b1b94
+Author: Adam Jackson <ajax@nwnk.net>
+Date: Thu May 19 00:10:19 2005 +0000
+
+ Require automake 1.7 in AM_INIT_AUTOMAKE
+
+commit 6ff17c33f0773e152122d66cbaffaa54e53e086c
+Author: Josh Triplett <josh@speakeasy.net>
+Date: Sat May 14 07:56:49 2005 +0000
+
+ Add AUTHORS file for X11 from xlibs tree.
+
+commit 3f8b0ba6071dcdd62ea424cab0bddb39db2ebe6a
+Author: Josh Triplett <josh@speakeasy.net>
+Date: Sat May 14 07:55:10 2005 +0000
+
+ Add some COPYING files.
+
+commit 803c8ecaba2f8c703bbb46c0d740bfa349ce0245
+Author: Kevin E Martin <kem@kem.org>
+Date: Fri May 6 01:46:31 2005 +0000
+
+ Initial build system files for proto module.
+
+commit a870c60741273ebd6cb1e69b4e535ce3a6bc76bf
+Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
+Date: Thu Apr 28 22:04:12 2005 +0000
+
+ Don't define X_NOT_STDC_ENV on Solaris x86. Bugzilla #3158:
+ https://bugs.freedesktop.org/show_bug.cgi?id=3158 Patch #2588:
+ https://bugs.freedesktop.org/attachment.cgi?id=2588 (Henry Zhao, Sun
+ Microsystems)
+
+commit 372f37171ba3875ea4bf7f60150d92869e06010f
+Author: Alexander Gottwald <alexander.gottwald@s1999.tu-chemnitz.de>
+Date: Wed Apr 20 13:58:17 2005 +0000
+
+ check for define PATH_MAX before referencing it
+
+commit e489ec65b4b2ab0a050d8dbf7ec0658e6decb8b3
+Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
+Date: Wed Mar 2 19:29:31 2005 +0000
+
+ Patch #2007 <https://bugs.freedesktop.org/attachment.cgi?id=2007>
+ 1) Fix Solaris #ifdefs to choose between UI/SVR4 (early POSIX draft) and
+ POSIX standard thread API's correctly.
+ 2) Fix calls to POSIX standard versions to check errors correctly. (POSIX
+ defines a return value of 0 on success, errno value on error, but the
+ macros were checking for -1 on error.)
+
+commit d761e87224d3e60c5355ac3e3468835fc3b4be92
+Author: Roland Mainz <roland.mainz@nrubsig.org>
+Date: Wed Mar 2 11:20:29 2005 +0000
+
+ xc/config/cf/DragonFly.cf
+ xc/config/cf/Imake.cf
+ xc/config/cf/Imakefile
+ xc/config/imake/imake.c
+ xc/config/imake/imakemdep.h
+ xc/extras/drm/shared/drm.h
+ xc/include/Xos_r.h
+ xc/lib/xtrans/Xtranssock.c
+ xc/programs/Xserver/hw/xfree86/os-support/xf86_OSlib.h
+ xc/programs/Xserver/hw/xfree86/os-support/xf86_libc.h
+ xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_agp.c
+ //bugs.freedesktop.org/show_bug.cgi?id=1712) attachment #2004
+ (https://bugs.freedesktop.org/attachment.cgi?id=2004): Add support for
+ DragonFly/BSD platform. Patch by Jeroen Ruigrok <asmodai@tendra.org>
+ and Mike Verona <firedragonfly@gmail.com>.
+
+commit 1cae0cb4b1442b34d76ee5623fb2a17ed2353c50
+Author: Alexander Gottwald <alexander.gottwald@s1999.tu-chemnitz.de>
+Date: Sun Jan 9 15:06:04 2005 +0000
+
+ Make sure PATH_MAX is at least 1024
+
+commit 9df4ffce552a0f6eca47764a3f79b466629e8bab
+Author: Egbert Eich <eich@suse.de>
+Date: Mon Jan 3 18:03:49 2005 +0000
+
+ gcc 4 doesn't like predeffines line 'linux' any more. To muffle the
+ compiler replace them with __linux__ (Bugzilla #2207).
+
+commit dd82af84ed67f439444e75ea1d032c082e15db51
+Author: Alexander Gottwald <alexander.gottwald@s1999.tu-chemnitz.de>
+Date: Mon Nov 15 15:06:53 2004 +0000
+
+ Bufzilla #1802, http://freedesktop.org/bugzilla/show_bug.cgi?id=1802 Added
+ mingw (Win32) port
+
+commit 618956f1f783a8c330aab8eac425937f0b8e50e1
+Author: Markus Kuhn <Markus.Kuhn@cl.cam.ac.uk>
+Date: Sun Sep 26 20:46:18 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 7cb1490d8932d745b3a5e2b3370a000da064306f
+Author: Kevin E Martin <kem@kem.org>
+Date: Wed Aug 11 21:14:16 2004 +0000
+
+ Apply PPC64 build patch (Bug #303, Mike A. Harris, Alan Coopersmith).
+
+commit 5b67de2bce0e33a4a85439ebcf7b726a6da24545
+Author: Egbert Eich <eich@suse.de>
+Date: Fri Apr 23 18:43:05 2004 +0000
+
+ Merging XORG-CURRENT into trunk
+
+commit e88a09c1df46637979c4d131a8e41af923ff4d45
+Author: Egbert Eich <eich@suse.de>
+Date: Sun Mar 14 08:31:34 2004 +0000
+
+ Importing vendor version xf86-4_4_99_1 on Sun Mar 14 00:26:39 PST 2004
+
+commit 9259b43390c50d330f557390cc4576f5315c3f53
+Author: Egbert Eich <eich@suse.de>
+Date: Wed Mar 3 12:10:53 2004 +0000
+
+ Importing vendor version xf86-4_4_0 on Wed Mar 3 04:09:24 PST 2004
+
+commit 99bbbc3fcaf67b02a50e4ff4007225b1b64beb36
+Author: Egbert Eich <eich@suse.de>
+Date: Thu Feb 26 13:35:11 2004 +0000
+
+ readding XFree86's cvs IDs
+
+commit 82d7bb39bc84eb16134e931263f53bc88d1788ac
+Author: Egbert Eich <eich@suse.de>
+Date: Thu Feb 26 09:22:24 2004 +0000
+
+ Importing vendor version xf86-4_3_99_903 on Wed Feb 26 01:21:00 PST 2004
+
+commit 0700ff31a84abc06fdf4b05c2328ff2329dc909c
+Author: Egbert Eich <eich@suse.de>
+Date: Thu Jan 29 08:07:54 2004 +0000
+
+ Importing vendor version xf86-012804-2330 on Thu Jan 29 00:06:33 PST 2004
+
+commit ad76b5cc436937d9fb945bd43d9356651fe182ca
+Author: Kaleb Keithley <kaleb@freedesktop.org>
+Date: Fri Dec 19 20:54:20 2003 +0000
+
+ XFree86 4.3.99.902 (RC 2)
+
+commit 376f9efdab6ef2dce267caa0a0228892e768e390
+Author: Kaleb Keithley <kaleb@freedesktop.org>
+Date: Tue Nov 25 19:28:01 2003 +0000
+
+ XFree86 4.3.99.16 Bring the tree up to date for the Cygwin folks
+
+commit 5ec315b967cb1ae519f514896f0b48fb5407f863
+Author: Kaleb Keithley <kaleb@freedesktop.org>
+Date: Fri Nov 14 16:48:42 2003 +0000
+
+ XFree86 4.3.0.1
+
+commit f2001f5bd5316842106a98b23f09400688575fa3
+Author: Kaleb Keithley <kaleb@freedesktop.org>
+Date: Fri Nov 14 16:48:42 2003 +0000
+
+ Initial revision
+
+commit ee0a1a43dc707f960e637fdf2118723e4de0a55d
+Author: Kaleb Keithley <kaleb@freedesktop.org>
+Date: Fri Nov 14 15:54:35 2003 +0000
+
+ R6.6 is the Xorg base-line
diff --git a/DECkeysym.h b/DECkeysym.h
new file mode 100644
index 0000000..0730716
--- /dev/null
+++ b/DECkeysym.h
@@ -0,0 +1,65 @@
+/***********************************************************
+
+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.
+
+
+Copyright 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.
+
+******************************************************************/
+
+/*
+ * DEC private keysyms
+ * (29th bit set)
+ */
+
+/* two-key compose sequence initiators, chosen to map to Latin1 characters */
+
+#define DXK_ring_accent 0x1000FEB0
+#define DXK_circumflex_accent 0x1000FE5E
+#define DXK_cedilla_accent 0x1000FE2C
+#define DXK_acute_accent 0x1000FE27
+#define DXK_grave_accent 0x1000FE60
+#define DXK_tilde 0x1000FE7E
+#define DXK_diaeresis 0x1000FE22
+
+/* special keysym for LK2** "Remove" key on editing keypad */
+
+#define DXK_Remove 0x1000FF00 /* Remove */
diff --git a/HPkeysym.h b/HPkeysym.h
new file mode 100644
index 0000000..ed000b1
--- /dev/null
+++ b/HPkeysym.h
@@ -0,0 +1,164 @@
+/*
+
+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 names of Hewlett Packard
+or 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.
+
+HEWLETT-PACKARD MAKES NO WARRANTY OF ANY KIND WITH REGARD
+TO THIS SOFWARE, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. Hewlett-Packard shall not be liable for errors
+contained herein or direct, indirect, special, incidental or
+consequential damages in connection with the furnishing,
+performance, or use of this material.
+
+*/
+
+#ifndef _HPKEYSYM_H
+
+#define _HPKEYSYM
+
+#define hpXK_ClearLine 0x1000FF6F
+#define hpXK_InsertLine 0x1000FF70
+#define hpXK_DeleteLine 0x1000FF71
+#define hpXK_InsertChar 0x1000FF72
+#define hpXK_DeleteChar 0x1000FF73
+#define hpXK_BackTab 0x1000FF74
+#define hpXK_KP_BackTab 0x1000FF75
+#define hpXK_Modelock1 0x1000FF48
+#define hpXK_Modelock2 0x1000FF49
+#define hpXK_Reset 0x1000FF6C
+#define hpXK_System 0x1000FF6D
+#define hpXK_User 0x1000FF6E
+#define hpXK_mute_acute 0x100000A8
+#define hpXK_mute_grave 0x100000A9
+#define hpXK_mute_asciicircum 0x100000AA
+#define hpXK_mute_diaeresis 0x100000AB
+#define hpXK_mute_asciitilde 0x100000AC
+#define hpXK_lira 0x100000AF
+#define hpXK_guilder 0x100000BE
+#define hpXK_Ydiaeresis 0x100000EE
+#define hpXK_IO 0x100000EE
+#define hpXK_longminus 0x100000F6
+#define hpXK_block 0x100000FC
+
+
+#ifndef _OSF_Keysyms
+#define _OSF_Keysyms
+
+#define osfXK_Copy 0x1004FF02
+#define osfXK_Cut 0x1004FF03
+#define osfXK_Paste 0x1004FF04
+#define osfXK_BackTab 0x1004FF07
+#define osfXK_BackSpace 0x1004FF08
+#define osfXK_Clear 0x1004FF0B
+#define osfXK_Escape 0x1004FF1B
+#define osfXK_AddMode 0x1004FF31
+#define osfXK_PrimaryPaste 0x1004FF32
+#define osfXK_QuickPaste 0x1004FF33
+#define osfXK_PageLeft 0x1004FF40
+#define osfXK_PageUp 0x1004FF41
+#define osfXK_PageDown 0x1004FF42
+#define osfXK_PageRight 0x1004FF43
+#define osfXK_Activate 0x1004FF44
+#define osfXK_MenuBar 0x1004FF45
+#define osfXK_Left 0x1004FF51
+#define osfXK_Up 0x1004FF52
+#define osfXK_Right 0x1004FF53
+#define osfXK_Down 0x1004FF54
+#define osfXK_EndLine 0x1004FF57
+#define osfXK_BeginLine 0x1004FF58
+#define osfXK_EndData 0x1004FF59
+#define osfXK_BeginData 0x1004FF5A
+#define osfXK_PrevMenu 0x1004FF5B
+#define osfXK_NextMenu 0x1004FF5C
+#define osfXK_PrevField 0x1004FF5D
+#define osfXK_NextField 0x1004FF5E
+#define osfXK_Select 0x1004FF60
+#define osfXK_Insert 0x1004FF63
+#define osfXK_Undo 0x1004FF65
+#define osfXK_Menu 0x1004FF67
+#define osfXK_Cancel 0x1004FF69
+#define osfXK_Help 0x1004FF6A
+#define osfXK_SelectAll 0x1004FF71
+#define osfXK_DeselectAll 0x1004FF72
+#define osfXK_Reselect 0x1004FF73
+#define osfXK_Extend 0x1004FF74
+#define osfXK_Restore 0x1004FF78
+#define osfXK_Delete 0x1004FFFF
+
+#endif /* _OSF_Keysyms */
+
+
+/**************************************************************
+ * The use of the following macros is deprecated.
+ * They are listed below only for backwards compatibility.
+ */
+#define XK_Reset 0x1000FF6C
+#define XK_System 0x1000FF6D
+#define XK_User 0x1000FF6E
+#define XK_ClearLine 0x1000FF6F
+#define XK_InsertLine 0x1000FF70
+#define XK_DeleteLine 0x1000FF71
+#define XK_InsertChar 0x1000FF72
+#define XK_DeleteChar 0x1000FF73
+#define XK_BackTab 0x1000FF74
+#define XK_KP_BackTab 0x1000FF75
+#define XK_Ext16bit_L 0x1000FF76
+#define XK_Ext16bit_R 0x1000FF77
+#define XK_mute_acute 0x100000a8
+#define XK_mute_grave 0x100000a9
+#define XK_mute_asciicircum 0x100000aa
+#define XK_mute_diaeresis 0x100000ab
+#define XK_mute_asciitilde 0x100000ac
+#define XK_lira 0x100000af
+#define XK_guilder 0x100000be
+#ifndef XK_Ydiaeresis
+#define XK_Ydiaeresis 0x100000ee
+#endif
+#define XK_IO 0x100000ee
+#define XK_longminus 0x100000f6
+#define XK_block 0x100000fc
+
+#endif /* _HPKEYSYM_H */
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..8b82ade
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,291 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
+2006, 2007, 2008 Free Software Foundation, Inc.
+
+ This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+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.
+
+ 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.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation.
+
+ 5. 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.
+
+ 6. Often, you can also type `make uninstall' to remove the installed
+ files again.
+
+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 `..'.
+
+ 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'.
+
+ 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.
+
+ 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'.
+
+Optional Features
+=================
+
+ 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.
+
+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"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+ On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' 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"
+
+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.
+
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..e9b30cf
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,49 @@
+SUBDIRS=specs
+
+xprotodir = $(includedir)/X11
+xproto_HEADERS = \
+ ap_keysym.h \
+ DECkeysym.h \
+ HPkeysym.h \
+ keysymdef.h \
+ keysym.h \
+ Sunkeysym.h \
+ Xalloca.h \
+ Xarch.h \
+ Xatom.h \
+ Xdefs.h \
+ XF86keysym.h \
+ Xfuncs.h \
+ X.h \
+ Xmd.h \
+ Xosdefs.h \
+ Xos.h \
+ Xos_r.h \
+ Xproto.h \
+ Xprotostr.h \
+ Xthreads.h \
+ Xw32defs.h \
+ XWDFile.h \
+ Xwindows.h \
+ Xwinsock.h
+
+nodist_xproto_HEADERS = \
+ Xfuncproto.h \
+ Xpoll.h
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = xproto.pc
+
+
+MAINTAINERCLEANFILES = ChangeLog INSTALL
+
+.PHONY: ChangeLog INSTALL
+
+INSTALL:
+ $(INSTALL_CMD)
+
+ChangeLog:
+ $(CHANGELOG_CMD)
+
+dist-hook: ChangeLog INSTALL
+
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..1c6ffb8
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,881 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@
+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 = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/Xfuncproto.h.in \
+ $(srcdir)/Xpoll.h.in $(srcdir)/do-not-use-config.h.in \
+ $(srcdir)/xproto.pc.in $(top_srcdir)/configure \
+ $(xproto_HEADERS) AUTHORS COPYING ChangeLog INSTALL \
+ config.guess config.sub install-sh missing
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = do-not-use-config.h Xfuncproto.h
+CONFIG_CLEAN_FILES = Xpoll.h xproto.pc
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-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 uninstall-recursive
+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__installdirs = "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(xprotodir)" \
+ "$(DESTDIR)$(xprotodir)"
+DATA = $(pkgconfig_DATA)
+HEADERS = $(nodist_xproto_HEADERS) $(xproto_HEADERS)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir dist dist-all distcheck
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ { test ! -d "$(distdir)" \
+ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -fr "$(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
+distuninstallcheck_listfiles = find . -type f -print
+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@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BASE_CFLAGS = @BASE_CFLAGS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHANGELOG_CMD = @CHANGELOG_CMD@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CWARNFLAGS = @CWARNFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
+DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FILE_MAN_DIR = @FILE_MAN_DIR@
+FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
+FOP = @FOP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_CMD = @INSTALL_CMD@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIB_MAN_DIR = @LIB_MAN_DIR@
+LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MAN_SUBSTS = @MAN_SUBSTS@
+MISC_MAN_DIR = @MISC_MAN_DIR@
+MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRICT_CFLAGS = @STRICT_CFLAGS@
+STRIP = @STRIP@
+STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@
+USE_FDS_BITS = @USE_FDS_BITS@
+VERSION = @VERSION@
+XMLTO = @XMLTO@
+XORG_MAN_PAGE = @XORG_MAN_PAGE@
+XORG_SGML_PATH = @XORG_SGML_PATH@
+XSLTPROC = @XSLTPROC@
+XSL_STYLESHEET = @XSL_STYLESHEET@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+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@
+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 = specs
+xprotodir = $(includedir)/X11
+xproto_HEADERS = \
+ ap_keysym.h \
+ DECkeysym.h \
+ HPkeysym.h \
+ keysymdef.h \
+ keysym.h \
+ Sunkeysym.h \
+ Xalloca.h \
+ Xarch.h \
+ Xatom.h \
+ Xdefs.h \
+ XF86keysym.h \
+ Xfuncs.h \
+ X.h \
+ Xmd.h \
+ Xosdefs.h \
+ Xos.h \
+ Xos_r.h \
+ Xproto.h \
+ Xprotostr.h \
+ Xthreads.h \
+ Xw32defs.h \
+ XWDFile.h \
+ Xwindows.h \
+ Xwinsock.h
+
+nodist_xproto_HEADERS = \
+ Xfuncproto.h \
+ Xpoll.h
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = xproto.pc
+MAINTAINERCLEANFILES = ChangeLog INSTALL
+all: do-not-use-config.h Xfuncproto.h
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh:
+ @:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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
+.PRECIOUS: 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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+do-not-use-config.h: stamp-h1
+ @if test ! -f $@; then \
+ rm -f stamp-h1; \
+ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
+ else :; fi
+
+stamp-h1: $(srcdir)/do-not-use-config.h.in $(top_builddir)/config.status
+ @rm -f stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status do-not-use-config.h
+$(srcdir)/do-not-use-config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+ rm -f stamp-h1
+ touch $@
+
+Xfuncproto.h: stamp-h2
+ @if test ! -f $@; then \
+ rm -f stamp-h2; \
+ $(MAKE) $(AM_MAKEFLAGS) stamp-h2; \
+ else :; fi
+
+stamp-h2: $(srcdir)/Xfuncproto.h.in $(top_builddir)/config.status
+ @rm -f stamp-h2
+ cd $(top_builddir) && $(SHELL) ./config.status Xfuncproto.h
+
+distclean-hdr:
+ -rm -f do-not-use-config.h stamp-h1 Xfuncproto.h stamp-h2
+Xpoll.h: $(top_builddir)/config.status $(srcdir)/Xpoll.h.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+xproto.pc: $(top_builddir)/config.status $(srcdir)/xproto.pc.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+install-pkgconfigDATA: $(pkgconfig_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
+ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+ 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|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
+install-nodist_xprotoHEADERS: $(nodist_xproto_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(xprotodir)" || $(MKDIR_P) "$(DESTDIR)$(xprotodir)"
+ @list='$(nodist_xproto_HEADERS)'; test -n "$(xprotodir)" || list=; \
+ 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)$(xprotodir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(xprotodir)" || exit $$?; \
+ done
+
+uninstall-nodist_xprotoHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(nodist_xproto_HEADERS)'; test -n "$(xprotodir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(xprotodir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(xprotodir)" && rm -f $$files
+install-xprotoHEADERS: $(xproto_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(xprotodir)" || $(MKDIR_P) "$(DESTDIR)$(xprotodir)"
+ @list='$(xproto_HEADERS)'; test -n "$(xprotodir)" || list=; \
+ 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)$(xprotodir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(xprotodir)" || exit $$?; \
+ done
+
+uninstall-xprotoHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(xproto_HEADERS)'; test -n "$(xprotodir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(xprotodir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(xprotodir)" && rm -f $$files
+
+# 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.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; 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"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) do-not-use-config.h.in Xfuncproto.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ 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; \
+ list='$(SOURCES) $(HEADERS) do-not-use-config.h.in Xfuncproto.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ 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
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) do-not-use-config.h.in Xfuncproto.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) do-not-use-config.h.in Xfuncproto.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ 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"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+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 \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ 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__remove_distdir)
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+ $(am__remove_distdir)
+
+dist-lzma: distdir
+ tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+ $(am__remove_distdir)
+
+dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+ $(am__remove_distdir)
+
+dist-tarZ: distdir
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__remove_distdir)
+
+dist-shar: distdir
+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ $(am__remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__remove_distdir)
+
+dist dist-all: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+ $(am__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.lzma*) \
+ lzma -dc $(distdir).tar.lzma | $(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 a+w $(distdir)
+ mkdir $(distdir)/_build
+ mkdir $(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 \
+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ && $(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__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:
+ @$(am__cd) '$(distuninstallcheck_dir)' \
+ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+ || { 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) $(HEADERS) do-not-use-config.h Xfuncproto.h
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(xprotodir)" "$(DESTDIR)$(xprotodir)"; 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:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+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 mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -f Makefile
+distclean-am: clean-am 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-nodist_xprotoHEADERS install-pkgconfigDATA \
+ install-xprotoHEADERS
+
+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
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-nodist_xprotoHEADERS uninstall-pkgconfigDATA \
+ uninstall-xprotoHEADERS
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
+ ctags-recursive install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am am--refresh check check-am clean clean-generic \
+ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
+ dist-hook dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
+ distcheck distclean distclean-generic distclean-hdr \
+ 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-nodist_xprotoHEADERS install-pdf install-pdf-am \
+ install-pkgconfigDATA install-ps install-ps-am install-strip \
+ install-xprotoHEADERS installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
+ tags-recursive uninstall uninstall-am \
+ uninstall-nodist_xprotoHEADERS uninstall-pkgconfigDATA \
+ uninstall-xprotoHEADERS
+
+
+.PHONY: ChangeLog INSTALL
+
+INSTALL:
+ $(INSTALL_CMD)
+
+ChangeLog:
+ $(CHANGELOG_CMD)
+
+dist-hook: ChangeLog INSTALL
+
+# 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:
diff --git a/README b/README
new file mode 100644
index 0000000..436f07b
--- /dev/null
+++ b/README
@@ -0,0 +1,32 @@
+ X Window System Core Protocol
+
+This package provides the headers and specification documents defining
+the X Window System Core Protocol, Version 11.
+
+It also includes a number of headers that aren't purely protocol related,
+but are depended upon by many other X Window System packages to provide
+common definitions and porting layer.
+
+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/proto/x11proto
+
+ http://cgit.freedesktop.org/xorg/proto/x11proto
+
+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
+
diff --git a/Sunkeysym.h b/Sunkeysym.h
new file mode 100644
index 0000000..78d1286
--- /dev/null
+++ b/Sunkeysym.h
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 1991, 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 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.
+
+***********************************************************/
+
+/*
+ * Floating Accent
+ */
+
+#define SunXK_FA_Grave 0x1005FF00
+#define SunXK_FA_Circum 0x1005FF01
+#define SunXK_FA_Tilde 0x1005FF02
+#define SunXK_FA_Acute 0x1005FF03
+#define SunXK_FA_Diaeresis 0x1005FF04
+#define SunXK_FA_Cedilla 0x1005FF05
+
+/*
+ * Miscellaneous Functions
+ */
+
+#define SunXK_F36 0x1005FF10 /* Labeled F11 */
+#define SunXK_F37 0x1005FF11 /* Labeled F12 */
+
+#define SunXK_Sys_Req 0x1005FF60
+#define SunXK_Print_Screen 0x0000FF61 /* Same as XK_Print */
+
+/*
+ * International & Multi-Key Character Composition
+ */
+
+#define SunXK_Compose 0x0000FF20 /* Same as XK_Multi_key */
+#define SunXK_AltGraph 0x0000FF7E /* Same as XK_Mode_switch */
+
+/*
+ * Cursor Control
+ */
+
+#define SunXK_PageUp 0x0000FF55 /* Same as XK_Prior */
+#define SunXK_PageDown 0x0000FF56 /* Same as XK_Next */
+
+/*
+ * Open Look Functions
+ */
+
+#define SunXK_Undo 0x0000FF65 /* Same as XK_Undo */
+#define SunXK_Again 0x0000FF66 /* Same as XK_Redo */
+#define SunXK_Find 0x0000FF68 /* Same as XK_Find */
+#define SunXK_Stop 0x0000FF69 /* Same as XK_Cancel */
+#define SunXK_Props 0x1005FF70
+#define SunXK_Front 0x1005FF71
+#define SunXK_Copy 0x1005FF72
+#define SunXK_Open 0x1005FF73
+#define SunXK_Paste 0x1005FF74
+#define SunXK_Cut 0x1005FF75
+
+#define SunXK_PowerSwitch 0x1005FF76
+#define SunXK_AudioLowerVolume 0x1005FF77
+#define SunXK_AudioMute 0x1005FF78
+#define SunXK_AudioRaiseVolume 0x1005FF79
+#define SunXK_VideoDegauss 0x1005FF7A
+#define SunXK_VideoLowerBrightness 0x1005FF7B
+#define SunXK_VideoRaiseBrightness 0x1005FF7C
+#define SunXK_PowerSwitchShift 0x1005FF7D
diff --git a/X.h b/X.h
new file mode 100644
index 0000000..5cf695d
--- /dev/null
+++ b/X.h
@@ -0,0 +1,717 @@
+/* Definitions for the X window system likely to be used by applications */
+
+#ifndef X_H
+#define X_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 of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall not be
+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 X_PROTOCOL 11 /* current protocol version */
+#define X_PROTOCOL_REVISION 0 /* current minor version */
+
+/* Resources */
+
+/*
+ * _XSERVER64 must ONLY be defined when compiling X server sources on
+ * systems where unsigned long is not 32 bits, must NOT be used in
+ * client or library code.
+ */
+#ifndef _XSERVER64
+# ifndef _XTYPEDEF_XID
+# define _XTYPEDEF_XID
+typedef unsigned long XID;
+# endif
+# ifndef _XTYPEDEF_MASK
+# define _XTYPEDEF_MASK
+typedef unsigned long Mask;
+# endif
+# ifndef _XTYPEDEF_ATOM
+# define _XTYPEDEF_ATOM
+typedef unsigned long Atom; /* Also in Xdefs.h */
+# endif
+typedef unsigned long VisualID;
+typedef unsigned long Time;
+#else
+# include <X11/Xmd.h>
+# ifndef _XTYPEDEF_XID
+# define _XTYPEDEF_XID
+typedef CARD32 XID;
+# endif
+# ifndef _XTYPEDEF_MASK
+# define _XTYPEDEF_MASK
+typedef CARD32 Mask;
+# endif
+# ifndef _XTYPEDEF_ATOM
+# define _XTYPEDEF_ATOM
+typedef CARD32 Atom;
+# endif
+typedef CARD32 VisualID;
+typedef CARD32 Time;
+#endif
+
+typedef XID Window;
+typedef XID Drawable;
+#ifndef _XTYPEDEF_FONT
+# define _XTYPEDEF_FONT
+typedef XID Font;
+#endif
+typedef XID Pixmap;
+typedef XID Cursor;
+typedef XID Colormap;
+typedef XID GContext;
+typedef XID KeySym;
+
+typedef unsigned char KeyCode;
+
+/*****************************************************************
+ * RESERVED RESOURCE AND CONSTANT DEFINITIONS
+ *****************************************************************/
+
+#ifndef None
+#define None 0L /* universal null resource or null atom */
+#endif
+
+#define ParentRelative 1L /* background pixmap in CreateWindow
+ and ChangeWindowAttributes */
+
+#define CopyFromParent 0L /* border pixmap in CreateWindow
+ and ChangeWindowAttributes
+ special VisualID and special window
+ class passed to CreateWindow */
+
+#define PointerWindow 0L /* destination window in SendEvent */
+#define InputFocus 1L /* destination window in SendEvent */
+
+#define PointerRoot 1L /* focus window in SetInputFocus */
+
+#define AnyPropertyType 0L /* special Atom, passed to GetProperty */
+
+#define AnyKey 0L /* special Key Code, passed to GrabKey */
+
+#define AnyButton 0L /* special Button Code, passed to GrabButton */
+
+#define AllTemporary 0L /* special Resource ID passed to KillClient */
+
+#define CurrentTime 0L /* special Time */
+
+#define NoSymbol 0L /* special KeySym */
+
+/*****************************************************************
+ * EVENT DEFINITIONS
+ *****************************************************************/
+
+/* Input Event Masks. Used as event-mask window attribute and as arguments
+ to Grab requests. Not to be confused with event names. */
+
+#define NoEventMask 0L
+#define KeyPressMask (1L<<0)
+#define KeyReleaseMask (1L<<1)
+#define ButtonPressMask (1L<<2)
+#define ButtonReleaseMask (1L<<3)
+#define EnterWindowMask (1L<<4)
+#define LeaveWindowMask (1L<<5)
+#define PointerMotionMask (1L<<6)
+#define PointerMotionHintMask (1L<<7)
+#define Button1MotionMask (1L<<8)
+#define Button2MotionMask (1L<<9)
+#define Button3MotionMask (1L<<10)
+#define Button4MotionMask (1L<<11)
+#define Button5MotionMask (1L<<12)
+#define ButtonMotionMask (1L<<13)
+#define KeymapStateMask (1L<<14)
+#define ExposureMask (1L<<15)
+#define VisibilityChangeMask (1L<<16)
+#define StructureNotifyMask (1L<<17)
+#define ResizeRedirectMask (1L<<18)
+#define SubstructureNotifyMask (1L<<19)
+#define SubstructureRedirectMask (1L<<20)
+#define FocusChangeMask (1L<<21)
+#define PropertyChangeMask (1L<<22)
+#define ColormapChangeMask (1L<<23)
+#define OwnerGrabButtonMask (1L<<24)
+
+/* Event names. Used in "type" field in XEvent structures. Not to be
+confused with event masks above. They start from 2 because 0 and 1
+are reserved in the protocol for errors and replies. */
+
+#define KeyPress 2
+#define KeyRelease 3
+#define ButtonPress 4
+#define ButtonRelease 5
+#define MotionNotify 6
+#define EnterNotify 7
+#define LeaveNotify 8
+#define FocusIn 9
+#define FocusOut 10
+#define KeymapNotify 11
+#define Expose 12
+#define GraphicsExpose 13
+#define NoExpose 14
+#define VisibilityNotify 15
+#define CreateNotify 16
+#define DestroyNotify 17
+#define UnmapNotify 18
+#define MapNotify 19
+#define MapRequest 20
+#define ReparentNotify 21
+#define ConfigureNotify 22
+#define ConfigureRequest 23
+#define GravityNotify 24
+#define ResizeRequest 25
+#define CirculateNotify 26
+#define CirculateRequest 27
+#define PropertyNotify 28
+#define SelectionClear 29
+#define SelectionRequest 30
+#define SelectionNotify 31
+#define ColormapNotify 32
+#define ClientMessage 33
+#define MappingNotify 34
+#define GenericEvent 35
+#define LASTEvent 36 /* must be bigger than any event # */
+
+
+/* Key masks. Used as modifiers to GrabButton and GrabKey, results of QueryPointer,
+ state in various key-, mouse-, and button-related events. */
+
+#define ShiftMask (1<<0)
+#define LockMask (1<<1)
+#define ControlMask (1<<2)
+#define Mod1Mask (1<<3)
+#define Mod2Mask (1<<4)
+#define Mod3Mask (1<<5)
+#define Mod4Mask (1<<6)
+#define Mod5Mask (1<<7)
+
+/* modifier names. Used to build a SetModifierMapping request or
+ to read a GetModifierMapping request. These correspond to the
+ masks defined above. */
+#define ShiftMapIndex 0
+#define LockMapIndex 1
+#define ControlMapIndex 2
+#define Mod1MapIndex 3
+#define Mod2MapIndex 4
+#define Mod3MapIndex 5
+#define Mod4MapIndex 6
+#define Mod5MapIndex 7
+
+
+/* button masks. Used in same manner as Key masks above. Not to be confused
+ with button names below. */
+
+#define Button1Mask (1<<8)
+#define Button2Mask (1<<9)
+#define Button3Mask (1<<10)
+#define Button4Mask (1<<11)
+#define Button5Mask (1<<12)
+
+#define AnyModifier (1<<15) /* used in GrabButton, GrabKey */
+
+
+/* button names. Used as arguments to GrabButton and as detail in ButtonPress
+ and ButtonRelease events. Not to be confused with button masks above.
+ Note that 0 is already defined above as "AnyButton". */
+
+#define Button1 1
+#define Button2 2
+#define Button3 3
+#define Button4 4
+#define Button5 5
+
+/* Notify modes */
+
+#define NotifyNormal 0
+#define NotifyGrab 1
+#define NotifyUngrab 2
+#define NotifyWhileGrabbed 3
+
+#define NotifyHint 1 /* for MotionNotify events */
+
+/* Notify detail */
+
+#define NotifyAncestor 0
+#define NotifyVirtual 1
+#define NotifyInferior 2
+#define NotifyNonlinear 3
+#define NotifyNonlinearVirtual 4
+#define NotifyPointer 5
+#define NotifyPointerRoot 6
+#define NotifyDetailNone 7
+
+/* Visibility notify */
+
+#define VisibilityUnobscured 0
+#define VisibilityPartiallyObscured 1
+#define VisibilityFullyObscured 2
+
+/* Circulation request */
+
+#define PlaceOnTop 0
+#define PlaceOnBottom 1
+
+/* protocol families */
+
+#define FamilyInternet 0 /* IPv4 */
+#define FamilyDECnet 1
+#define FamilyChaos 2
+#define FamilyInternet6 6 /* IPv6 */
+
+/* authentication families not tied to a specific protocol */
+#define FamilyServerInterpreted 5
+
+/* Property notification */
+
+#define PropertyNewValue 0
+#define PropertyDelete 1
+
+/* Color Map notification */
+
+#define ColormapUninstalled 0
+#define ColormapInstalled 1
+
+/* GrabPointer, GrabButton, GrabKeyboard, GrabKey Modes */
+
+#define GrabModeSync 0
+#define GrabModeAsync 1
+
+/* GrabPointer, GrabKeyboard reply status */
+
+#define GrabSuccess 0
+#define AlreadyGrabbed 1
+#define GrabInvalidTime 2
+#define GrabNotViewable 3
+#define GrabFrozen 4
+
+/* AllowEvents modes */
+
+#define AsyncPointer 0
+#define SyncPointer 1
+#define ReplayPointer 2
+#define AsyncKeyboard 3
+#define SyncKeyboard 4
+#define ReplayKeyboard 5
+#define AsyncBoth 6
+#define SyncBoth 7
+
+/* Used in SetInputFocus, GetInputFocus */
+
+#define RevertToNone (int)None
+#define RevertToPointerRoot (int)PointerRoot
+#define RevertToParent 2
+
+/*****************************************************************
+ * ERROR CODES
+ *****************************************************************/
+
+#define Success 0 /* everything's okay */
+#define BadRequest 1 /* bad request code */
+#define BadValue 2 /* int parameter out of range */
+#define BadWindow 3 /* parameter not a Window */
+#define BadPixmap 4 /* parameter not a Pixmap */
+#define BadAtom 5 /* parameter not an Atom */
+#define BadCursor 6 /* parameter not a Cursor */
+#define BadFont 7 /* parameter not a Font */
+#define BadMatch 8 /* parameter mismatch */
+#define BadDrawable 9 /* parameter not a Pixmap or Window */
+#define BadAccess 10 /* depending on context:
+ - key/button already grabbed
+ - attempt to free an illegal
+ cmap entry
+ - attempt to store into a read-only
+ color map entry.
+ - attempt to modify the access control
+ list from other than the local host.
+ */
+#define BadAlloc 11 /* insufficient resources */
+#define BadColor 12 /* no such colormap */
+#define BadGC 13 /* parameter not a GC */
+#define BadIDChoice 14 /* choice not in range or already used */
+#define BadName 15 /* font or color name doesn't exist */
+#define BadLength 16 /* Request length incorrect */
+#define BadImplementation 17 /* server is defective */
+
+#define FirstExtensionError 128
+#define LastExtensionError 255
+
+/*****************************************************************
+ * WINDOW DEFINITIONS
+ *****************************************************************/
+
+/* Window classes used by CreateWindow */
+/* Note that CopyFromParent is already defined as 0 above */
+
+#define InputOutput 1
+#define InputOnly 2
+
+/* Window attributes for CreateWindow and ChangeWindowAttributes */
+
+#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)
+
+/* ConfigureWindow structure */
+
+#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)
+
+
+/* Bit Gravity */
+
+#define ForgetGravity 0
+#define NorthWestGravity 1
+#define NorthGravity 2
+#define NorthEastGravity 3
+#define WestGravity 4
+#define CenterGravity 5
+#define EastGravity 6
+#define SouthWestGravity 7
+#define SouthGravity 8
+#define SouthEastGravity 9
+#define StaticGravity 10
+
+/* Window gravity + bit gravity above */
+
+#define UnmapGravity 0
+
+/* Used in CreateWindow for backing-store hint */
+
+#define NotUseful 0
+#define WhenMapped 1
+#define Always 2
+
+/* Used in GetWindowAttributes reply */
+
+#define IsUnmapped 0
+#define IsUnviewable 1
+#define IsViewable 2
+
+/* Used in ChangeSaveSet */
+
+#define SetModeInsert 0
+#define SetModeDelete 1
+
+/* Used in ChangeCloseDownMode */
+
+#define DestroyAll 0
+#define RetainPermanent 1
+#define RetainTemporary 2
+
+/* Window stacking method (in configureWindow) */
+
+#define Above 0
+#define Below 1
+#define TopIf 2
+#define BottomIf 3
+#define Opposite 4
+
+/* Circulation direction */
+
+#define RaiseLowest 0
+#define LowerHighest 1
+
+/* Property modes */
+
+#define PropModeReplace 0
+#define PropModePrepend 1
+#define PropModeAppend 2
+
+/*****************************************************************
+ * GRAPHICS DEFINITIONS
+ *****************************************************************/
+
+/* graphics functions, as in GC.alu */
+
+#define GXclear 0x0 /* 0 */
+#define GXand 0x1 /* src AND dst */
+#define GXandReverse 0x2 /* src AND NOT dst */
+#define GXcopy 0x3 /* src */
+#define GXandInverted 0x4 /* NOT src AND dst */
+#define GXnoop 0x5 /* dst */
+#define GXxor 0x6 /* src XOR dst */
+#define GXor 0x7 /* src OR dst */
+#define GXnor 0x8 /* NOT src AND NOT dst */
+#define GXequiv 0x9 /* NOT src XOR dst */
+#define GXinvert 0xa /* NOT dst */
+#define GXorReverse 0xb /* src OR NOT dst */
+#define GXcopyInverted 0xc /* NOT src */
+#define GXorInverted 0xd /* NOT src OR dst */
+#define GXnand 0xe /* NOT src OR NOT dst */
+#define GXset 0xf /* 1 */
+
+/* LineStyle */
+
+#define LineSolid 0
+#define LineOnOffDash 1
+#define LineDoubleDash 2
+
+/* capStyle */
+
+#define CapNotLast 0
+#define CapButt 1
+#define CapRound 2
+#define CapProjecting 3
+
+/* joinStyle */
+
+#define JoinMiter 0
+#define JoinRound 1
+#define JoinBevel 2
+
+/* fillStyle */
+
+#define FillSolid 0
+#define FillTiled 1
+#define FillStippled 2
+#define FillOpaqueStippled 3
+
+/* fillRule */
+
+#define EvenOddRule 0
+#define WindingRule 1
+
+/* subwindow mode */
+
+#define ClipByChildren 0
+#define IncludeInferiors 1
+
+/* SetClipRectangles ordering */
+
+#define Unsorted 0
+#define YSorted 1
+#define YXSorted 2
+#define YXBanded 3
+
+/* CoordinateMode for drawing routines */
+
+#define CoordModeOrigin 0 /* relative to the origin */
+#define CoordModePrevious 1 /* relative to previous point */
+
+/* Polygon shapes */
+
+#define Complex 0 /* paths may intersect */
+#define Nonconvex 1 /* no paths intersect, but not convex */
+#define Convex 2 /* wholly convex */
+
+/* Arc modes for PolyFillArc */
+
+#define ArcChord 0 /* join endpoints of arc */
+#define ArcPieSlice 1 /* join endpoints to center of arc */
+
+/* GC components: masks used in CreateGC, CopyGC, ChangeGC, OR'ed into
+ GC.stateChanges */
+
+#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)
+
+#define GCLastBit 22
+/*****************************************************************
+ * FONTS
+ *****************************************************************/
+
+/* used in QueryFont -- draw direction */
+
+#define FontLeftToRight 0
+#define FontRightToLeft 1
+
+#define FontChange 255
+
+/*****************************************************************
+ * IMAGING
+ *****************************************************************/
+
+/* ImageFormat -- PutImage, GetImage */
+
+#define XYBitmap 0 /* depth 1, XYFormat */
+#define XYPixmap 1 /* depth == drawable depth */
+#define ZPixmap 2 /* depth == drawable depth */
+
+/*****************************************************************
+ * COLOR MAP STUFF
+ *****************************************************************/
+
+/* For CreateColormap */
+
+#define AllocNone 0 /* create map with no entries */
+#define AllocAll 1 /* allocate entire map writeable */
+
+
+/* Flags used in StoreNamedColor, StoreColors */
+
+#define DoRed (1<<0)
+#define DoGreen (1<<1)
+#define DoBlue (1<<2)
+
+/*****************************************************************
+ * CURSOR STUFF
+ *****************************************************************/
+
+/* QueryBestSize Class */
+
+#define CursorShape 0 /* largest size that can be displayed */
+#define TileShape 1 /* size tiled fastest */
+#define StippleShape 2 /* size stippled fastest */
+
+/*****************************************************************
+ * KEYBOARD/POINTER STUFF
+ *****************************************************************/
+
+#define AutoRepeatModeOff 0
+#define AutoRepeatModeOn 1
+#define AutoRepeatModeDefault 2
+
+#define LedModeOff 0
+#define LedModeOn 1
+
+/* masks for ChangeKeyboardControl */
+
+#define KBKeyClickPercent (1L<<0)
+#define KBBellPercent (1L<<1)
+#define KBBellPitch (1L<<2)
+#define KBBellDuration (1L<<3)
+#define KBLed (1L<<4)
+#define KBLedMode (1L<<5)
+#define KBKey (1L<<6)
+#define KBAutoRepeatMode (1L<<7)
+
+#define MappingSuccess 0
+#define MappingBusy 1
+#define MappingFailed 2
+
+#define MappingModifier 0
+#define MappingKeyboard 1
+#define MappingPointer 2
+
+/*****************************************************************
+ * SCREEN SAVER STUFF
+ *****************************************************************/
+
+#define DontPreferBlanking 0
+#define PreferBlanking 1
+#define DefaultBlanking 2
+
+#define DisableScreenSaver 0
+#define DisableScreenInterval 0
+
+#define DontAllowExposures 0
+#define AllowExposures 1
+#define DefaultExposures 2
+
+/* for ForceScreenSaver */
+
+#define ScreenSaverReset 0
+#define ScreenSaverActive 1
+
+/*****************************************************************
+ * HOSTS AND CONNECTIONS
+ *****************************************************************/
+
+/* for ChangeHosts */
+
+#define HostInsert 0
+#define HostDelete 1
+
+/* for ChangeAccessControl */
+
+#define EnableAccess 1
+#define DisableAccess 0
+
+/* Display classes used in opening the connection
+ * Note that the statically allocated ones are even numbered and the
+ * dynamically changeable ones are odd numbered */
+
+#define StaticGray 0
+#define GrayScale 1
+#define StaticColor 2
+#define PseudoColor 3
+#define TrueColor 4
+#define DirectColor 5
+
+
+/* Byte order used in imageByteOrder and bitmapBitOrder */
+
+#define LSBFirst 0
+#define MSBFirst 1
+
+#endif /* X_H */
diff --git a/XF86keysym.h b/XF86keysym.h
new file mode 100644
index 0000000..df5e9cc
--- /dev/null
+++ b/XF86keysym.h
@@ -0,0 +1,233 @@
+/*
+ * XFree86 vendor specific keysyms.
+ *
+ * The XFree86 keysym range is 0x10080001 - 0x1008FFFF.
+ *
+ * When adding new entries, the xc/lib/XKeysymDB file should also be
+ * updated to make the new entries visible to Xlib.
+ */
+
+/*
+ * ModeLock
+ *
+ * This one is old, and not really used any more since XKB offers this
+ * functionality.
+ */
+
+#define XF86XK_ModeLock 0x1008FF01 /* Mode Switch Lock */
+
+/*
+ * Note, 0x1008FF07 - 0x1008FF0F are free and should be used for misc new
+ * keysyms that don't fit into any of the groups below.
+ *
+ * 0x1008FF64, 0x1008FF6F, 0x1008FF71, 0x1008FF83 are no longer used,
+ * and should be used first for new keysyms.
+ *
+ * Check in keysymdef.h for generic symbols before adding new XFree86-specific
+ * symbols here.
+ *
+ * X.Org will not be adding to the XF86 set of keysyms, though they have
+ * been adopted and are considered a "standard" part of X keysym definitions.
+ * XFree86 never properly commented these keysyms, so we have done our
+ * best to explain the semantic meaning of these keys.
+ *
+ * XFree86 has removed their mail archives of the period, that might have
+ * shed more light on some of these definitions. Until/unless we resurrect
+ * these archives, these are from memory and usage.
+ */
+
+
+/* Backlight controls. */
+#define XF86XK_MonBrightnessUp 0x1008FF02 /* Monitor/panel brightness */
+#define XF86XK_MonBrightnessDown 0x1008FF03 /* Monitor/panel brightness */
+#define XF86XK_KbdLightOnOff 0x1008FF04 /* Keyboards may be lit */
+#define XF86XK_KbdBrightnessUp 0x1008FF05 /* Keyboards may be lit */
+#define XF86XK_KbdBrightnessDown 0x1008FF06 /* Keyboards may be lit */
+
+/*
+ * Keys found on some "Internet" keyboards.
+ */
+#define XF86XK_Standby 0x1008FF10 /* System into standby mode */
+#define XF86XK_AudioLowerVolume 0x1008FF11 /* Volume control down */
+#define XF86XK_AudioMute 0x1008FF12 /* Mute sound from the system */
+#define XF86XK_AudioRaiseVolume 0x1008FF13 /* Volume control up */
+#define XF86XK_AudioPlay 0x1008FF14 /* Start playing of audio > */
+#define XF86XK_AudioStop 0x1008FF15 /* Stop playing audio */
+#define XF86XK_AudioPrev 0x1008FF16 /* Previous track */
+#define XF86XK_AudioNext 0x1008FF17 /* Next track */
+#define XF86XK_HomePage 0x1008FF18 /* Display user's home page */
+#define XF86XK_Mail 0x1008FF19 /* Invoke user's mail program */
+#define XF86XK_Start 0x1008FF1A /* Start application */
+#define XF86XK_Search 0x1008FF1B /* Search */
+#define XF86XK_AudioRecord 0x1008FF1C /* Record audio application */
+
+/* These are sometimes found on PDA's (e.g. Palm, PocketPC or elsewhere) */
+#define XF86XK_Calculator 0x1008FF1D /* Invoke calculator program */
+#define XF86XK_Memo 0x1008FF1E /* Invoke Memo taking program */
+#define XF86XK_ToDoList 0x1008FF1F /* Invoke To Do List program */
+#define XF86XK_Calendar 0x1008FF20 /* Invoke Calendar program */
+#define XF86XK_PowerDown 0x1008FF21 /* Deep sleep the system */
+#define XF86XK_ContrastAdjust 0x1008FF22 /* Adjust screen contrast */
+#define XF86XK_RockerUp 0x1008FF23 /* Rocker switches exist up */
+#define XF86XK_RockerDown 0x1008FF24 /* and down */
+#define XF86XK_RockerEnter 0x1008FF25 /* and let you press them */
+
+/* Some more "Internet" keyboard symbols */
+#define XF86XK_Back 0x1008FF26 /* Like back on a browser */
+#define XF86XK_Forward 0x1008FF27 /* Like forward on a browser */
+#define XF86XK_Stop 0x1008FF28 /* Stop current operation */
+#define XF86XK_Refresh 0x1008FF29 /* Refresh the page */
+#define XF86XK_PowerOff 0x1008FF2A /* Power off system entirely */
+#define XF86XK_WakeUp 0x1008FF2B /* Wake up system from sleep */
+#define XF86XK_Eject 0x1008FF2C /* Eject device (e.g. DVD) */
+#define XF86XK_ScreenSaver 0x1008FF2D /* Invoke screensaver */
+#define XF86XK_WWW 0x1008FF2E /* Invoke web browser */
+#define XF86XK_Sleep 0x1008FF2F /* Put system to sleep */
+#define XF86XK_Favorites 0x1008FF30 /* Show favorite locations */
+#define XF86XK_AudioPause 0x1008FF31 /* Pause audio playing */
+#define XF86XK_AudioMedia 0x1008FF32 /* Launch media collection app */
+#define XF86XK_MyComputer 0x1008FF33 /* Display "My Computer" window */
+#define XF86XK_VendorHome 0x1008FF34 /* Display vendor home web site */
+#define XF86XK_LightBulb 0x1008FF35 /* Light bulb keys exist */
+#define XF86XK_Shop 0x1008FF36 /* Display shopping web site */
+#define XF86XK_History 0x1008FF37 /* Show history of web surfing */
+#define XF86XK_OpenURL 0x1008FF38 /* Open selected URL */
+#define XF86XK_AddFavorite 0x1008FF39 /* Add URL to favorites list */
+#define XF86XK_HotLinks 0x1008FF3A /* Show "hot" links */
+#define XF86XK_BrightnessAdjust 0x1008FF3B /* Invoke brightness adj. UI */
+#define XF86XK_Finance 0x1008FF3C /* Display financial site */
+#define XF86XK_Community 0x1008FF3D /* Display user's community */
+#define XF86XK_AudioRewind 0x1008FF3E /* "rewind" audio track */
+#define XF86XK_BackForward 0x1008FF3F /* ??? */
+#define XF86XK_Launch0 0x1008FF40 /* Launch Application */
+#define XF86XK_Launch1 0x1008FF41 /* Launch Application */
+#define XF86XK_Launch2 0x1008FF42 /* Launch Application */
+#define XF86XK_Launch3 0x1008FF43 /* Launch Application */
+#define XF86XK_Launch4 0x1008FF44 /* Launch Application */
+#define XF86XK_Launch5 0x1008FF45 /* Launch Application */
+#define XF86XK_Launch6 0x1008FF46 /* Launch Application */
+#define XF86XK_Launch7 0x1008FF47 /* Launch Application */
+#define XF86XK_Launch8 0x1008FF48 /* Launch Application */
+#define XF86XK_Launch9 0x1008FF49 /* Launch Application */
+#define XF86XK_LaunchA 0x1008FF4A /* Launch Application */
+#define XF86XK_LaunchB 0x1008FF4B /* Launch Application */
+#define XF86XK_LaunchC 0x1008FF4C /* Launch Application */
+#define XF86XK_LaunchD 0x1008FF4D /* Launch Application */
+#define XF86XK_LaunchE 0x1008FF4E /* Launch Application */
+#define XF86XK_LaunchF 0x1008FF4F /* Launch Application */
+
+#define XF86XK_ApplicationLeft 0x1008FF50 /* switch to application, left */
+#define XF86XK_ApplicationRight 0x1008FF51 /* switch to application, right*/
+#define XF86XK_Book 0x1008FF52 /* Launch bookreader */
+#define XF86XK_CD 0x1008FF53 /* Launch CD/DVD player */
+#define XF86XK_Calculater 0x1008FF54 /* Launch Calculater */
+#define XF86XK_Clear 0x1008FF55 /* Clear window, screen */
+#define XF86XK_Close 0x1008FF56 /* Close window */
+#define XF86XK_Copy 0x1008FF57 /* Copy selection */
+#define XF86XK_Cut 0x1008FF58 /* Cut selection */
+#define XF86XK_Display 0x1008FF59 /* Output switch key */
+#define XF86XK_DOS 0x1008FF5A /* Launch DOS (emulation) */
+#define XF86XK_Documents 0x1008FF5B /* Open documents window */
+#define XF86XK_Excel 0x1008FF5C /* Launch spread sheet */
+#define XF86XK_Explorer 0x1008FF5D /* Launch file explorer */
+#define XF86XK_Game 0x1008FF5E /* Launch game */
+#define XF86XK_Go 0x1008FF5F /* Go to URL */
+#define XF86XK_iTouch 0x1008FF60 /* Logitch iTouch- don't use */
+#define XF86XK_LogOff 0x1008FF61 /* Log off system */
+#define XF86XK_Market 0x1008FF62 /* ?? */
+#define XF86XK_Meeting 0x1008FF63 /* enter meeting in calendar */
+#define XF86XK_MenuKB 0x1008FF65 /* distingush keyboard from PB */
+#define XF86XK_MenuPB 0x1008FF66 /* distinuish PB from keyboard */
+#define XF86XK_MySites 0x1008FF67 /* Favourites */
+#define XF86XK_New 0x1008FF68 /* New (folder, document... */
+#define XF86XK_News 0x1008FF69 /* News */
+#define XF86XK_OfficeHome 0x1008FF6A /* Office home (old Staroffice)*/
+#define XF86XK_Open 0x1008FF6B /* Open */
+#define XF86XK_Option 0x1008FF6C /* ?? */
+#define XF86XK_Paste 0x1008FF6D /* Paste */
+#define XF86XK_Phone 0x1008FF6E /* Launch phone; dial number */
+#define XF86XK_Q 0x1008FF70 /* Compaq's Q - don't use */
+#define XF86XK_Reply 0x1008FF72 /* Reply e.g., mail */
+#define XF86XK_Reload 0x1008FF73 /* Reload web page, file, etc. */
+#define XF86XK_RotateWindows 0x1008FF74 /* Rotate windows e.g. xrandr */
+#define XF86XK_RotationPB 0x1008FF75 /* don't use */
+#define XF86XK_RotationKB 0x1008FF76 /* don't use */
+#define XF86XK_Save 0x1008FF77 /* Save (file, document, state */
+#define XF86XK_ScrollUp 0x1008FF78 /* Scroll window/contents up */
+#define XF86XK_ScrollDown 0x1008FF79 /* Scrool window/contentd down */
+#define XF86XK_ScrollClick 0x1008FF7A /* Use XKB mousekeys instead */
+#define XF86XK_Send 0x1008FF7B /* Send mail, file, object */
+#define XF86XK_Spell 0x1008FF7C /* Spell checker */
+#define XF86XK_SplitScreen 0x1008FF7D /* Split window or screen */
+#define XF86XK_Support 0x1008FF7E /* Get support (??) */
+#define XF86XK_TaskPane 0x1008FF7F /* Show tasks */
+#define XF86XK_Terminal 0x1008FF80 /* Launch terminal emulator */
+#define XF86XK_Tools 0x1008FF81 /* toolbox of desktop/app. */
+#define XF86XK_Travel 0x1008FF82 /* ?? */
+#define XF86XK_UserPB 0x1008FF84 /* ?? */
+#define XF86XK_User1KB 0x1008FF85 /* ?? */
+#define XF86XK_User2KB 0x1008FF86 /* ?? */
+#define XF86XK_Video 0x1008FF87 /* Launch video player */
+#define XF86XK_WheelButton 0x1008FF88 /* button from a mouse wheel */
+#define XF86XK_Word 0x1008FF89 /* Launch word processor */
+#define XF86XK_Xfer 0x1008FF8A
+#define XF86XK_ZoomIn 0x1008FF8B /* zoom in view, map, etc. */
+#define XF86XK_ZoomOut 0x1008FF8C /* zoom out view, map, etc. */
+
+#define XF86XK_Away 0x1008FF8D /* mark yourself as away */
+#define XF86XK_Messenger 0x1008FF8E /* as in instant messaging */
+#define XF86XK_WebCam 0x1008FF8F /* Launch web camera app. */
+#define XF86XK_MailForward 0x1008FF90 /* Forward in mail */
+#define XF86XK_Pictures 0x1008FF91 /* Show pictures */
+#define XF86XK_Music 0x1008FF92 /* Launch music application */
+
+#define XF86XK_Battery 0x1008FF93 /* Display battery information */
+#define XF86XK_Bluetooth 0x1008FF94 /* Enable/disable Bluetooth */
+#define XF86XK_WLAN 0x1008FF95 /* Enable/disable WLAN */
+#define XF86XK_UWB 0x1008FF96 /* Enable/disable UWB */
+
+#define XF86XK_AudioForward 0x1008FF97 /* fast-forward audio track */
+#define XF86XK_AudioRepeat 0x1008FF98 /* toggle repeat mode */
+#define XF86XK_AudioRandomPlay 0x1008FF99 /* toggle shuffle mode */
+#define XF86XK_Subtitle 0x1008FF9A /* cycle through subtitle */
+#define XF86XK_AudioCycleTrack 0x1008FF9B /* cycle through audio tracks */
+#define XF86XK_CycleAngle 0x1008FF9C /* cycle through angles */
+#define XF86XK_FrameBack 0x1008FF9D /* video: go one frame back */
+#define XF86XK_FrameForward 0x1008FF9E /* video: go one frame forward */
+#define XF86XK_Time 0x1008FF9F /* display, or shows an entry for time seeking */
+#define XF86XK_Select 0x1008FFA0 /* Select button on joypads and remotes */
+#define XF86XK_View 0x1008FFA1 /* Show a view options/properties */
+#define XF86XK_TopMenu 0x1008FFA2 /* Go to a top-level menu in a video */
+
+#define XF86XK_Red 0x1008FFA3 /* Red button */
+#define XF86XK_Green 0x1008FFA4 /* Green button */
+#define XF86XK_Yellow 0x1008FFA5 /* Yellow button */
+#define XF86XK_Blue 0x1008FFA6 /* Blue button */
+
+#define XF86XK_Suspend 0x1008FFA7 /* Sleep to RAM */
+#define XF86XK_Hibernate 0x1008FFA8 /* Sleep to disk */
+#define XF86XK_TouchpadToggle 0x1008FFA9 /* Toggle between touchpad/trackstick */
+#define XF86XK_TouchpadOn 0x1008FFB0 /* The touchpad got switched on */
+#define XF86XK_TouchpadOff 0x1008FFB1 /* The touchpad got switched off */
+
+/* Keys for special action keys (hot keys) */
+/* Virtual terminals on some operating systems */
+#define XF86XK_Switch_VT_1 0x1008FE01
+#define XF86XK_Switch_VT_2 0x1008FE02
+#define XF86XK_Switch_VT_3 0x1008FE03
+#define XF86XK_Switch_VT_4 0x1008FE04
+#define XF86XK_Switch_VT_5 0x1008FE05
+#define XF86XK_Switch_VT_6 0x1008FE06
+#define XF86XK_Switch_VT_7 0x1008FE07
+#define XF86XK_Switch_VT_8 0x1008FE08
+#define XF86XK_Switch_VT_9 0x1008FE09
+#define XF86XK_Switch_VT_10 0x1008FE0A
+#define XF86XK_Switch_VT_11 0x1008FE0B
+#define XF86XK_Switch_VT_12 0x1008FE0C
+
+#define XF86XK_Ungrab 0x1008FE20 /* force ungrab */
+#define XF86XK_ClearGrab 0x1008FE21 /* kill application with grab */
+#define XF86XK_Next_VMode 0x1008FE22 /* next video mode available */
+#define XF86XK_Prev_VMode 0x1008FE23 /* prev. video mode available */
+#define XF86XK_LogWindowTree 0x1008FE24 /* print window tree to log */
+#define XF86XK_LogGrabInfo 0x1008FE25 /* print all active grabs to log */
diff --git a/XWDFile.h b/XWDFile.h
new file mode 100644
index 0000000..50e17df
--- /dev/null
+++ b/XWDFile.h
@@ -0,0 +1,113 @@
+/*
+
+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.
+
+*/
+
+/*
+ * XWDFile.h MIT Project Athena, X Window system window raster
+ * image dumper, dump file format header file.
+ *
+ * Author: Tony Della Fera, DEC
+ * 27-Jun-85
+ *
+ * Modifier: William F. Wyatt, SAO
+ * 18-Nov-86 - version 6 for saving/restoring color maps
+ */
+
+#ifndef XWDFILE_H
+#define XWDFILE_H
+
+#include <X11/Xmd.h>
+
+#define XWD_FILE_VERSION 7
+#define sz_XWDheader 100
+#define sz_XWDColor 12
+
+typedef CARD32 xwdval; /* for old broken programs */
+
+/* Values in the file are most significant byte first. */
+
+typedef struct _xwd_file_header {
+ /* header_size = SIZEOF(XWDheader) + length of null-terminated
+ * window name. */
+ CARD32 header_size B32;
+
+ CARD32 file_version B32; /* = XWD_FILE_VERSION above */
+ CARD32 pixmap_format B32; /* ZPixmap or XYPixmap */
+ CARD32 pixmap_depth B32; /* Pixmap depth */
+ CARD32 pixmap_width B32; /* Pixmap width */
+ CARD32 pixmap_height B32; /* Pixmap height */
+ CARD32 xoffset B32; /* Bitmap x offset, normally 0 */
+ CARD32 byte_order B32; /* of image data: MSBFirst, LSBFirst */
+
+ /* bitmap_unit applies to bitmaps (depth 1 format XY) only.
+ * It is the number of bits that each scanline is padded to. */
+ CARD32 bitmap_unit B32;
+
+ CARD32 bitmap_bit_order B32; /* bitmaps only: MSBFirst, LSBFirst */
+
+ /* bitmap_pad applies to pixmaps (non-bitmaps) only.
+ * It is the number of bits that each scanline is padded to. */
+ CARD32 bitmap_pad B32;
+
+ CARD32 bits_per_pixel B32; /* Bits per pixel */
+
+ /* bytes_per_line is pixmap_width padded to bitmap_unit (bitmaps)
+ * or bitmap_pad (pixmaps). It is the delta (in bytes) to get
+ * to the same x position on an adjacent row. */
+ CARD32 bytes_per_line B32;
+ CARD32 visual_class B32; /* Class of colormap */
+ CARD32 red_mask B32; /* Z red mask */
+ CARD32 green_mask B32; /* Z green mask */
+ CARD32 blue_mask B32; /* Z blue mask */
+ CARD32 bits_per_rgb B32; /* Log2 of distinct color values */
+ CARD32 colormap_entries B32; /* Number of entries in colormap; not used? */
+ CARD32 ncolors B32; /* Number of XWDColor structures */
+ CARD32 window_width B32; /* Window width */
+ CARD32 window_height B32; /* Window height */
+ CARD32 window_x B32; /* Window upper left X coordinate */
+ CARD32 window_y B32; /* Window upper left Y coordinate */
+ CARD32 window_bdrwidth B32; /* Window border width */
+} XWDFileHeader;
+
+/* Null-terminated window name follows the above structure. */
+
+/* Next comes XWDColor structures, at offset XWDFileHeader.header_size in
+ * the file. XWDFileHeader.ncolors tells how many XWDColor structures
+ * there are.
+ */
+
+typedef struct {
+ CARD32 pixel B32;
+ CARD16 red B16;
+ CARD16 green B16;
+ CARD16 blue B16;
+ CARD8 flags;
+ CARD8 pad;
+} XWDColor;
+
+/* Last comes the image data in the format described by XWDFileHeader. */
+
+#endif /* XWDFILE_H */
+
diff --git a/Xalloca.h b/Xalloca.h
new file mode 100644
index 0000000..1919884
--- /dev/null
+++ b/Xalloca.h
@@ -0,0 +1,121 @@
+/*
+
+Copyright 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.
+
+*/
+/*
+ * The purpose of this header is to define the macros ALLOCATE_LOCAL and
+ * DEALLOCATE_LOCAL appropriately for the platform being compiled on.
+ * These macros are used to make fast, function-local memory allocations.
+ * Their characteristics are as follows:
+ *
+ * void *ALLOCATE_LOCAL(int size)
+ * Returns a pointer to size bytes of memory, or NULL if the allocation
+ * failed. The memory must be freed with DEALLOCATE_LOCAL before the
+ * function that made the allocation returns. You should not ask for
+ * large blocks of memory with this function, since on many platforms
+ * the memory comes from the stack, which may have limited size.
+ *
+ * void DEALLOCATE_LOCAL(void *)
+ * Frees the memory allocated by ALLOCATE_LOCAL. Omission of this
+ * step may be harmless on some platforms, but will result in
+ * memory leaks or worse on others.
+ *
+ * Before including this file, you should define two macros,
+ * ALLOCATE_LOCAL_FALLBACK and DEALLOCATE_LOCAL_FALLBACK, that have the
+ * same characteristics as ALLOCATE_LOCAL and DEALLOCATE_LOCAL. The
+ * header uses the fallbacks if it doesn't know a "better" way to define
+ * ALLOCATE_LOCAL and DEALLOCATE_LOCAL. Typical usage would be:
+ *
+ * #define ALLOCATE_LOCAL_FALLBACK(_size) malloc(_size)
+ * #define DEALLOCATE_LOCAL_FALLBACK(_ptr) free(_ptr)
+ * #include "Xalloca.h"
+ */
+
+#ifndef XALLOCA_H
+#define XALLOCA_H 1
+
+#ifndef INCLUDE_ALLOCA_H
+/* Need to add more here to match Imake *.cf's */
+# if defined(HAVE_ALLOCA_H) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+# define INCLUDE_ALLOCA_H
+# endif
+#endif
+
+#ifdef INCLUDE_ALLOCA_H
+# include <alloca.h>
+#endif
+
+#ifndef NO_ALLOCA
+/*
+ * os-dependent definition of local allocation and deallocation
+ * If you want something other than (DE)ALLOCATE_LOCAL_FALLBACK
+ * for ALLOCATE/DEALLOCATE_LOCAL then you add that in here.
+ */
+
+
+# ifdef __GNUC__
+# ifndef alloca
+# define alloca __builtin_alloca
+# endif /* !alloca */
+# define ALLOCATE_LOCAL(size) alloca((int)(size))
+# else /* ! __GNUC__ */
+
+/*
+ * warning: old mips alloca (pre 2.10) is unusable, new one is built in
+ * Test is easy, the new one is named __builtin_alloca and comes
+ * from alloca.h which #defines alloca.
+ */
+# if defined(__sun) || defined(alloca)
+/*
+ * Some System V boxes extract alloca.o from /lib/libPW.a; if you
+ * decide that you don't want to use alloca, you might want to fix it here.
+ */
+/* alloca might be a macro taking one arg (hi, Sun!), so give it one. */
+# if !defined(__cplusplus)
+# define __Xnullarg /* as nothing */
+ extern void *alloca(__Xnullarg);
+# endif
+# define ALLOCATE_LOCAL(size) alloca((int)(size))
+# endif /* who does alloca */
+# endif /* __GNUC__ */
+
+#endif /* NO_ALLOCA */
+
+#if !defined(ALLOCATE_LOCAL)
+# if defined(ALLOCATE_LOCAL_FALLBACK) && defined(DEALLOCATE_LOCAL_FALLBACK)
+# define ALLOCATE_LOCAL(_size) ALLOCATE_LOCAL_FALLBACK(_size)
+# define DEALLOCATE_LOCAL(_ptr) DEALLOCATE_LOCAL_FALLBACK(_ptr)
+# else /* no fallbacks supplied; error */
+# define ALLOCATE_LOCAL(_size) ALLOCATE_LOCAL_FALLBACK undefined!
+# define DEALLOCATE_LOCAL(_ptr) DEALLOCATE_LOCAL_FALLBACK undefined!
+# endif /* defined(ALLOCATE_LOCAL_FALLBACK && DEALLOCATE_LOCAL_FALLBACK) */
+#else
+# if !defined(DEALLOCATE_LOCAL)
+# define DEALLOCATE_LOCAL(_ptr) do {} while(0)
+# endif
+#endif /* defined(ALLOCATE_LOCAL) */
+
+#endif /* XALLOCA_H */
diff --git a/Xarch.h b/Xarch.h
new file mode 100644
index 0000000..f80c580
--- /dev/null
+++ b/Xarch.h
@@ -0,0 +1,94 @@
+#ifndef _XARCH_H_
+# define _XARCH_H_
+
+/*
+ * Copyright 1997 Metro Link Incorporated
+ *
+ * All Rights Reserved
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, 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 the above listed copyright holder(s)
+ * not be used in advertising or publicity pertaining to distribution of
+ * the software without specific, written prior permission. The above listed
+ * copyright holder(s) make(s) no representations about the suitability of
+ * this software for any purpose. It is provided "as is" without express or
+ * implied warranty.
+ *
+ * THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD
+ * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) 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.
+ */
+
+
+/*
+ * Determine the machine's byte order.
+ */
+
+/* See if it is set in the imake config first */
+# ifdef X_BYTE_ORDER
+
+# define X_BIG_ENDIAN 4321
+# define X_LITTLE_ENDIAN 1234
+
+# else
+
+# if defined(SVR4) || defined(__SVR4)
+# include <sys/types.h>
+# include <sys/byteorder.h>
+# elif defined(CSRG_BASED)
+# if defined(__NetBSD__) || defined(__OpenBSD__)
+# include <sys/types.h>
+# endif
+# include <machine/endian.h>
+# elif defined(linux)
+# if defined __STRICT_ANSI__
+# undef __STRICT_ANSI__
+# include <endian.h>
+# define __STRICT_ANSI__
+# else
+# include <endian.h>
+# endif
+/* 'endian.h' might have been included before 'Xarch.h' */
+# if !defined(LITTLE_ENDIAN) && defined(__LITTLE_ENDIAN)
+# define LITTLE_ENDIAN __LITTLE_ENDIAN
+# endif
+# if !defined(BIG_ENDIAN) && defined(__BIG_ENDIAN)
+# define BIG_ENDIAN __BIG_ENDIAN
+# endif
+# if !defined(PDP_ENDIAN) && defined(__PDP_ENDIAN)
+# define PDP_ENDIAN __PDP_ENDIAN
+# endif
+# if !defined(BYTE_ORDER) && defined(__BYTE_ORDER)
+# define BYTE_ORDER __BYTE_ORDER
+# endif
+# endif
+
+# ifndef BYTE_ORDER
+# define LITTLE_ENDIAN 1234
+# define BIG_ENDIAN 4321
+
+# if defined(__sun) && defined(__SVR4)
+# include <sys/isa_defs.h>
+# ifdef _LITTLE_ENDIAN
+# define BYTE_ORDER LITTLE_ENDIAN
+# endif
+# ifdef _BIG_ENDIAN
+# define BYTE_ORDER BIG_ENDIAN
+# endif
+# endif /* sun */
+# endif /* BYTE_ORDER */
+
+# define X_BYTE_ORDER BYTE_ORDER
+# define X_BIG_ENDIAN BIG_ENDIAN
+# define X_LITTLE_ENDIAN LITTLE_ENDIAN
+
+# endif /* not in imake config */
+
+#endif /* _XARCH_H_ */
diff --git a/Xatom.h b/Xatom.h
new file mode 100644
index 0000000..485a423
--- /dev/null
+++ b/Xatom.h
@@ -0,0 +1,79 @@
+#ifndef XATOM_H
+#define XATOM_H 1
+
+/* THIS IS A GENERATED FILE
+ *
+ * Do not change! Changing this file implies a protocol change!
+ */
+
+#define XA_PRIMARY ((Atom) 1)
+#define XA_SECONDARY ((Atom) 2)
+#define XA_ARC ((Atom) 3)
+#define XA_ATOM ((Atom) 4)
+#define XA_BITMAP ((Atom) 5)
+#define XA_CARDINAL ((Atom) 6)
+#define XA_COLORMAP ((Atom) 7)
+#define XA_CURSOR ((Atom) 8)
+#define XA_CUT_BUFFER0 ((Atom) 9)
+#define XA_CUT_BUFFER1 ((Atom) 10)
+#define XA_CUT_BUFFER2 ((Atom) 11)
+#define XA_CUT_BUFFER3 ((Atom) 12)
+#define XA_CUT_BUFFER4 ((Atom) 13)
+#define XA_CUT_BUFFER5 ((Atom) 14)
+#define XA_CUT_BUFFER6 ((Atom) 15)
+#define XA_CUT_BUFFER7 ((Atom) 16)
+#define XA_DRAWABLE ((Atom) 17)
+#define XA_FONT ((Atom) 18)
+#define XA_INTEGER ((Atom) 19)
+#define XA_PIXMAP ((Atom) 20)
+#define XA_POINT ((Atom) 21)
+#define XA_RECTANGLE ((Atom) 22)
+#define XA_RESOURCE_MANAGER ((Atom) 23)
+#define XA_RGB_COLOR_MAP ((Atom) 24)
+#define XA_RGB_BEST_MAP ((Atom) 25)
+#define XA_RGB_BLUE_MAP ((Atom) 26)
+#define XA_RGB_DEFAULT_MAP ((Atom) 27)
+#define XA_RGB_GRAY_MAP ((Atom) 28)
+#define XA_RGB_GREEN_MAP ((Atom) 29)
+#define XA_RGB_RED_MAP ((Atom) 30)
+#define XA_STRING ((Atom) 31)
+#define XA_VISUALID ((Atom) 32)
+#define XA_WINDOW ((Atom) 33)
+#define XA_WM_COMMAND ((Atom) 34)
+#define XA_WM_HINTS ((Atom) 35)
+#define XA_WM_CLIENT_MACHINE ((Atom) 36)
+#define XA_WM_ICON_NAME ((Atom) 37)
+#define XA_WM_ICON_SIZE ((Atom) 38)
+#define XA_WM_NAME ((Atom) 39)
+#define XA_WM_NORMAL_HINTS ((Atom) 40)
+#define XA_WM_SIZE_HINTS ((Atom) 41)
+#define XA_WM_ZOOM_HINTS ((Atom) 42)
+#define XA_MIN_SPACE ((Atom) 43)
+#define XA_NORM_SPACE ((Atom) 44)
+#define XA_MAX_SPACE ((Atom) 45)
+#define XA_END_SPACE ((Atom) 46)
+#define XA_SUPERSCRIPT_X ((Atom) 47)
+#define XA_SUPERSCRIPT_Y ((Atom) 48)
+#define XA_SUBSCRIPT_X ((Atom) 49)
+#define XA_SUBSCRIPT_Y ((Atom) 50)
+#define XA_UNDERLINE_POSITION ((Atom) 51)
+#define XA_UNDERLINE_THICKNESS ((Atom) 52)
+#define XA_STRIKEOUT_ASCENT ((Atom) 53)
+#define XA_STRIKEOUT_DESCENT ((Atom) 54)
+#define XA_ITALIC_ANGLE ((Atom) 55)
+#define XA_X_HEIGHT ((Atom) 56)
+#define XA_QUAD_WIDTH ((Atom) 57)
+#define XA_WEIGHT ((Atom) 58)
+#define XA_POINT_SIZE ((Atom) 59)
+#define XA_RESOLUTION ((Atom) 60)
+#define XA_COPYRIGHT ((Atom) 61)
+#define XA_NOTICE ((Atom) 62)
+#define XA_FONT_NAME ((Atom) 63)
+#define XA_FAMILY_NAME ((Atom) 64)
+#define XA_FULL_NAME ((Atom) 65)
+#define XA_CAP_HEIGHT ((Atom) 66)
+#define XA_WM_CLASS ((Atom) 67)
+#define XA_WM_TRANSIENT_FOR ((Atom) 68)
+
+#define XA_LAST_PREDEFINED ((Atom) 68)
+#endif /* XATOM_H */
diff --git a/Xdefs.h b/Xdefs.h
new file mode 100644
index 0000000..46ffdad
--- /dev/null
+++ b/Xdefs.h
@@ -0,0 +1,108 @@
+/***********************************************************
+
+Copyright (c) 1999 The XFree86 Project Inc.
+
+All Rights Reserved.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The XFree86 Project
+Inc. shall not be used in advertising or otherwise to promote the
+sale, use or other dealings in this Software without prior written
+authorization from The XFree86 Project Inc..
+
+*/
+
+/**
+ ** Types definitions shared between server and clients
+ **/
+
+#ifndef _XDEFS_H
+#define _XDEFS_H
+
+#ifdef _XSERVER64
+#include <X11/Xmd.h>
+#endif
+
+#ifndef _XTYPEDEF_ATOM
+# define _XTYPEDEF_ATOM
+# ifndef _XSERVER64
+typedef unsigned long Atom;
+# else
+typedef CARD32 Atom;
+# endif
+#endif
+
+#ifndef Bool
+# ifndef _XTYPEDEF_BOOL
+# define _XTYPEDEF_BOOL
+typedef int Bool;
+# endif
+#endif
+
+#ifndef _XTYPEDEF_POINTER
+# define _XTYPEDEF_POINTER
+typedef void *pointer;
+#endif
+
+#ifndef _XTYPEDEF_CLIENTPTR
+typedef struct _Client *ClientPtr;
+# define _XTYPEDEF_CLIENTPTR
+#endif
+
+#ifndef _XTYPEDEF_XID
+# define _XTYPEDEF_XID
+# ifndef _XSERVER64
+typedef unsigned long XID;
+# else
+typedef CARD32 XID;
+# endif
+#endif
+
+#ifndef _XTYPEDEF_MASK
+# define _XTYPEDEF_MASK
+# ifndef _XSERVER64
+typedef unsigned long Mask;
+# else
+typedef CARD32 Mask;
+# endif
+#endif
+
+#ifndef _XTYPEDEF_FONTPTR
+# define _XTYPEDEF_FONTPTR
+typedef struct _Font *FontPtr; /* also in fonts/include/font.h */
+#endif
+
+#ifndef _XTYPEDEF_FONT
+# define _XTYPEDEF_FONT
+typedef XID Font;
+#endif
+
+#ifndef _XTYPEDEF_FSID
+# ifndef _XSERVER64
+typedef unsigned long FSID;
+# else
+typedef CARD32 FSID;
+# endif
+#endif
+
+typedef FSID AccContext;
+
+/* OS independent time value
+ XXX Should probably go in Xos.h */
+typedef struct timeval **OSTimePtr;
+
+
+typedef void (* BlockHandlerProcPtr)(pointer /* blockData */,
+ OSTimePtr /* pTimeout */,
+ pointer /* pReadmask */);
+
+#endif
diff --git a/Xfuncproto.h.in b/Xfuncproto.h.in
new file mode 100644
index 0000000..dc913fa
--- /dev/null
+++ b/Xfuncproto.h.in
@@ -0,0 +1,173 @@
+/*
+ *
+Copyright 1989, 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.
+ *
+ */
+
+/* Definitions to make function prototypes manageable */
+
+#ifndef _XFUNCPROTO_H_
+#define _XFUNCPROTO_H_
+
+#ifndef NeedFunctionPrototypes
+#define NeedFunctionPrototypes 1
+#endif /* NeedFunctionPrototypes */
+
+#ifndef NeedVarargsPrototypes
+#define NeedVarargsPrototypes 1
+#endif /* NeedVarargsPrototypes */
+
+#if NeedFunctionPrototypes
+
+#ifndef NeedNestedPrototypes
+#define NeedNestedPrototypes 1
+#endif /* NeedNestedPrototypes */
+
+#ifndef _Xconst
+#define _Xconst const
+#endif /* _Xconst */
+
+/* Function prototype configuration (see configure for more info) */
+#ifndef NARROWPROTO
+#undef NARROWPROTO
+#endif
+#ifndef FUNCPROTO
+#undef FUNCPROTO
+#endif
+
+#ifndef NeedWidePrototypes
+#ifdef NARROWPROTO
+#define NeedWidePrototypes 0
+#else
+#define NeedWidePrototypes 1 /* default to make interropt. easier */
+#endif
+#endif /* NeedWidePrototypes */
+
+#endif /* NeedFunctionPrototypes */
+
+#ifndef _XFUNCPROTOBEGIN
+#if defined(__cplusplus) || defined(c_plusplus) /* for C++ V2.0 */
+#define _XFUNCPROTOBEGIN extern "C" { /* do not leave open across includes */
+#define _XFUNCPROTOEND }
+#else
+#define _XFUNCPROTOBEGIN
+#define _XFUNCPROTOEND
+#endif
+#endif /* _XFUNCPROTOBEGIN */
+
+/* Added in X11R6.9, so available in any version of modular xproto */
+#if defined(__GNUC__) && (__GNUC__ >= 4)
+# define _X_SENTINEL(x) __attribute__ ((__sentinel__(x)))
+#else
+# define _X_SENTINEL(x)
+#endif /* GNUC >= 4 */
+
+/* Added in X11R6.9, so available in any version of modular xproto */
+#if defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__CYGWIN__)
+# define _X_EXPORT __attribute__((visibility("default")))
+# define _X_HIDDEN __attribute__((visibility("hidden")))
+# define _X_INTERNAL __attribute__((visibility("internal")))
+#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
+# define _X_EXPORT __global
+# define _X_HIDDEN __hidden
+# define _X_INTERNAL __hidden
+#else /* not gcc >= 4 and not Sun Studio >= 8 */
+# define _X_EXPORT
+# define _X_HIDDEN
+# define _X_INTERNAL
+#endif /* GNUC >= 4 */
+
+/* requires xproto >= 7.0.9 */
+#if defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 303)
+# define _X_LIKELY(x) __builtin_expect(!!(x), 1)
+# define _X_UNLIKELY(x) __builtin_expect(!!(x), 0)
+#else /* not gcc >= 3.3 */
+# define _X_LIKELY(x) (x)
+# define _X_UNLIKELY(x) (x)
+#endif
+
+/* Added in X11R6.9, so available in any version of modular xproto */
+#if defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 301)
+# define _X_DEPRECATED __attribute__((deprecated))
+#else /* not gcc >= 3.1 */
+# define _X_DEPRECATED
+#endif
+
+/* requires xproto >= 7.0.17 */
+#if (defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 205)) \
+ || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
+# define _X_NORETURN __attribute((noreturn))
+#else
+# define _X_NORETURN
+#endif /* GNUC */
+
+/* Added in X11R6.9, so available in any version of modular xproto */
+#if defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 203)
+# define _X_ATTRIBUTE_PRINTF(x,y) __attribute__((__format__(__printf__,x,y)))
+#else /* not gcc >= 2.3 */
+# define _X_ATTRIBUTE_PRINTF(x,y)
+#endif
+
+/* requires xproto >= 7.0.22 - since this uses either gcc or C99 variable
+ argument macros, must be only used inside #ifdef _X_NONNULL guards, as
+ many legacy X clients are compiled in C89 mode still. */
+#if defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 303)
+#define _X_NONNULL(args...) __attribute__((nonnull(args)))
+#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ - 0 >= 199901L) /* C99 */
+#define _X_NONNULL(...) /* */
+#endif
+
+/* requires xproto >= 7.0.22 */
+#if defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 205)
+#define _X_UNUSED __attribute__((__unused__))
+#else
+#define _X_UNUSED /* */
+#endif
+
+/* C99 keyword "inline" or equivalent extensions in pre-C99 compilers */
+/* requires xproto >= 7.0.9
+ (introduced in 7.0.8 but didn't support all compilers until 7.0.9) */
+#if defined(inline) /* assume autoconf set it correctly */ || \
+ (defined(__STDC_VERSION__) && (__STDC_VERSION__ - 0 >= 199901L)) /* C99 */ || \
+ (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550))
+# define _X_INLINE inline
+#elif defined(__GNUC__) && !defined(__STRICT_ANSI__) /* gcc w/C89+extensions */
+# define _X_INLINE __inline__
+#else
+# define _X_INLINE
+#endif
+
+/* C99 keyword "restrict" or equivalent extensions in pre-C99 compilers */
+/* requires xproto >= 7.0.21 */
+#ifndef _X_RESTRICT_KYWD
+# if defined(restrict) /* assume autoconf set it correctly */ || \
+ (defined(__STDC_VERSION__) && (__STDC_VERSION__ - 0 >= 199901L)) /* C99 */
+# define _X_RESTRICT_KYWD restrict
+# elif defined(__GNUC__) && !defined(__STRICT_ANSI__) /* gcc w/C89+extensions */
+# define _X_RESTRICT_KYWD __restrict__
+# else
+# define _X_RESTRICT_KYWD
+# endif
+#endif
+
+#endif /* _XFUNCPROTO_H_ */
diff --git a/Xfuncs.h b/Xfuncs.h
new file mode 100644
index 0000000..2bcf991
--- /dev/null
+++ b/Xfuncs.h
@@ -0,0 +1,69 @@
+/*
+ *
+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.
+ *
+ */
+
+#ifndef _XFUNCS_H_
+# define _XFUNCS_H_
+
+# include <X11/Xosdefs.h>
+
+/* the old Xfuncs.h, for pre-R6 */
+# if !(defined(XFree86LOADER) && defined(IN_MODULE))
+
+# ifdef X_USEBFUNCS
+void bcopy();
+void bzero();
+int bcmp();
+# else
+# if defined(SYSV) && !defined(__SCO__) && !defined(__sun) && !defined(__UNIXWARE__)
+# include <memory.h>
+void bcopy();
+# define bzero(b,len) memset(b, 0, len)
+# define bcmp(b1,b2,len) memcmp(b1, b2, len)
+# else
+# include <string.h>
+# if defined(__SCO__) || defined(__sun) || defined(__UNIXWARE__) || defined(__CYGWIN__)
+# include <strings.h>
+# endif
+# define _XFUNCS_H_INCLUDED_STRING_H
+# endif
+# endif /* X_USEBFUNCS */
+
+/* the new Xfuncs.h */
+
+/* the ANSI C way */
+# ifndef _XFUNCS_H_INCLUDED_STRING_H
+# include <string.h>
+# endif
+# undef bzero
+# define bzero(b,len) memset(b,0,len)
+
+# if defined WIN32 && defined __MINGW32__
+# define bcopy(b1,b2,len) memmove(b2, b1, (size_t)(len))
+# endif
+
+# endif /* !(defined(XFree86LOADER) && defined(IN_MODULE)) */
+
+#endif /* _XFUNCS_H_ */
diff --git a/Xmd.h b/Xmd.h
new file mode 100644
index 0000000..f3868b3
--- /dev/null
+++ b/Xmd.h
@@ -0,0 +1,185 @@
+/***********************************************************
+
+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 XMD_H
+# define XMD_H 1
+/*
+ * Xmd.h: MACHINE DEPENDENT DECLARATIONS.
+ */
+
+/*
+ * Special per-machine configuration flags.
+ */
+# if defined(__sun) && defined(__SVR4)
+# include <sys/isa_defs.h> /* Solaris: defines _LP64 if necessary */
+# endif
+
+# if defined (_LP64) || defined(__LP64__) || \
+ defined(__alpha) || defined(__alpha__) || \
+ defined(__ia64__) || defined(ia64) || \
+ defined(__sparc64__) || \
+ defined(__s390x__) || \
+ defined(__amd64__) || defined(amd64) || \
+ defined(__powerpc64__)
+# define LONG64 /* 32/64-bit architecture */
+# endif
+
+/*
+ * Stuff to handle large architecture machines; the constants were generated
+ * on a 32-bit machine and must correspond to the protocol.
+ */
+# ifdef WORD64
+# define MUSTCOPY
+# endif /* WORD64 */
+
+
+/*
+ * Definition of macro used to set constants for size of network structures;
+ * machines with preprocessors that can't handle all of the sz_ symbols
+ * can define this macro to be sizeof(x) if and only if their compiler doesn't
+ * pad out structures (esp. the xTextElt structure which contains only two
+ * one-byte fields). Network structures should always define sz_symbols.
+ *
+ * The sz_ prefix is used instead of something more descriptive so that the
+ * symbols are no more than 32 characters long (which causes problems for some
+ * compilers and preprocessors).
+ *
+ * The extra indirection is to get macro arguments to expand correctly before
+ * the concatenation, rather than afterward.
+ */
+# define _SIZEOF(x) sz_##x
+# define SIZEOF(x) _SIZEOF(x)
+
+/*
+ * Bitfield suffixes for the protocol structure elements, if you
+ * need them. Note that bitfields are not guaranteed to be signed
+ * (or even unsigned) according to ANSI C.
+ */
+# ifdef WORD64
+typedef long INT64;
+typedef unsigned long CARD64;
+# define B32 :32
+# define B16 :16
+# ifdef UNSIGNEDBITFIELDS
+typedef unsigned int INT32;
+typedef unsigned int INT16;
+# else
+typedef signed int INT32;
+typedef signed int INT16;
+# endif
+# else
+# define B32
+# define B16
+# ifdef LONG64
+typedef long INT64;
+typedef int INT32;
+# else
+typedef long INT32;
+# endif
+typedef short INT16;
+# endif
+
+typedef signed char INT8;
+
+# ifdef LONG64
+typedef unsigned long CARD64;
+typedef unsigned int CARD32;
+# else
+typedef unsigned long CARD32;
+# endif
+# if !defined(WORD64) && !defined(LONG64)
+typedef unsigned long long CARD64;
+# endif
+typedef unsigned short CARD16;
+typedef unsigned char CARD8;
+
+typedef CARD32 BITS32;
+typedef CARD16 BITS16;
+
+typedef CARD8 BYTE;
+typedef CARD8 BOOL;
+
+/*
+ * definitions for sign-extending bitfields on 64-bit architectures
+ */
+# if defined(WORD64) && defined(UNSIGNEDBITFIELDS)
+# define cvtINT8toInt(val) (((val) & 0x00000080) ? ((val) | 0xffffffffffffff00) : (val))
+# define cvtINT16toInt(val) (((val) & 0x00008000) ? ((val) | 0xffffffffffff0000) : (val))
+# define cvtINT32toInt(val) (((val) & 0x80000000) ? ((val) | 0xffffffff00000000) : (val))
+# define cvtINT8toShort(val) cvtINT8toInt(val)
+# define cvtINT16toShort(val) cvtINT16toInt(val)
+# define cvtINT32toShort(val) cvtINT32toInt(val)
+# define cvtINT8toLong(val) cvtINT8toInt(val)
+# define cvtINT16toLong(val) cvtINT16toInt(val)
+# define cvtINT32toLong(val) cvtINT32toInt(val)
+# else
+# define cvtINT8toInt(val) (val)
+# define cvtINT16toInt(val) (val)
+# define cvtINT32toInt(val) (val)
+# define cvtINT8toShort(val) (val)
+# define cvtINT16toShort(val) (val)
+# define cvtINT32toShort(val) (val)
+# define cvtINT8toLong(val) (val)
+# define cvtINT16toLong(val) (val)
+# define cvtINT32toLong(val) (val)
+# endif /* WORD64 and UNSIGNEDBITFIELDS */
+
+
+
+# ifdef MUSTCOPY
+/*
+ * This macro must not cast or else pointers will get aligned and be wrong
+ */
+# define NEXTPTR(p,t) (((char *) p) + SIZEOF(t))
+# else /* else not MUSTCOPY, this is used for 32-bit machines */
+/*
+ * this version should leave result of type (t *), but that should only be
+ * used when not in MUSTCOPY
+ */
+# define NEXTPTR(p,t) (((t *)(p)) + 1)
+# endif /* MUSTCOPY - used machines whose C structs don't line up with proto */
+
+#endif /* XMD_H */
diff --git a/Xos.h b/Xos.h
new file mode 100644
index 0000000..044d22b
--- /dev/null
+++ b/Xos.h
@@ -0,0 +1,148 @@
+/*
+ *
+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.
+ *
+ * The X Window System is a Trademark of The Open Group.
+ *
+ */
+
+/* This is a collection of things to try and minimize system dependencies
+ * in a "significant" number of source files.
+ */
+
+#ifndef _XOS_H_
+# define _XOS_H_
+
+# include <X11/Xosdefs.h>
+
+/*
+ * Get major data types (esp. caddr_t)
+ */
+
+# include <sys/types.h>
+
+# if defined(__SCO__) || defined(__UNIXWARE__)
+# include <stdint.h>
+# endif
+
+
+/*
+ * Just about everyone needs the strings routines. We provide both forms here,
+ * index/rindex and strchr/strrchr, so any systems that don't provide them all
+ * need to have #defines here.
+ *
+ * These macros are defined this way, rather than, e.g.:
+ * #defined index(s,c) strchr(s,c)
+ * because someone might be using them as function pointers, and such
+ * a change would break compatibility for anyone who's relying on them
+ * being the way they currently are. So we're stuck with them this way,
+ * which can be really inconvenient. :-(
+ */
+
+# include <string.h>
+# if defined(__SCO__) || defined(__UNIXWARE__) || defined(__sun) || defined(__CYGWIN__)
+# include <strings.h>
+# else
+# ifndef index
+# define index(s,c) (strchr((s),(c)))
+# endif
+# ifndef rindex
+# define rindex(s,c) (strrchr((s),(c)))
+# endif
+# endif
+
+/*
+ * Get open(2) constants
+ */
+# if defined(X_NOT_POSIX)
+# include <fcntl.h>
+# if defined(USL) || defined(__i386__) && (defined(SYSV) || defined(SVR4))
+# include <unistd.h>
+# endif
+# ifdef WIN32
+# include <X11/Xw32defs.h>
+# else
+# include <sys/file.h>
+# endif
+# else /* X_NOT_POSIX */
+# include <fcntl.h>
+# include <unistd.h>
+# endif /* X_NOT_POSIX else */
+
+/*
+ * Get struct timeval and struct tm
+ */
+
+# if defined(_POSIX_SOURCE) && defined(SVR4)
+/* need to omit _POSIX_SOURCE in order to get what we want in SVR4 */
+# undef _POSIX_SOURCE
+# include <sys/time.h>
+# define _POSIX_SOURCE
+# elif defined(WIN32)
+# include <time.h>
+# if !defined(_WINSOCKAPI_) && !defined(_WILLWINSOCK_) && !defined(_TIMEVAL_DEFINED) && !defined(_STRUCT_TIMEVAL)
+struct timeval {
+ long tv_sec; /* seconds */
+ long tv_usec; /* and microseconds */
+};
+# define _TIMEVAL_DEFINED
+# endif
+# include <sys/timeb.h>
+# define gettimeofday(t) \
+{ \
+ struct _timeb _gtodtmp; \
+ _ftime (&_gtodtmp); \
+ (t)->tv_sec = _gtodtmp.time; \
+ (t)->tv_usec = _gtodtmp.millitm * 1000; \
+}
+# else
+# include <sys/time.h>
+# include <time.h>
+# endif /* defined(_POSIX_SOURCE) && defined(SVR4) */
+
+/* define X_GETTIMEOFDAY macro, a portable gettimeofday() */
+# if defined(_XOPEN_XPG4) || defined(_XOPEN_UNIX) /* _XOPEN_UNIX is XPG4.2 */
+# define X_GETTIMEOFDAY(t) gettimeofday(t, (struct timezone*)0)
+# else
+# if defined(SVR4) || defined(__SVR4) || defined(WIN32)
+# define X_GETTIMEOFDAY(t) gettimeofday(t)
+# else
+# define X_GETTIMEOFDAY(t) gettimeofday(t, (struct timezone*)0)
+# endif
+# endif /* XPG4 else */
+
+
+# ifdef __GNU__
+# define PATH_MAX 4096
+# define MAXPATHLEN 4096
+# define OPEN_MAX 256 /* We define a reasonable limit. */
+# endif
+
+/* use POSIX name for signal */
+# if defined(X_NOT_POSIX) && defined(SYSV) && !defined(SIGCHLD)
+# define SIGCHLD SIGCLD
+# endif
+
+# include <X11/Xarch.h>
+
+#endif /* _XOS_H_ */
diff --git a/Xos_r.h b/Xos_r.h
new file mode 100644
index 0000000..f963b64
--- /dev/null
+++ b/Xos_r.h
@@ -0,0 +1,1095 @@
+/*
+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.
+*/
+
+/*
+ * Various and sundry Thread-Safe functions used by X11, Motif, and CDE.
+ *
+ * Use this file in MT-safe code where you would have included
+ * <dirent.h> for readdir()
+ * <grp.h> for getgrgid() or getgrnam()
+ * <netdb.h> for gethostbyname(), gethostbyaddr(), or getservbyname()
+ * <pwd.h> for getpwnam() or getpwuid()
+ * <string.h> for strtok()
+ * <time.h> for asctime(), ctime(), localtime(), or gmtime()
+ * <unistd.h> for getlogin() or ttyname()
+ * or their thread-safe analogs.
+ *
+ * If you are on a platform that defines XTHREADS but does not have
+ * MT-safe system API (e.g. UnixWare) you must define _Xos_processLock
+ * and _Xos_processUnlock macros before including this header.
+ *
+ * For convenience XOS_USE_XLIB_LOCKING or XOS_USE_XT_LOCKING may be defined
+ * to obtain either Xlib-only or Xt-based versions of these macros. These
+ * macros won't result in truly thread-safe calls, but they are better than
+ * nothing. If you do not want locking in this situation define
+ * XOS_USE_NO_LOCKING.
+ *
+ * NOTE: On systems lacking appropriate _r functions Gethostbyname(),
+ * Gethostbyaddr(), and Getservbyname() do NOT copy the host or
+ * protocol lists!
+ *
+ * NOTE: On systems lacking appropriate _r functions Getgrgid() and
+ * Getgrnam() do NOT copy the list of group members!
+ *
+ * This header is nominally intended to simplify porting X11, Motif, and
+ * CDE; it may be useful to other people too. 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.
+ */
+
+/*
+ * This header has several parts. Search for "Effective prototypes"
+ * to locate the beginning of a section.
+ */
+
+/* This header can be included multiple times with different defines! */
+#ifndef _XOS_R_H_
+# define _XOS_R_H_
+
+# include <X11/Xos.h>
+# include <X11/Xfuncs.h>
+
+# ifndef X_NOT_POSIX
+# ifdef _POSIX_SOURCE
+# include <limits.h>
+# else
+# define _POSIX_SOURCE
+# include <limits.h>
+# undef _POSIX_SOURCE
+# endif
+# ifndef LINE_MAX
+# define X_LINE_MAX 2048
+# else
+# define X_LINE_MAX LINE_MAX
+# endif
+# endif
+#endif /* _XOS_R_H */
+
+#ifndef WIN32
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+# if defined(XOS_USE_XLIB_LOCKING)
+# ifndef XAllocIDs /* Xlibint.h does not have multiple include protection */
+typedef struct _LockInfoRec *LockInfoPtr;
+extern LockInfoPtr _Xglobal_lock;
+# endif
+# ifndef _Xos_isThreadInitialized
+# define _Xos_isThreadInitialized (_Xglobal_lock)
+# endif
+# if defined(XTHREADS_WARN) || defined(XTHREADS_FILE_LINE)
+# ifndef XAllocIDs /* Xlibint.h does not have multiple include protection */
+# include <X11/Xfuncproto.h> /* for NeedFunctionPrototypes */
+extern void (*_XLockMutex_fn)(
+# if NeedFunctionPrototypes
+ LockInfoPtr /* lock */, char * /* file */, int /* line */
+# endif
+);
+extern void (*_XUnlockMutex_fn)(
+# if NeedFunctionPrototypes
+ LockInfoPtr /* lock */, char * /* file */, int /* line */
+# endif
+);
+# endif
+# ifndef _Xos_processLock
+# define _Xos_processLock \
+ (_XLockMutex_fn ? (*_XLockMutex_fn)(_Xglobal_lock,__FILE__,__LINE__) : 0)
+# endif
+# ifndef _Xos_processUnlock
+# define _Xos_processUnlock \
+ (_XUnlockMutex_fn ? (*_XUnlockMutex_fn)(_Xglobal_lock,__FILE__,__LINE__) : 0)
+# endif
+# else
+# ifndef XAllocIDs /* Xlibint.h does not have multiple include protection */
+# include <X11/Xfuncproto.h> /* for NeedFunctionPrototypes */
+extern void (*_XLockMutex_fn)(
+# if NeedFunctionPrototypes
+ LockInfoPtr /* lock */
+# endif
+);
+extern void (*_XUnlockMutex_fn)(
+# if NeedFunctionPrototypes
+ LockInfoPtr /* lock */
+# endif
+);
+# endif
+# ifndef _Xos_processLock
+# define _Xos_processLock \
+ (_XLockMutex_fn ? ((*_XLockMutex_fn)(_Xglobal_lock), 0) : 0)
+# endif
+# ifndef _Xos_processUnlock
+# define _Xos_processUnlock \
+ (_XUnlockMutex_fn ? ((*_XUnlockMutex_fn)(_Xglobal_lock), 0) : 0)
+# endif
+# endif
+# elif defined(XOS_USE_XT_LOCKING)
+# ifndef _XtThreadsI_h
+extern void (*_XtProcessLock)(void);
+# endif
+# ifndef _XtintrinsicP_h
+# include <X11/Xfuncproto.h> /* for NeedFunctionPrototypes */
+extern void XtProcessLock(
+# if NeedFunctionPrototypes
+ void
+# endif
+);
+extern void XtProcessUnlock(
+# if NeedFunctionPrototypes
+ void
+# endif
+);
+# endif
+# ifndef _Xos_isThreadInitialized
+# define _Xos_isThreadInitialized _XtProcessLock
+# endif
+# ifndef _Xos_processLock
+# define _Xos_processLock XtProcessLock()
+# endif
+# ifndef _Xos_processUnlock
+# define _Xos_processUnlock XtProcessUnlock()
+# endif
+# elif defined(XOS_USE_NO_LOCKING)
+# ifndef _Xos_isThreadInitialized
+# define _Xos_isThreadInitialized 0
+# endif
+# ifndef _Xos_processLock
+# define _Xos_processLock 0
+# endif
+# ifndef _Xos_processUnlock
+# define _Xos_processUnlock 0
+# endif
+# endif
+
+#endif /* !defined WIN32 */
+
+/*
+ * Solaris defines the POSIX thread-safe feature test macro, but
+ * uses the older SVR4 thread-safe functions unless the POSIX ones
+ * are specifically requested. Fix the feature test macro.
+ */
+#if defined(__sun) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && \
+ (_POSIX_C_SOURCE - 0 < 199506L) && !defined(_POSIX_PTHREAD_SEMANTICS)
+# undef _POSIX_THREAD_SAFE_FUNCTIONS
+#endif
+
+/***** <pwd.h> wrappers *****/
+
+/*
+ * Effective prototypes for <pwd.h> wrappers:
+ *
+ * #define X_INCLUDE_PWD_H
+ * #define XOS_USE_..._LOCKING
+ * #include <X11/Xos_r.h>
+ *
+ * typedef ... _Xgetpwparams;
+ *
+ * struct passwd* _XGetpwnam(const char *name, _Xgetpwparams);
+ * struct passwd* _XGetpwuid(uid_t uid, _Xgetpwparams);
+ */
+
+#if defined(X_INCLUDE_PWD_H) && !defined(_XOS_INCLUDED_PWD_H)
+# include <pwd.h>
+# if defined(XUSE_MTSAFE_API) || defined(XUSE_MTSAFE_PWDAPI)
+# define XOS_USE_MTSAFE_PWDAPI 1
+# endif
+#endif
+
+#undef X_NEEDS_PWPARAMS
+#if !defined(X_INCLUDE_PWD_H) || defined(_XOS_INCLUDED_PWD_H)
+/* Do nothing */
+
+#elif !defined(XTHREADS) && !defined(X_FORCE_USE_MTSAFE_API)
+/* Use regular, unsafe API. */
+# if defined(X_NOT_POSIX) && !defined(__i386__) && !defined(SYSV)
+extern struct passwd *getpwuid(), *getpwnam();
+# endif
+typedef int _Xgetpwparams; /* dummy */
+# define _XGetpwuid(u,p) getpwuid((u))
+# define _XGetpwnam(u,p) getpwnam((u))
+
+#elif !defined(XOS_USE_MTSAFE_PWDAPI) || defined(XNO_MTSAFE_PWDAPI)
+/* UnixWare 2.0, or other systems with thread support but no _r API. */
+# define X_NEEDS_PWPARAMS
+typedef struct {
+ struct passwd pws;
+ char pwbuf[1024];
+ struct passwd* pwp;
+ size_t len;
+} _Xgetpwparams;
+
+/*
+ * NetBSD and FreeBSD, at least, are missing several of the unixware passwd
+ * fields.
+ */
+
+#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) || \
+ defined(__APPLE__) || defined(__DragonFly__)
+static __inline__ void _Xpw_copyPasswd(_Xgetpwparams p)
+{
+ memcpy(&(p).pws, (p).pwp, sizeof(struct passwd));
+
+ (p).pws.pw_name = (p).pwbuf;
+ (p).len = strlen((p).pwp->pw_name);
+ strcpy((p).pws.pw_name, (p).pwp->pw_name);
+
+ (p).pws.pw_passwd = (p).pws.pw_name + (p).len + 1;
+ (p).len = strlen((p).pwp->pw_passwd);
+ strcpy((p).pws.pw_passwd,(p).pwp->pw_passwd);
+
+ (p).pws.pw_class = (p).pws.pw_passwd + (p).len + 1;
+ (p).len = strlen((p).pwp->pw_class);
+ strcpy((p).pws.pw_class, (p).pwp->pw_class);
+
+ (p).pws.pw_gecos = (p).pws.pw_class + (p).len + 1;
+ (p).len = strlen((p).pwp->pw_gecos);
+ strcpy((p).pws.pw_gecos, (p).pwp->pw_gecos);
+
+ (p).pws.pw_dir = (p).pws.pw_gecos + (p).len + 1;
+ (p).len = strlen((p).pwp->pw_dir);
+ strcpy((p).pws.pw_dir, (p).pwp->pw_dir);
+
+ (p).pws.pw_shell = (p).pws.pw_dir + (p).len + 1;
+ (p).len = strlen((p).pwp->pw_shell);
+ strcpy((p).pws.pw_shell, (p).pwp->pw_shell);
+
+ (p).pwp = &(p).pws;
+}
+
+#else
+# define _Xpw_copyPasswd(p) \
+ (memcpy(&(p).pws, (p).pwp, sizeof(struct passwd)), \
+ ((p).pws.pw_name = (p).pwbuf), \
+ ((p).len = strlen((p).pwp->pw_name)), \
+ strcpy((p).pws.pw_name, (p).pwp->pw_name), \
+ ((p).pws.pw_passwd = (p).pws.pw_name + (p).len + 1), \
+ ((p).len = strlen((p).pwp->pw_passwd)), \
+ strcpy((p).pws.pw_passwd,(p).pwp->pw_passwd), \
+ ((p).pws.pw_age = (p).pws.pw_passwd + (p).len + 1), \
+ ((p).len = strlen((p).pwp->pw_age)), \
+ strcpy((p).pws.pw_age, (p).pwp->pw_age), \
+ ((p).pws.pw_comment = (p).pws.pw_age + (p).len + 1), \
+ ((p).len = strlen((p).pwp->pw_comment)), \
+ strcpy((p).pws.pw_comment, (p).pwp->pw_comment), \
+ ((p).pws.pw_gecos = (p).pws.pw_comment + (p).len + 1), \
+ ((p).len = strlen((p).pwp->pw_gecos)), \
+ strcpy((p).pws.pw_gecos, (p).pwp->pw_gecos), \
+ ((p).pws.pw_dir = (p).pws.pw_comment + (p).len + 1), \
+ ((p).len = strlen((p).pwp->pw_dir)), \
+ strcpy((p).pws.pw_dir, (p).pwp->pw_dir), \
+ ((p).pws.pw_shell = (p).pws.pw_dir + (p).len + 1), \
+ ((p).len = strlen((p).pwp->pw_shell)), \
+ strcpy((p).pws.pw_shell, (p).pwp->pw_shell), \
+ ((p).pwp = &(p).pws), \
+ 0 )
+#endif
+# define _XGetpwuid(u,p) \
+( (_Xos_processLock), \
+ (((p).pwp = getpwuid((u))) ? _Xpw_copyPasswd(p), 0 : 0), \
+ (_Xos_processUnlock), \
+ (p).pwp )
+# define _XGetpwnam(u,p) \
+( (_Xos_processLock), \
+ (((p).pwp = getpwnam((u))) ? _Xpw_copyPasswd(p), 0 : 0), \
+ (_Xos_processUnlock), \
+ (p).pwp )
+
+#elif !defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(__APPLE__)
+# define X_NEEDS_PWPARAMS
+typedef struct {
+ struct passwd pws;
+ char pwbuf[X_LINE_MAX];
+} _Xgetpwparams;
+# if defined(_POSIX_REENTRANT_FUNCTIONS) || !defined(SVR4)
+# define _XGetpwuid(u,p) \
+((getpwuid_r((u),&(p).pws,(p).pwbuf,sizeof((p).pwbuf)) == -1) ? NULL : &(p).pws)
+# define _XGetpwnam(u,p) \
+((getpwnam_r((u),&(p).pws,(p).pwbuf,sizeof((p).pwbuf)) == -1) ? NULL : &(p).pws)
+# else /* SVR4 */
+# define _XGetpwuid(u,p) \
+((getpwuid_r((u),&(p).pws,(p).pwbuf,sizeof((p).pwbuf)) == NULL) ? NULL : &(p).pws)
+# define _XGetpwnam(u,p) \
+((getpwnam_r((u),&(p).pws,(p).pwbuf,sizeof((p).pwbuf)) == NULL) ? NULL : &(p).pws)
+# endif /* SVR4 */
+
+#else /* _POSIX_THREAD_SAFE_FUNCTIONS */
+# define X_NEEDS_PWPARAMS
+typedef struct {
+ struct passwd pws;
+ char pwbuf[X_LINE_MAX];
+ struct passwd* pwp;
+} _Xgetpwparams;
+typedef int _Xgetpwret;
+# define _XGetpwuid(u,p) \
+((getpwuid_r((u),&(p).pws,(p).pwbuf,sizeof((p).pwbuf),&(p).pwp) == 0) ? \
+ (p).pwp : NULL)
+# define _XGetpwnam(u,p) \
+((getpwnam_r((u),&(p).pws,(p).pwbuf,sizeof((p).pwbuf),&(p).pwp) == 0) ? \
+ (p).pwp : NULL)
+#endif /* X_INCLUDE_PWD_H */
+
+#if defined(X_INCLUDE_PWD_H) && !defined(_XOS_INCLUDED_PWD_H)
+# define _XOS_INCLUDED_PWD_H
+#endif
+
+
+/***** <netdb.h> wrappers *****/
+
+/*
+ * Effective prototypes for <netdb.h> wrappers:
+ *
+ * NOTE: On systems lacking the appropriate _r functions Gethostbyname(),
+ * Gethostbyaddr(), and Getservbyname() do NOT copy the host or
+ * protocol lists!
+ *
+ * #define X_INCLUDE_NETDB_H
+ * #define XOS_USE_..._LOCKING
+ * #include <X11/Xos_r.h>
+ *
+ * typedef ... _Xgethostbynameparams;
+ * typedef ... _Xgetservbynameparams;
+ *
+ * struct hostent* _XGethostbyname(const char* name,_Xgethostbynameparams);
+ * struct hostent* _XGethostbyaddr(const char* addr, int len, int type,
+ * _Xgethostbynameparams);
+ * struct servent* _XGetservbyname(const char* name, const char* proto,
+ * _Xgetservbynameparams);
+ */
+
+#undef XTHREADS_NEEDS_BYNAMEPARAMS
+#if defined(X_INCLUDE_NETDB_H) && !defined(_XOS_INCLUDED_NETDB_H) \
+ && !defined(WIN32)
+# include <netdb.h>
+# if defined(XUSE_MTSAFE_API) || defined(XUSE_MTSAFE_NETDBAPI)
+# define XOS_USE_MTSAFE_NETDBAPI 1
+# endif
+#endif
+
+#if !defined(X_INCLUDE_NETDB_H) || defined(_XOS_INCLUDED_NETDB_H)
+/* Do nothing. */
+
+#elif !defined(XTHREADS) && !defined(X_FORCE_USE_MTSAFE_API)
+/* Use regular, unsafe API. */
+typedef int _Xgethostbynameparams; /* dummy */
+typedef int _Xgetservbynameparams; /* dummy */
+# define _XGethostbyname(h,hp) gethostbyname((h))
+# define _XGethostbyaddr(a,al,t,hp) gethostbyaddr((a),(al),(t))
+# define _XGetservbyname(s,p,sp) getservbyname((s),(p))
+
+#elif !defined(XOS_USE_MTSAFE_NETDBAPI) || defined(XNO_MTSAFE_NETDBAPI)
+/* WARNING: The h_addr_list and s_aliases values are *not* copied! */
+
+#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__)
+#include <sys/param.h>
+#endif
+
+typedef struct {
+ struct hostent hent;
+ char h_name[MAXHOSTNAMELEN];
+ struct hostent *hptr;
+} _Xgethostbynameparams;
+typedef struct {
+ struct servent sent;
+ char s_name[255];
+ char s_proto[255];
+ struct servent *sptr;
+} _Xgetservbynameparams;
+
+# define XTHREADS_NEEDS_BYNAMEPARAMS
+
+# define _Xg_copyHostent(hp) \
+ (memcpy(&(hp).hent, (hp).hptr, sizeof(struct hostent)), \
+ strcpy((hp).h_name, (hp).hptr->h_name), \
+ ((hp).hent.h_name = (hp).h_name), \
+ ((hp).hptr = &(hp).hent), \
+ 0 )
+# define _Xg_copyServent(sp) \
+ (memcpy(&(sp).sent, (sp).sptr, sizeof(struct servent)), \
+ strcpy((sp).s_name, (sp).sptr->s_name), \
+ ((sp).sent.s_name = (sp).s_name), \
+ strcpy((sp).s_proto, (sp).sptr->s_proto), \
+ ((sp).sent.s_proto = (sp).s_proto), \
+ ((sp).sptr = &(sp).sent), \
+ 0 )
+# define _XGethostbyname(h,hp) \
+ ((_Xos_processLock), \
+ (((hp).hptr = gethostbyname((h))) ? _Xg_copyHostent(hp) : 0), \
+ (_Xos_processUnlock), \
+ (hp).hptr )
+# define _XGethostbyaddr(a,al,t,hp) \
+ ((_Xos_processLock), \
+ (((hp).hptr = gethostbyaddr((a),(al),(t))) ? _Xg_copyHostent(hp) : 0), \
+ (_Xos_processUnlock), \
+ (hp).hptr )
+# define _XGetservbyname(s,p,sp) \
+ ((_Xos_processLock), \
+ (((sp).sptr = getservbyname((s),(p))) ? _Xg_copyServent(sp) : 0), \
+ (_Xos_processUnlock), \
+ (sp).sptr )
+
+#elif defined(XUSE_NETDB_R_API)
+/*
+ * POSIX does not specify _r equivalents for <netdb.h> API, but some
+ * vendors provide them anyway. Use them only when explicitly asked.
+ */
+# ifdef _POSIX_REENTRANT_FUNCTIONS
+# ifndef _POSIX_THREAD_SAFE_FUNCTIONS
+# endif
+# endif
+# ifdef _POSIX_THREAD_SAFE_FUNCTIONS
+# define X_POSIX_THREAD_SAFE_FUNCTIONS 1
+# endif
+
+# define XTHREADS_NEEDS_BYNAMEPARAMS
+
+# ifndef X_POSIX_THREAD_SAFE_FUNCTIONS
+typedef struct {
+ struct hostent hent;
+ char hbuf[X_LINE_MAX];
+ int herr;
+} _Xgethostbynameparams;
+typedef struct {
+ struct servent sent;
+ char sbuf[X_LINE_MAX];
+} _Xgetservbynameparams;
+# define _XGethostbyname(h,hp) \
+ gethostbyname_r((h),&(hp).hent,(hp).hbuf,sizeof((hp).hbuf),&(hp).herr)
+# define _XGethostbyaddr(a,al,t,hp) \
+ gethostbyaddr_r((a),(al),(t),&(hp).hent,(hp).hbuf,sizeof((hp).hbuf),&(hp).herr)
+# define _XGetservbyname(s,p,sp) \
+ getservbyname_r((s),(p),&(sp).sent,(sp).sbuf,sizeof((sp).sbuf))
+# else
+typedef struct {
+ struct hostent hent;
+ struct hostent_data hdata;
+} _Xgethostbynameparams;
+typedef struct {
+ struct servent sent;
+ struct servent_data sdata;
+} _Xgetservbynameparams;
+# define _XGethostbyname(h,hp) \
+ (bzero((char*)&(hp).hdata,sizeof((hp).hdata)), \
+ ((gethostbyname_r((h),&(hp).hent,&(hp).hdata) == -1) ? NULL : &(hp).hent))
+# define _XGethostbyaddr(a,al,t,hp) \
+ (bzero((char*)&(hp).hdata,sizeof((hp).hdata)), \
+ ((gethostbyaddr_r((a),(al),(t),&(hp).hent,&(hp).hdata) == -1) ? NULL : &(hp).hent))
+# define _XGetservbyname(s,p,sp) \
+ (bzero((char*)&(sp).sdata,sizeof((sp).sdata)), \
+ ((getservbyname_r((s),(p),&(sp).sent,&(sp).sdata) == -1) ? NULL : &(sp).sent) )
+# endif
+# ifdef X_POSIX_THREAD_SAFE_FUNCTIONS
+# undef X_POSIX_THREAD_SAFE_FUNCTIONS
+# endif
+
+#else
+/* The regular API is assumed to be MT-safe under POSIX. */
+typedef int _Xgethostbynameparams; /* dummy */
+typedef int _Xgetservbynameparams; /* dummy */
+# define _XGethostbyname(h,hp) gethostbyname((h))
+# define _XGethostbyaddr(a,al,t,hp) gethostbyaddr((a),(al),(t))
+# define _XGetservbyname(s,p,sp) getservbyname((s),(p))
+#endif /* X_INCLUDE_NETDB_H */
+
+#if defined(X_INCLUDE_NETDB_H) && !defined(_XOS_INCLUDED_NETDB_H)
+# define _XOS_INCLUDED_NETDB_H
+#endif
+
+
+/***** <dirent.h> wrappers *****/
+
+/*
+ * Effective prototypes for <dirent.h> wrappers:
+ *
+ * #define X_INCLUDE_DIRENT_H
+ * #define XOS_USE_..._LOCKING
+ * #include <X11/Xos_r.h>
+ *
+ * typedef ... _Xreaddirparams;
+ *
+ * struct dirent *_XReaddir(DIR *dir_pointer, _Xreaddirparams);
+ */
+
+#if defined(X_INCLUDE_DIRENT_H) && !defined(_XOS_INCLUDED_DIRENT_H)
+# include <sys/types.h>
+# if !defined(X_NOT_POSIX) || defined(SYSV)
+# include <dirent.h>
+# else
+# include <sys/dir.h>
+# ifndef dirent
+# define dirent direct
+# endif
+# endif
+# if defined(XUSE_MTSAFE_API) || defined(XUSE_MTSAFE_DIRENTAPI)
+# define XOS_USE_MTSAFE_DIRENTAPI 1
+# endif
+#endif
+
+#if !defined(X_INCLUDE_DIRENT_H) || defined(_XOS_INCLUDED_DIRENT_H)
+/* Do nothing. */
+
+#elif !defined(XTHREADS) && !defined(X_FORCE_USE_MTSAFE_API)
+/* Use regular, unsafe API. */
+typedef int _Xreaddirparams; /* dummy */
+# define _XReaddir(d,p) readdir(d)
+
+#elif !defined(XOS_USE_MTSAFE_DIRENTAPI) || defined(XNO_MTSAFE_DIRENTAPI)
+/* Systems with thread support but no _r API. */
+typedef struct {
+ struct dirent *result;
+ struct dirent dir_entry;
+# ifdef _POSIX_PATH_MAX
+ char buf[_POSIX_PATH_MAX];
+# elif defined(NAME_MAX)
+ char buf[NAME_MAX];
+# else
+ char buf[255];
+# endif
+} _Xreaddirparams;
+
+# define _XReaddir(d,p) \
+ ( (_Xos_processLock), \
+ (((p).result = readdir((d))) ? \
+ (memcpy(&((p).dir_entry), (p).result, (p).result->d_reclen), \
+ ((p).result = &(p).dir_entry), 0) : \
+ 0), \
+ (_Xos_processUnlock), \
+ (p).result )
+
+#else
+typedef struct {
+ struct dirent *result;
+ struct dirent dir_entry;
+# ifdef _POSIX_PATH_MAX
+ char buf[_POSIX_PATH_MAX];
+# elif defined(NAME_MAX)
+ char buf[NAME_MAX];
+# else
+ char buf[255];
+# endif
+} _Xreaddirparams;
+
+# if defined(_POSIX_THREAD_SAFE_FUNCTIONS) || defined(__APPLE__)
+/* POSIX final API, returns (int)0 on success. */
+# define _XReaddir(d,p) \
+ (readdir_r((d), &((p).dir_entry), &((p).result)) ? NULL : (p).result)
+# elif defined(_POSIX_REENTRANT_FUNCTIONS)
+/* POSIX draft API, returns (int)0 on success. */
+# define _XReaddir(d,p) \
+ (readdir_r((d),&((p).dir_entry)) ? NULL : &((p).dir_entry))
+# elif defined(SVR4)
+/* Pre-POSIX API, returns non-NULL on success. */
+# define _XReaddir(d,p) (readdir_r((d), &(p).dir_entry))
+# else
+/* We have no idea what is going on. Fake it all using process locks. */
+# define _XReaddir(d,p) \
+ ( (_Xos_processLock), \
+ (((p).result = readdir((d))) ? \
+ (memcpy(&((p).dir_entry), (p).result, (p).result->d_reclen), \
+ ((p).result = &(p).dir_entry), 0) : \
+ 0), \
+ (_Xos_processUnlock), \
+ (p).result )
+# endif
+#endif /* X_INCLUDE_DIRENT_H */
+
+#if defined(X_INCLUDE_DIRENT_H) && !defined(_XOS_INCLUDED_DIRENT_H)
+# define _XOS_INCLUDED_DIRENT_H
+#endif
+
+
+/***** <unistd.h> wrappers *****/
+
+/*
+ * Effective prototypes for <unistd.h> wrappers:
+ *
+ * #define X_INCLUDE_UNISTD_H
+ * #define XOS_USE_..._LOCKING
+ * #include <X11/Xos_r.h>
+ *
+ * typedef ... _Xgetloginparams;
+ * typedef ... _Xttynameparams;
+ *
+ * char *_XGetlogin(_Xgetloginparams);
+ * char *_XTtyname(int, _Xttynameparams);
+ */
+
+#if defined(X_INCLUDE_UNISTD_H) && !defined(_XOS_INCLUDED_UNISTD_H)
+/* <unistd.h> already included by <X11/Xos.h> */
+# if defined(XUSE_MTSAFE_API) || defined(XUSE_MTSAFE_UNISTDAPI)
+# define XOS_USE_MTSAFE_UNISTDAPI 1
+# endif
+#endif
+
+#if !defined(X_INCLUDE_UNISTD_H) || defined(_XOS_INCLUDED_UNISTD_H)
+/* Do nothing. */
+
+#elif !defined(XTHREADS) && !defined(X_FORCE_USE_MTSAFE_API)
+/* Use regular, unsafe API. */
+typedef int _Xgetloginparams; /* dummy */
+typedef int _Xttynameparams; /* dummy */
+# define _XGetlogin(p) getlogin()
+# define _XTtyname(f) ttyname((f))
+
+#elif !defined(XOS_USE_MTSAFE_UNISTDAPI) || defined(XNO_MTSAFE_UNISTDAPI)
+/* Systems with thread support but no _r API. */
+typedef struct {
+ char *result;
+# if defined(MAXLOGNAME)
+ char buf[MAXLOGNAME];
+# elif defined(LOGIN_NAME_MAX)
+ char buf[LOGIN_NAME_MAX];
+# else
+ char buf[64];
+# endif
+} _Xgetloginparams;
+typedef struct {
+ char *result;
+# ifdef TTY_NAME_MAX
+ char buf[TTY_NAME_MAX];
+# elif defined(_POSIX_TTY_NAME_MAX)
+ char buf[_POSIX_TTY_NAME_MAX];
+# elif defined(_POSIX_PATH_MAX)
+ char buf[_POSIX_PATH_MAX];
+# else
+ char buf[256];
+# endif
+} _Xttynameparams;
+
+# define _XGetlogin(p) \
+ ( (_Xos_processLock), \
+ (((p).result = getlogin()) ? \
+ (strncpy((p).buf, (p).result, sizeof((p).buf)), \
+ ((p).buf[sizeof((p).buf)-1] = '\0'), \
+ ((p).result = (p).buf), 0) : 0), \
+ (_Xos_processUnlock), \
+ (p).result )
+#define _XTtyname(f,p) \
+ ( (_Xos_processLock), \
+ (((p).result = ttyname(f)) ? \
+ (strncpy((p).buf, (p).result, sizeof((p).buf)), \
+ ((p).buf[sizeof((p).buf)-1] = '\0'), \
+ ((p).result = (p).buf), 0) : 0), \
+ (_Xos_processUnlock), \
+ (p).result )
+
+#elif defined(_POSIX_THREAD_SAFE_FUNCTIONS) || defined(_POSIX_REENTRANT_FUNCTIONS)
+/* POSIX API.
+ *
+ * extern int getlogin_r(char *, size_t);
+ * extern int ttyname_r(int, char *, size_t);
+ */
+typedef struct {
+# if defined(MAXLOGNAME)
+ char buf[MAXLOGNAME];
+# elif defined(LOGIN_NAME_MAX)
+ char buf[LOGIN_NAME_MAX];
+# else
+ char buf[64];
+# endif
+} _Xgetloginparams;
+typedef struct {
+# ifdef TTY_NAME_MAX
+ char buf[TTY_NAME_MAX];
+# elif defined(_POSIX_TTY_NAME_MAX)
+ char buf[_POSIX_TTY_NAME_MAX];
+# elif defined(_POSIX_PATH_MAX)
+ char buf[_POSIX_PATH_MAX];
+# else
+ char buf[256];
+# endif
+} _Xttynameparams;
+
+# define _XGetlogin(p) (getlogin_r((p).buf, sizeof((p).buf)) ? NULL : (p).buf)
+# define _XTtyname(f,p) \
+ (ttyname_r((f), (p).buf, sizeof((p).buf)) ? NULL : (p).buf)
+
+#else
+/* Pre-POSIX API.
+ *
+ * extern char *getlogin_r(char *, size_t);
+ * extern char *ttyname_r(int, char *, size_t);
+ */
+typedef struct {
+# if defined(MAXLOGNAME)
+ char buf[MAXLOGNAME];
+# elif defined(LOGIN_NAME_MAX)
+ char buf[LOGIN_NAME_MAX];
+# else
+ char buf[64];
+# endif
+} _Xgetloginparams;
+typedef struct {
+# ifdef TTY_NAME_MAX
+ char buf[TTY_NAME_MAX];
+# elif defined(_POSIX_TTY_NAME_MAX)
+ char buf[_POSIX_TTY_NAME_MAX];
+# elif defined(_POSIX_PATH_MAX)
+ char buf[_POSIX_PATH_MAX];
+# else
+ char buf[256];
+# endif
+} _Xttynameparams;
+
+# define _XGetlogin(p) getlogin_r((p).buf, sizeof((p).buf))
+# define _XTtyname(f,p) ttyname_r((f), (p).buf, sizeof((p).buf))
+#endif /* X_INCLUDE_UNISTD_H */
+
+#if defined(X_INCLUDE_UNISTD_H) && !defined(_XOS_INCLUDED_UNISTD_H)
+# define _XOS_INCLUDED_UNISTD_H
+#endif
+
+
+/***** <string.h> wrappers *****/
+
+/*
+ * Effective prototypes for <string.h> wrappers:
+ *
+ * #define X_INCLUDE_STRING_H
+ * #define XOS_USE_..._LOCKING
+ * #include <X11/Xos_r.h>
+ *
+ * typedef ... _Xstrtokparams;
+ *
+ * char *_XStrtok(char *, const char*, _Xstrtokparams);
+ */
+
+#if defined(X_INCLUDE_STRING_H) && !defined(_XOS_INCLUDED_STRING_H)
+/* <string.h> has already been included by <X11/Xos.h> */
+# if defined(XUSE_MTSAFE_API) || defined(XUSE_MTSAFE_STRINGAPI)
+# define XOS_USE_MTSAFE_STRINGAPI 1
+# endif
+#endif
+
+#if !defined(X_INCLUDE_STRING_H) || defined(_XOS_INCLUDED_STRING_H)
+/* Do nothing. */
+
+#elif !defined(XTHREADS) && !defined(X_FORCE_USE_MTSAFE_API)
+/* Use regular, unsafe API. */
+typedef int _Xstrtokparams; /* dummy */
+# define _XStrtok(s1,s2,p) \
+ ( p = 0, (void)p, strtok((s1),(s2)) )
+
+#elif !defined(XOS_USE_MTSAFE_STRINGAPI) || defined(XNO_MTSAFE_STRINGAPI)
+/* Systems with thread support but no _r API. */
+typedef char *_Xstrtokparams;
+# define _XStrtok(s1,s2,p) \
+ ( (_Xos_processLock), \
+ ((p) = strtok((s1),(s2))), \
+ (_Xos_processUnlock), \
+ (p) )
+
+#else
+/* POSIX or pre-POSIX API. */
+typedef char * _Xstrtokparams;
+# define _XStrtok(s1,s2,p) strtok_r((s1),(s2),&(p))
+#endif /* X_INCLUDE_STRING_H */
+
+
+/***** <time.h> wrappers *****/
+
+/*
+ * Effective prototypes for <time.h> wrappers:
+ *
+ * #define X_INCLUDE_TIME_H
+ * #define XOS_USE_..._LOCKING
+ * #include <X11/Xos_r.h>
+ *
+ * typedef ... _Xatimeparams;
+ * typedef ... _Xctimeparams;
+ * typedef ... _Xgtimeparams;
+ * typedef ... _Xltimeparams;
+ *
+ * char *_XAsctime(const struct tm *, _Xatimeparams);
+ * char *_XCtime(const time_t *, _Xctimeparams);
+ * struct tm *_XGmtime(const time_t *, _Xgtimeparams);
+ * struct tm *_XLocaltime(const time_t *, _Xltimeparams);
+ */
+
+#if defined(X_INCLUDE_TIME_H) && !defined(_XOS_INCLUDED_TIME_H)
+# include <time.h>
+# if defined(XUSE_MTSAFE_API) || defined(XUSE_MTSAFE_TIMEAPI)
+# define XOS_USE_MTSAFE_TIMEAPI 1
+# endif
+#endif
+
+#if !defined(X_INCLUDE_TIME_H) || defined(_XOS_INCLUDED_TIME_H)
+/* Do nothing. */
+
+#elif !defined(XTHREADS) && !defined(X_FORCE_USE_MTSAFE_API)
+/* Use regular, unsafe API. */
+typedef int _Xatimeparams; /* dummy */
+# define _XAsctime(t,p) asctime((t))
+typedef int _Xctimeparams; /* dummy */
+# define _XCtime(t,p) ctime((t))
+typedef int _Xgtimeparams; /* dummy */
+# define _XGmtime(t,p) gmtime((t))
+typedef int _Xltimeparams; /* dummy */
+# define _XLocaltime(t,p) localtime((t))
+
+#elif !defined(XOS_USE_MTSAFE_TIMEAPI) || defined(XNO_MTSAFE_TIMEAPI)
+/* Systems with thread support but no _r API. */
+typedef struct {
+# ifdef TIMELEN
+ char buf[TIMELEN];
+# else
+ char buf[26];
+# endif
+ char *result;
+} _Xctimeparams, _Xatimeparams;
+typedef struct {
+ struct tm buf;
+ struct tm *result;
+} _Xgtimeparams, _Xltimeparams;
+# define _XAsctime(t,p) \
+ ( (_Xos_processLock), \
+ (((p).result = asctime((t))) ? \
+ (strncpy((p).buf, (p).result, sizeof((p).buf)), (p).result = &(p).buf) : \
+ 0), \
+ (_Xos_processUnlock), \
+ (p).result )
+# define _XCtime(t,p) \
+ ( (_Xos_processLock), \
+ (((p).result = ctime((t))) ? \
+ (strncpy((p).buf, (p).result, sizeof((p).buf)), (p).result = &(p).buf) : \
+ 0), \
+ (_Xos_processUnlock), \
+ (p).result )
+# define _XGmtime(t,p) \
+ ( (_Xos_processLock), \
+ (((p).result = gmtime(t)) ? \
+ (memcpy(&(p).buf, (p).result, sizeof((p).buf)), (p).result = &(p).buf) : \
+ 0), \
+ (_Xos_processUnlock), \
+ (p).result )
+# define _XLocaltime(t,p) \
+ ( (_Xos_processLock), \
+ (((p).result = localtime(t)) ? \
+ (memcpy(&(p).buf, (p).result, sizeof((p).buf)), (p).result = &(p).buf) : \
+ 0), \
+ (_Xos_processUnlock), \
+ (p).result )
+
+#elif !defined(_POSIX_THREAD_SAFE_FUNCTIONS) && defined(hpV4)
+/* Returns (int)0 on success.
+ *
+ * extern int asctime_r(const struct tm *timeptr, char *buffer, int buflen);
+ * extern int ctime_r(const time_t *timer, char *buffer, int buflen);
+ * extern int gmtime_r(const time_t *timer, struct tm *result);
+ * extern int localtime_r(const time_t *timer, struct tm *result);
+ */
+# ifdef TIMELEN
+typedef char _Xatimeparams[TIMELEN];
+typedef char _Xctimeparams[TIMELEN];
+# else
+typedef char _Xatimeparams[26];
+typedef char _Xctimeparams[26];
+# endif
+typedef struct tm _Xgtimeparams;
+typedef struct tm _Xltimeparams;
+# define _XAsctime(t,p) (asctime_r((t),(p),sizeof((p))) ? NULL : (p))
+# define _XCtime(t,p) (ctime_r((t),(p),sizeof((p))) ? NULL : (p))
+# define _XGmtime(t,p) (gmtime_r((t),&(p)) ? NULL : &(p))
+# define _XLocaltime(t,p) (localtime_r((t),&(p)) ? NULL : &(p))
+
+#elif !defined(_POSIX_THREAD_SAFE_FUNCTIONS) && defined(__sun)
+/* Returns NULL on failure. Solaris 2.5
+ *
+ * extern char *asctime_r(const struct tm *tm,char *buf, int buflen);
+ * extern char *ctime_r(const time_t *clock, char *buf, int buflen);
+ * extern struct tm *gmtime_r(const time_t *clock, struct tm *res);
+ * extern struct tm *localtime_r(const time_t *clock, struct tm *res);
+ */
+# ifdef TIMELEN
+typedef char _Xatimeparams[TIMELEN];
+typedef char _Xctimeparams[TIMELEN];
+# else
+typedef char _Xatimeparams[26];
+typedef char _Xctimeparams[26];
+# endif
+typedef struct tm _Xgtimeparams;
+typedef struct tm _Xltimeparams;
+# define _XAsctime(t,p) asctime_r((t),(p),sizeof((p)))
+# define _XCtime(t,p) ctime_r((t),(p),sizeof((p)))
+# define _XGmtime(t,p) gmtime_r((t),&(p))
+# define _XLocaltime(t,p) localtime_r((t),&(p))
+
+#else /* defined(_POSIX_THREAD_SAFE_FUNCTIONS) */
+/* POSIX final API.
+ * extern char *asctime_r(const struct tm *timeptr, char *buffer);
+ * extern char *ctime_r(const time_t *timer, char *buffer);
+ * extern struct tm *gmtime_r(const time_t *timer, struct tm *result);
+ * extern struct tm *localtime_r(const time_t *timer, struct tm *result);
+ */
+# ifdef TIMELEN
+typedef char _Xatimeparams[TIMELEN];
+typedef char _Xctimeparams[TIMELEN];
+# else
+typedef char _Xatimeparams[26];
+typedef char _Xctimeparams[26];
+# endif
+typedef struct tm _Xgtimeparams;
+typedef struct tm _Xltimeparams;
+# define _XAsctime(t,p) asctime_r((t),(p))
+# define _XCtime(t,p) ctime_r((t),(p))
+# define _XGmtime(t,p) gmtime_r((t),&(p))
+# define _XLocaltime(t,p) localtime_r((t),&(p))
+#endif /* X_INCLUDE_TIME_H */
+
+#if defined(X_INCLUDE_TIME_H) && !defined(_XOS_INCLUDED_TIME_H)
+# define _XOS_INCLUDED_TIME_H
+#endif
+
+
+/***** <grp.h> wrappers *****/
+
+/*
+ * Effective prototypes for <grp.h> wrappers:
+ *
+ * NOTE: On systems lacking appropriate _r functions Getgrgid() and
+ * Getgrnam() do NOT copy the list of group members!
+ *
+ * Remember that fgetgrent(), setgrent(), getgrent(), and endgrent()
+ * are not included in POSIX.
+ *
+ * #define X_INCLUDE_GRP_H
+ * #define XOS_USE_..._LOCKING
+ * #include <X11/Xos_r.h>
+ *
+ * typedef ... _Xgetgrparams;
+ *
+ * struct group *_XGetgrgid(gid_t, _Xgetgrparams);
+ * struct group *_XGetgrnam(const char *, _Xgetgrparams);
+ */
+
+#if defined(X_INCLUDE_GRP_H) && !defined(_XOS_INCLUDED_GRP_H)
+# include <grp.h>
+# if defined(XUSE_MTSAFE_API) || defined(XUSE_MTSAFE_GRPAPI)
+# define XOS_USE_MTSAFE_GRPAPI 1
+# endif
+#endif
+
+#if !defined(X_INCLUDE_GRP_H) || defined(_XOS_INCLUDED_GRP_H)
+/* Do nothing. */
+
+#elif !defined(XTHREADS) && !defined(X_FORCE_USE_MTSAFE_API)
+/* Use regular, unsafe API. */
+typedef int _Xgetgrparams; /* dummy */
+#define _XGetgrgid(g,p) getgrgid((g))
+#define _XGetgrnam(n,p) getgrnam((n))
+
+#elif !defined(XOS_USE_MTSAFE_GRPAPI) || defined(XNO_MTSAFE_GRPAPI)
+/* Systems with thread support but no _r API. UnixWare 2.0. */
+typedef struct {
+ struct group grp;
+ char buf[X_LINE_MAX]; /* Should be sysconf(_SC_GETGR_R_SIZE_MAX)? */
+ struct group *pgrp;
+ size_t len;
+} _Xgetgrparams;
+#ifdef SVR4
+/* Copy the gr_passwd field too. */
+# define _Xgrp_copyGroup(p) \
+ ( memcpy(&(p).grp, (p).pgrp, sizeof(struct group)), \
+ ((p).grp.gr_name = (p).buf), \
+ ((p).len = strlen((p).pgrp->gr_name)), \
+ strcpy((p).grp.gr_name, (p).pgrp->gr_name), \
+ ((p).grp.gr_passwd = (p).grp.gr_name + (p).len + 1), \
+ ((p).pgrp = &(p).grp), \
+ 0 )
+#else
+# define _Xgrp_copyGroup(p) \
+ ( memcpy(&(p).grp, (p).pgrp, sizeof(struct group)), \
+ ((p).grp.gr_name = (p).buf), \
+ strcpy((p).grp.gr_name, (p).pgrp->gr_name), \
+ ((p).pgrp = &(p).grp), \
+ 0 )
+#endif
+#define _XGetgrgid(g,p) \
+ ( (_Xos_processLock), \
+ (((p).pgrp = getgrgid((g))) ? _Xgrp_copyGroup(p) : 0), \
+ (_Xos_processUnlock), \
+ (p).pgrp )
+#define _XGetgrnam(n,p) \
+ ( (_Xos_processLock), \
+ (((p).pgrp = getgrnam((n))) ? _Xgrp_copyGroup(p) : 0), \
+ (_Xos_processUnlock), \
+ (p).pgrp )
+
+#elif !defined(_POSIX_THREAD_SAFE_FUNCTIONS) && defined(__sun)
+/* Non-POSIX API. Solaris.
+ *
+ * extern struct group *getgrgid_r(gid_t, struct group *, char *, int);
+ * extern struct group *getgrnam_r(const char *, struct group *, char *, int);
+ */
+typedef struct {
+ struct group grp;
+ char buf[X_LINE_MAX]; /* Should be sysconf(_SC_GETGR_R_SIZE_MAX)? */
+} _Xgetgrparams;
+#define _XGetgrgid(g,p) getgrgid_r((g), &(p).grp, (p).buf, sizeof((p).buf))
+#define _XGetgrnam(n,p) getgrnam_r((n), &(p).grp, (p).buf, sizeof((p).buf))
+
+#elif !defined(_POSIX_THREAD_SAFE_FUNCTIONS)
+/* Non-POSIX API.
+ * extern int getgrgid_r(gid_t, struct group *, char *, int);
+ * extern int getgrnam_r(const char *, struct group *, char *, int);
+ */
+typedef struct {
+ struct group grp;
+ char buf[X_LINE_MAX]; /* Should be sysconf(_SC_GETGR_R_SIZE_MAX)? */
+} _Xgetgrparams;
+#define _XGetgrgid(g,p) \
+ ((getgrgid_r((g), &(p).grp, (p).buf, sizeof((p).buf)) ? NULL : &(p).grp))
+#define _XGetgrnam(n,p) \
+ ((getgrnam_r((n), &(p).grp, (p).buf, sizeof((p).buf)) ? NULL : &(p).grp))
+
+#else
+/* POSIX final API.
+ *
+ * int getgrgid_r(gid_t, struct group *, char *, size_t, struct group **);
+ * int getgrnam_r(const char *, struct group *, char *, size_t, struct group **);
+ */
+typedef struct {
+ struct group grp;
+ char buf[X_LINE_MAX]; /* Should be sysconf(_SC_GETGR_R_SIZE_MAX)? */
+ struct group *result;
+} _Xgetgrparams;
+
+#define _XGetgrgid(g,p) \
+ ((getgrgid_r((g), &(p).grp, (p).buf, sizeof((p).buf), &(p).result) ? \
+ NULL : (p).result))
+#define _XGetgrnam(n,p) \
+ ((getgrnam_r((n), &(p).grp, (p).buf, sizeof((p).buf), &(p).result) ? \
+ NULL : (p).result))
+#endif
+
+#if defined(X_INCLUDE_GRP_H) && !defined(_XOS_INCLUDED_GRP_H)
+# define _XOS_INCLUDED_GRP_H
+#endif
+
+
+#ifdef __cplusplus
+} /* Close scope of 'extern "C"' declaration which encloses file. */
+#endif
diff --git a/Xosdefs.h b/Xosdefs.h
new file mode 100644
index 0000000..33eaee4
--- /dev/null
+++ b/Xosdefs.h
@@ -0,0 +1,116 @@
+/*
+ * O/S-dependent (mis)feature macro definitions
+ *
+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 _XOSDEFS_H_
+# define _XOSDEFS_H_
+
+/*
+ * X_NOT_POSIX means does not have POSIX header files. Lack of this
+ * symbol does NOT mean that the POSIX environment is the default.
+ * You may still have to define _POSIX_SOURCE to get it.
+ */
+
+
+# ifdef _SCO_DS
+# ifndef __SCO__
+# define __SCO__
+# endif
+# endif
+
+# ifdef __i386__
+# ifdef SYSV
+# if !defined(__SCO__) && \
+ !defined(__UNIXWARE__) && !defined(__sun)
+# if !defined(_POSIX_SOURCE)
+# define X_NOT_POSIX
+# endif
+# endif
+# endif
+# endif
+
+# ifdef __sun
+/* Imake configs define SVR4 on Solaris, but cc & gcc only define __SVR4
+ * This check allows non-Imake configured programs to build correctly.
+ */
+# if defined(__SVR4) && !defined(SVR4)
+# define SVR4 1
+# endif
+# ifdef SVR4
+/* define this to whatever it needs to be */
+# define X_POSIX_C_SOURCE 199300L
+# endif
+# endif
+
+# ifdef WIN32
+# ifndef _POSIX_
+# define X_NOT_POSIX
+# endif
+# endif
+
+
+# ifdef __APPLE__
+# define NULL_NOT_ZERO
+
+/* Defining any of these will sanitize the namespace to JUST want is defined by
+ * that particular standard. If that happens, we don't get some expected
+ * prototypes, typedefs, etc (like fd_mask). We can define _DARWIN_C_SOURCE to
+ * loosen our belts a tad.
+ */
+# if defined(_XOPEN_SOURCE) || defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE)
+# ifndef _DARWIN_C_SOURCE
+# define _DARWIN_C_SOURCE
+# endif
+# endif
+
+# endif
+
+# ifdef __GNU__
+# ifndef PATH_MAX
+# define PATH_MAX 4096
+# endif
+# ifndef MAXPATHLEN
+# define MAXPATHLEN 4096
+# endif
+# endif
+
+# if defined(__SCO__) || defined(__UNIXWARE__)
+# ifndef PATH_MAX
+# define PATH_MAX 1024
+# endif
+# ifndef MAXPATHLEN
+# define MAXPATHLEN 1024
+# endif
+# endif
+
+# if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__) \
+ || defined(__APPLE__) || defined(__DragonFly__)
+# ifndef CSRG_BASED
+# define CSRG_BASED
+# endif
+# endif
+
+#endif /* _XOSDEFS_H_ */
+
diff --git a/Xpoll.h.in b/Xpoll.h.in
new file mode 100644
index 0000000..8275658
--- /dev/null
+++ b/Xpoll.h.in
@@ -0,0 +1,218 @@
+/*
+
+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.
+
+*/
+
+/*
+ * Copyright © 2005 Daniel Stone
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, 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 Daniel Stone not be used in advertising
+ * or publicity pertaining to distribution of the software without specific,
+ * written prior permission. Daniel Stone makes no representations about the
+ * suitability of this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ *
+ * DANIEL STONE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ * DANIEL STONE 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 _XPOLL_H_
+#define _XPOLL_H_
+
+#ifndef WIN32
+
+#ifndef USE_POLL
+
+#include <X11/Xos.h>
+
+#include <sys/select.h> /* Get the FD_* macros. */
+
+#include <X11/Xmd.h>
+
+#ifdef CSRG_BASED
+#include <sys/param.h>
+# if BSD < 199103
+typedef long fd_mask;
+# endif
+#endif
+
+#define XFD_SETSIZE 256
+
+#ifndef FD_SETSIZE
+#define FD_SETSIZE XFD_SETSIZE
+#endif
+
+#ifndef NBBY
+#define NBBY 8 /* number of bits in a byte */
+#endif
+
+#ifndef NFDBITS
+#define NFDBITS (sizeof(fd_mask) * NBBY) /* bits per mask */
+#endif
+
+#ifndef howmany
+#define howmany(x,y) (((x)+((y)-1))/(y))
+#endif
+
+#if defined(BSD) && BSD < 198911
+typedef struct fd_set {
+ fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)];
+} fd_set;
+#endif
+
+# define Select(n,r,w,e,t) select(n,(fd_set*)r,(fd_set*)w,(fd_set*)e,(struct timeval*)t)
+
+#define __X_FDS_BITS @USE_FDS_BITS@
+
+#ifndef __FDS_BITS
+# define __FDS_BITS(p) ((p)->__X_FDS_BITS)
+#endif
+
+#define __XFDS_BITS(p, n) (__FDS_BITS(p))[n]
+
+#ifndef FD_SET
+#define FD_SET(n, p) (__XFDS_BITS(p, ((n)/NFDBITS)) |= ((fd_mask)1 << ((n) % NFDBITS)))
+#endif
+#ifndef FD_CLR
+#define FD_CLR(n, p) (__XFDS_BITS((p), ((n)/NFDBITS)) &= ~((fd_mask)1 << ((n) % NFDBITS)))
+#endif
+#ifndef FD_ISSET
+#define FD_ISSET(n, p) ((__XFDS_BITS((p), ((n)/NFDBITS))) & ((fd_mask)1 << ((n) % NFDBITS)))
+#endif
+#ifndef FD_ZERO
+#define FD_ZERO(p) bzero((char *)(p), sizeof(*(p)))
+#endif
+
+/*
+ * The howmany(FD_SETSIZE, NFDBITS) computes the number of elements in the
+ * array. before accessing an element in the array we check it exists.
+ * If it does not exist then the compiler discards the code to access it.
+ */
+#define XFD_ANYSET(p) \
+ ((howmany(FD_SETSIZE, NFDBITS) > 0 && (__XFDS_BITS(p, 0))) || \
+ (howmany(FD_SETSIZE, NFDBITS) > 1 && (__XFDS_BITS(p, 1))) || \
+ (howmany(FD_SETSIZE, NFDBITS) > 2 && (__XFDS_BITS(p, 2))) || \
+ (howmany(FD_SETSIZE, NFDBITS) > 3 && (__XFDS_BITS(p, 3))) || \
+ (howmany(FD_SETSIZE, NFDBITS) > 4 && (__XFDS_BITS(p, 4))) || \
+ (howmany(FD_SETSIZE, NFDBITS) > 5 && (__XFDS_BITS(p, 5))) || \
+ (howmany(FD_SETSIZE, NFDBITS) > 6 && (__XFDS_BITS(p, 6))) || \
+ (howmany(FD_SETSIZE, NFDBITS) > 7 && (__XFDS_BITS(p, 7))))
+
+#define XFD_COPYSET(src,dst) { \
+ int __i__; \
+ for (__i__ = 0; __i__ < howmany(FD_SETSIZE, NFDBITS); __i__++) \
+ __XFDS_BITS((dst), __i__) = __XFDS_BITS((src), __i__); \
+ }
+#define XFD_ANDSET(dst,b1,b2) { \
+ int __i__; \
+ for (__i__ = 0; __i__ < howmany(FD_SETSIZE, NFDBITS); __i__++) \
+ __XFDS_BITS((dst), __i__) = ((__XFDS_BITS((b1), __i__)) & (__XFDS_BITS((b2), __i__))); \
+ }
+#define XFD_ORSET(dst,b1,b2) { \
+ int __i__; \
+ for (__i__ = 0; __i__ < howmany(FD_SETSIZE, NFDBITS); __i__++) \
+ __XFDS_BITS((dst), __i__) = ((__XFDS_BITS((b1), __i__)) | (__XFDS_BITS((b2), __i__))); \
+ }
+#define XFD_UNSET(dst,b1) { \
+ int __i__; \
+ for (__i__ = 0; __i__ < howmany(FD_SETSIZE, NFDBITS); __i__++) \
+ __XFDS_BITS((dst), __i__) &= ~(__XFDS_BITS((b1), __i__)); \
+ }
+
+#else /* USE_POLL */
+#include <sys/poll.h>
+#endif /* USE_POLL */
+
+#else /* WIN32 */
+
+#define XFD_SETSIZE 256
+#ifndef FD_SETSIZE
+#define FD_SETSIZE XFD_SETSIZE
+#endif
+#include <X11/Xwinsock.h>
+
+#define Select(n,r,w,e,t) select(0,(fd_set*)r,(fd_set*)w,(fd_set*)e,(struct timeval*)t)
+
+#define XFD_SETCOUNT(p) (((fd_set FAR *)(p))->fd_count)
+#define XFD_FD(p,i) (((fd_set FAR *)(p))->fd_array[i])
+#define XFD_ANYSET(p) XFD_SETCOUNT(p)
+
+#define XFD_COPYSET(src,dst) { \
+ u_int __i; \
+ FD_ZERO(dst); \
+ for (__i = 0; __i < XFD_SETCOUNT(src) ; __i++) { \
+ XFD_FD(dst,__i) = XFD_FD(src,__i); \
+ } \
+ XFD_SETCOUNT(dst) = XFD_SETCOUNT(src); \
+}
+
+#define XFD_ANDSET(dst,b1,b2) { \
+ u_int __i; \
+ FD_ZERO(dst); \
+ for (__i = 0; __i < XFD_SETCOUNT(b1) ; __i++) { \
+ if (FD_ISSET(XFD_FD(b1,__i), b2)) \
+ FD_SET(XFD_FD(b1,__i), dst); \
+ } \
+}
+
+#define XFD_ORSET(dst,b1,b2) { \
+ u_int __i; \
+ if (dst != b1) XFD_COPYSET(b1,dst); \
+ for (__i = 0; __i < XFD_SETCOUNT(b2) ; __i++) { \
+ if (!FD_ISSET(XFD_FD(b2,__i), dst)) \
+ FD_SET(XFD_FD(b2,__i), dst); \
+ } \
+}
+
+/* this one is really sub-optimal */
+#define XFD_UNSET(dst,b1) { \
+ u_int __i; \
+ for (__i = 0; __i < XFD_SETCOUNT(b1) ; __i++) { \
+ FD_CLR(XFD_FD(b1,__i), dst); \
+ } \
+}
+
+/* we have to pay the price of having an array here, unlike with bitmasks
+ calling twice FD_SET with the same fd is not transparent, so be careful */
+#undef FD_SET
+#define FD_SET(fd,set) do { \
+ if (XFD_SETCOUNT(set) < FD_SETSIZE && !FD_ISSET(fd,set)) \
+ XFD_FD(set,XFD_SETCOUNT(set)++)=(fd); \
+} while(0)
+
+#define getdtablesize() FD_SETSIZE
+
+#endif /* WIN32 */
+
+#endif /* _XPOLL_H_ */
diff --git a/Xproto.h b/Xproto.h
new file mode 100644
index 0000000..495d441
--- /dev/null
+++ b/Xproto.h
@@ -0,0 +1,2157 @@
+/* Definitions for the X window system used by server and c bindings */
+
+/*
+ * This packet-construction scheme makes the following assumptions:
+ *
+ * 1. The compiler is able
+ * to generate code which addresses one- and two-byte quantities.
+ * In the worst case, this would be done with bit-fields. If bit-fields
+ * are used it may be necessary to reorder the request fields in this file,
+ * depending on the order in which the machine assigns bit fields to
+ * machine words. There may also be a problem with sign extension,
+ * as K+R specify that bitfields are always unsigned.
+ *
+ * 2. 2- and 4-byte fields in packet structures must be ordered by hand
+ * such that they are naturally-aligned, so that no compiler will ever
+ * insert padding bytes.
+ *
+ * 3. All packets are hand-padded to a multiple of 4 bytes, for
+ * the same reason.
+ */
+
+#ifndef XPROTO_H
+#define XPROTO_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 of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall not be
+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.
+
+******************************************************************/
+
+#include <X11/Xmd.h>
+#include <X11/Xprotostr.h>
+
+/*
+ * Define constants for the sizes of the network packets. The sz_ prefix is
+ * used instead of something more descriptive so that the symbols are no more
+ * than 32 characters in length (which causes problems for some compilers).
+ */
+#define sz_xSegment 8
+#define sz_xPoint 4
+#define sz_xRectangle 8
+#define sz_xArc 12
+#define sz_xConnClientPrefix 12
+#define sz_xConnSetupPrefix 8
+#define sz_xConnSetup 32
+#define sz_xPixmapFormat 8
+#define sz_xDepth 8
+#define sz_xVisualType 24
+#define sz_xWindowRoot 40
+#define sz_xTimecoord 8
+#define sz_xHostEntry 4
+#define sz_xCharInfo 12
+#define sz_xFontProp 8
+#define sz_xTextElt 2
+#define sz_xColorItem 12
+#define sz_xrgb 8
+#define sz_xGenericReply 32
+#define sz_xGetWindowAttributesReply 44
+#define sz_xGetGeometryReply 32
+#define sz_xQueryTreeReply 32
+#define sz_xInternAtomReply 32
+#define sz_xGetAtomNameReply 32
+#define sz_xGetPropertyReply 32
+#define sz_xListPropertiesReply 32
+#define sz_xGetSelectionOwnerReply 32
+#define sz_xGrabPointerReply 32
+#define sz_xQueryPointerReply 32
+#define sz_xGetMotionEventsReply 32
+#define sz_xTranslateCoordsReply 32
+#define sz_xGetInputFocusReply 32
+#define sz_xQueryKeymapReply 40
+#define sz_xQueryFontReply 60
+#define sz_xQueryTextExtentsReply 32
+#define sz_xListFontsReply 32
+#define sz_xGetFontPathReply 32
+#define sz_xGetImageReply 32
+#define sz_xListInstalledColormapsReply 32
+#define sz_xAllocColorReply 32
+#define sz_xAllocNamedColorReply 32
+#define sz_xAllocColorCellsReply 32
+#define sz_xAllocColorPlanesReply 32
+#define sz_xQueryColorsReply 32
+#define sz_xLookupColorReply 32
+#define sz_xQueryBestSizeReply 32
+#define sz_xQueryExtensionReply 32
+#define sz_xListExtensionsReply 32
+#define sz_xSetMappingReply 32
+#define sz_xGetKeyboardControlReply 52
+#define sz_xGetPointerControlReply 32
+#define sz_xGetScreenSaverReply 32
+#define sz_xListHostsReply 32
+#define sz_xSetModifierMappingReply 32
+#define sz_xError 32
+#define sz_xEvent 32
+#define sz_xKeymapEvent 32
+#define sz_xReq 4
+#define sz_xResourceReq 8
+#define sz_xCreateWindowReq 32
+#define sz_xChangeWindowAttributesReq 12
+#define sz_xChangeSaveSetReq 8
+#define sz_xReparentWindowReq 16
+#define sz_xConfigureWindowReq 12
+#define sz_xCirculateWindowReq 8
+#define sz_xInternAtomReq 8
+#define sz_xChangePropertyReq 24
+#define sz_xDeletePropertyReq 12
+#define sz_xGetPropertyReq 24
+#define sz_xSetSelectionOwnerReq 16
+#define sz_xConvertSelectionReq 24
+#define sz_xSendEventReq 44
+#define sz_xGrabPointerReq 24
+#define sz_xGrabButtonReq 24
+#define sz_xUngrabButtonReq 12
+#define sz_xChangeActivePointerGrabReq 16
+#define sz_xGrabKeyboardReq 16
+#define sz_xGrabKeyReq 16
+#define sz_xUngrabKeyReq 12
+#define sz_xAllowEventsReq 8
+#define sz_xGetMotionEventsReq 16
+#define sz_xTranslateCoordsReq 16
+#define sz_xWarpPointerReq 24
+#define sz_xSetInputFocusReq 12
+#define sz_xOpenFontReq 12
+#define sz_xQueryTextExtentsReq 8
+#define sz_xListFontsReq 8
+#define sz_xSetFontPathReq 8
+#define sz_xCreatePixmapReq 16
+#define sz_xCreateGCReq 16
+#define sz_xChangeGCReq 12
+#define sz_xCopyGCReq 16
+#define sz_xSetDashesReq 12
+#define sz_xSetClipRectanglesReq 12
+#define sz_xCopyAreaReq 28
+#define sz_xCopyPlaneReq 32
+#define sz_xPolyPointReq 12
+#define sz_xPolySegmentReq 12
+#define sz_xFillPolyReq 16
+#define sz_xPutImageReq 24
+#define sz_xGetImageReq 20
+#define sz_xPolyTextReq 16
+#define sz_xImageTextReq 16
+#define sz_xCreateColormapReq 16
+#define sz_xCopyColormapAndFreeReq 12
+#define sz_xAllocColorReq 16
+#define sz_xAllocNamedColorReq 12
+#define sz_xAllocColorCellsReq 12
+#define sz_xAllocColorPlanesReq 16
+#define sz_xFreeColorsReq 12
+#define sz_xStoreColorsReq 8
+#define sz_xStoreNamedColorReq 16
+#define sz_xQueryColorsReq 8
+#define sz_xLookupColorReq 12
+#define sz_xCreateCursorReq 32
+#define sz_xCreateGlyphCursorReq 32
+#define sz_xRecolorCursorReq 20
+#define sz_xQueryBestSizeReq 12
+#define sz_xQueryExtensionReq 8
+#define sz_xChangeKeyboardControlReq 8
+#define sz_xBellReq 4
+#define sz_xChangePointerControlReq 12
+#define sz_xSetScreenSaverReq 12
+#define sz_xChangeHostsReq 8
+#define sz_xListHostsReq 4
+#define sz_xChangeModeReq 4
+#define sz_xRotatePropertiesReq 12
+#define sz_xReply 32
+#define sz_xGrabKeyboardReply 32
+#define sz_xListFontsWithInfoReply 60
+#define sz_xSetPointerMappingReply 32
+#define sz_xGetKeyboardMappingReply 32
+#define sz_xGetPointerMappingReply 32
+#define sz_xGetModifierMappingReply 32
+#define sz_xListFontsWithInfoReq 8
+#define sz_xPolyLineReq 12
+#define sz_xPolyArcReq 12
+#define sz_xPolyRectangleReq 12
+#define sz_xPolyFillRectangleReq 12
+#define sz_xPolyFillArcReq 12
+#define sz_xPolyText8Req 16
+#define sz_xPolyText16Req 16
+#define sz_xImageText8Req 16
+#define sz_xImageText16Req 16
+#define sz_xSetPointerMappingReq 4
+#define sz_xForceScreenSaverReq 4
+#define sz_xSetCloseDownModeReq 4
+#define sz_xClearAreaReq 16
+#define sz_xSetAccessControlReq 4
+#define sz_xGetKeyboardMappingReq 8
+#define sz_xSetModifierMappingReq 4
+#define sz_xPropIconSize 24
+#define sz_xChangeKeyboardMappingReq 8
+
+
+/* For the purpose of the structure definitions in this file,
+we must redefine the following types in terms of Xmd.h's types, which may
+include bit fields. All of these are #undef'd at the end of this file,
+restoring the definitions in X.h. */
+
+#define Window CARD32
+#define Drawable CARD32
+#define Font CARD32
+#define Pixmap CARD32
+#define Cursor CARD32
+#define Colormap CARD32
+#define GContext CARD32
+#define Atom CARD32
+#define VisualID CARD32
+#define Time CARD32
+#define KeyCode CARD8
+#define KeySym CARD32
+
+#define X_TCP_PORT 6000 /* add display number */
+
+#define xTrue 1
+#define xFalse 0
+
+
+typedef CARD16 KeyButMask;
+
+/*****************
+ connection setup structure. This is followed by
+ numRoots xWindowRoot structs.
+*****************/
+
+typedef struct {
+ CARD8 byteOrder;
+ BYTE pad;
+ CARD16 majorVersion B16, minorVersion B16;
+ CARD16 nbytesAuthProto B16; /* Authorization protocol */
+ CARD16 nbytesAuthString B16; /* Authorization string */
+ CARD16 pad2 B16;
+} xConnClientPrefix;
+
+typedef struct {
+ CARD8 success;
+ BYTE lengthReason; /*num bytes in string following if failure */
+ CARD16 majorVersion B16,
+ minorVersion B16;
+ CARD16 length B16; /* 1/4 additional bytes in setup info */
+} xConnSetupPrefix;
+
+
+typedef struct {
+ CARD32 release B32;
+ CARD32 ridBase B32,
+ ridMask B32;
+ CARD32 motionBufferSize B32;
+ CARD16 nbytesVendor B16; /* number of bytes in vendor string */
+ CARD16 maxRequestSize B16;
+ CARD8 numRoots; /* number of roots structs to follow */
+ CARD8 numFormats; /* number of pixmap formats */
+ CARD8 imageByteOrder; /* LSBFirst, MSBFirst */
+ CARD8 bitmapBitOrder; /* LeastSignificant, MostSign...*/
+ CARD8 bitmapScanlineUnit, /* 8, 16, 32 */
+ bitmapScanlinePad; /* 8, 16, 32 */
+ KeyCode minKeyCode, maxKeyCode;
+ CARD32 pad2 B32;
+} xConnSetup;
+
+typedef struct {
+ CARD8 depth;
+ CARD8 bitsPerPixel;
+ CARD8 scanLinePad;
+ CARD8 pad1;
+ CARD32 pad2 B32;
+} xPixmapFormat;
+
+/* window root */
+
+typedef struct {
+ CARD8 depth;
+ CARD8 pad1;
+ CARD16 nVisuals B16; /* number of xVisualType structures following */
+ CARD32 pad2 B32;
+ } xDepth;
+
+typedef struct {
+ VisualID visualID B32;
+#if defined(__cplusplus) || defined(c_plusplus)
+ CARD8 c_class;
+#else
+ CARD8 class;
+#endif
+ CARD8 bitsPerRGB;
+ CARD16 colormapEntries B16;
+ CARD32 redMask B32, greenMask B32, blueMask B32;
+ CARD32 pad B32;
+ } xVisualType;
+
+typedef struct {
+ Window windowId B32;
+ Colormap defaultColormap B32;
+ CARD32 whitePixel B32, blackPixel B32;
+ CARD32 currentInputMask B32;
+ CARD16 pixWidth B16, pixHeight B16;
+ CARD16 mmWidth B16, mmHeight B16;
+ CARD16 minInstalledMaps B16, maxInstalledMaps B16;
+ VisualID rootVisualID B32;
+ CARD8 backingStore;
+ BOOL saveUnders;
+ CARD8 rootDepth;
+ CARD8 nDepths; /* number of xDepth structures following */
+} xWindowRoot;
+
+
+/*****************************************************************
+ * Structure Defns
+ * Structures needed for replies
+ *****************************************************************/
+
+/* Used in GetMotionEvents */
+
+typedef struct {
+ CARD32 time B32;
+ INT16 x B16, y B16;
+} xTimecoord;
+
+typedef struct {
+ CARD8 family;
+ BYTE pad;
+ CARD16 length B16;
+} xHostEntry;
+
+typedef struct {
+ INT16 leftSideBearing B16,
+ rightSideBearing B16,
+ characterWidth B16,
+ ascent B16,
+ descent B16;
+ CARD16 attributes B16;
+} xCharInfo;
+
+typedef struct {
+ Atom name B32;
+ CARD32 value B32;
+} xFontProp;
+
+/*
+ * non-aligned big-endian font ID follows this struct
+ */
+typedef struct { /* followed by string */
+ CARD8 len; /* number of *characters* in string, or FontChange (255)
+ for font change, or 0 if just delta given */
+ INT8 delta;
+} xTextElt;
+
+
+typedef struct {
+ CARD32 pixel B32;
+ CARD16 red B16, green B16, blue B16;
+ CARD8 flags; /* DoRed, DoGreen, DoBlue booleans */
+ CARD8 pad;
+} xColorItem;
+
+
+typedef struct {
+ CARD16 red B16, green B16, blue B16, pad B16;
+} xrgb;
+
+typedef CARD8 KEYCODE;
+
+
+/*****************
+ * XRep:
+ * meant to be 32 byte quantity
+ *****************/
+
+/* GenericReply is the common format of all replies. The "data" items
+ are specific to each individual reply type. */
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE data1; /* depends on reply type */
+ CARD16 sequenceNumber B16; /* of last request received by server */
+ CARD32 length B32; /* 4 byte quantities beyond size of GenericReply */
+ CARD32 data00 B32;
+ CARD32 data01 B32;
+ CARD32 data02 B32;
+ CARD32 data03 B32;
+ CARD32 data04 B32;
+ CARD32 data05 B32;
+ } xGenericReply;
+
+/* Individual reply formats. */
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ CARD8 backingStore;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* NOT 0; this is an extra-large reply */
+ VisualID visualID B32;
+#if defined(__cplusplus) || defined(c_plusplus)
+ CARD16 c_class B16;
+#else
+ CARD16 class B16;
+#endif
+ CARD8 bitGravity;
+ CARD8 winGravity;
+ CARD32 backingBitPlanes B32;
+ CARD32 backingPixel B32;
+ BOOL saveUnder;
+ BOOL mapInstalled;
+ CARD8 mapState;
+ BOOL override;
+ Colormap colormap B32;
+ CARD32 allEventMasks B32;
+ CARD32 yourEventMask B32;
+ CARD16 doNotPropagateMask B16;
+ CARD16 pad B16;
+ } xGetWindowAttributesReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ CARD8 depth;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* 0 */
+ Window root B32;
+ INT16 x B16, y B16;
+ CARD16 width B16, height B16;
+ CARD16 borderWidth B16;
+ CARD16 pad1 B16;
+ CARD32 pad2 B32;
+ CARD32 pad3 B32;
+ } xGetGeometryReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ Window root B32, parent B32;
+ CARD16 nChildren B16;
+ CARD16 pad2 B16;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ } xQueryTreeReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* 0 */
+ Atom atom B32;
+ CARD32 pad2 B32;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ } xInternAtomReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* of additional bytes */
+ CARD16 nameLength B16; /* # of characters in name */
+ CARD16 pad2 B16;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ CARD32 pad7 B32;
+ } xGetAtomNameReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ CARD8 format;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* of additional bytes */
+ Atom propertyType B32;
+ CARD32 bytesAfter B32;
+ CARD32 nItems B32; /* # of 8, 16, or 32-bit entities in reply */
+ CARD32 pad1 B32;
+ CARD32 pad2 B32;
+ CARD32 pad3 B32;
+ } xGetPropertyReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD16 nProperties B16;
+ CARD16 pad2 B16;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ CARD32 pad7 B32;
+ } xListPropertiesReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* 0 */
+ Window owner B32;
+ CARD32 pad2 B32;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ } xGetSelectionOwnerReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE status;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* 0 */
+ CARD32 pad1 B32;
+ CARD32 pad2 B32;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ } xGrabPointerReply;
+
+typedef xGrabPointerReply xGrabKeyboardReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BOOL sameScreen;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* 0 */
+ Window root B32, child B32;
+ INT16 rootX B16, rootY B16, winX B16, winY B16;
+ CARD16 mask B16;
+ CARD16 pad1 B16;
+ CARD32 pad B32;
+ } xQueryPointerReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD32 nEvents B32;
+ CARD32 pad2 B32;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ } xGetMotionEventsReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BOOL sameScreen;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* 0 */
+ Window child B32;
+ INT16 dstX B16, dstY B16;
+ CARD32 pad2 B32;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ } xTranslateCoordsReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ CARD8 revertTo;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* 0 */
+ Window focus B32;
+ CARD32 pad1 B32;
+ CARD32 pad2 B32;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ } xGetInputFocusReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* 2, NOT 0; this is an extra-large reply */
+ BYTE map[32];
+ } xQueryKeymapReply;
+
+/* Warning: this MUST match (up to component renaming) xListFontsWithInfoReply */
+typedef struct _xQueryFontReply {
+ BYTE type; /* X_Reply */
+ BYTE pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* definitely > 0, even if "nCharInfos" is 0 */
+ xCharInfo minBounds;
+#ifndef WORD64
+ CARD32 walign1 B32;
+#endif
+ xCharInfo maxBounds;
+#ifndef WORD64
+ CARD32 walign2 B32;
+#endif
+ CARD16 minCharOrByte2 B16, maxCharOrByte2 B16;
+ CARD16 defaultChar B16;
+ CARD16 nFontProps B16; /* followed by this many xFontProp structures */
+ CARD8 drawDirection;
+ CARD8 minByte1, maxByte1;
+ BOOL allCharsExist;
+ INT16 fontAscent B16, fontDescent B16;
+ CARD32 nCharInfos B32; /* followed by this many xCharInfo structures */
+} xQueryFontReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ CARD8 drawDirection;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* 0 */
+ INT16 fontAscent B16, fontDescent B16;
+ INT16 overallAscent B16, overallDescent B16;
+ INT32 overallWidth B32, overallLeft B32, overallRight B32;
+ CARD32 pad B32;
+ } xQueryTextExtentsReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD16 nFonts B16;
+ CARD16 pad2 B16;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ CARD32 pad7 B32;
+ } xListFontsReply;
+
+/* Warning: this MUST match (up to component renaming) xQueryFontReply */
+typedef struct {
+ BYTE type; /* X_Reply */
+ CARD8 nameLength; /* 0 indicates end-of-reply-sequence */
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* definitely > 0, even if "nameLength" is 0 */
+ xCharInfo minBounds;
+#ifndef WORD64
+ CARD32 walign1 B32;
+#endif
+ xCharInfo maxBounds;
+#ifndef WORD64
+ CARD32 walign2 B32;
+#endif
+ CARD16 minCharOrByte2 B16, maxCharOrByte2 B16;
+ CARD16 defaultChar B16;
+ CARD16 nFontProps B16; /* followed by this many xFontProp structures */
+ CARD8 drawDirection;
+ CARD8 minByte1, maxByte1;
+ BOOL allCharsExist;
+ INT16 fontAscent B16, fontDescent B16;
+ CARD32 nReplies B32; /* hint as to how many more replies might be coming */
+} xListFontsWithInfoReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD16 nPaths B16;
+ CARD16 pad2 B16;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ CARD32 pad7 B32;
+ } xGetFontPathReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ CARD8 depth;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ VisualID visual B32;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ CARD32 pad7 B32;
+ } xGetImageReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD16 nColormaps B16;
+ CARD16 pad2 B16;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ CARD32 pad7 B32;
+ } xListInstalledColormapsReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* 0 */
+ CARD16 red B16, green B16, blue B16;
+ CARD16 pad2 B16;
+ CARD32 pixel B32;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ } xAllocColorReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* 0 */
+ CARD32 pixel B32;
+ CARD16 exactRed B16, exactGreen B16, exactBlue B16;
+ CARD16 screenRed B16, screenGreen B16, screenBlue B16;
+ CARD32 pad2 B32;
+ CARD32 pad3 B32;
+ } xAllocNamedColorReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD16 nPixels B16, nMasks B16;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ CARD32 pad7 B32;
+ } xAllocColorCellsReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD16 nPixels B16;
+ CARD16 pad2 B16;
+ CARD32 redMask B32, greenMask B32, blueMask B32;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ } xAllocColorPlanesReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD16 nColors B16;
+ CARD16 pad2 B16;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ CARD32 pad7 B32;
+ } xQueryColorsReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* 0 */
+ CARD16 exactRed B16, exactGreen B16, exactBlue B16;
+ CARD16 screenRed B16, screenGreen B16, screenBlue B16;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ } xLookupColorReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* 0 */
+ CARD16 width B16, height B16;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ CARD32 pad7 B32;
+ } xQueryBestSizeReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* 0 */
+ BOOL present;
+ CARD8 major_opcode;
+ CARD8 first_event;
+ CARD8 first_error;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ CARD32 pad7 B32;
+ } xQueryExtensionReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ CARD8 nExtensions;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD32 pad2 B32;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ CARD32 pad7 B32;
+ } xListExtensionsReply;
+
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ CARD8 success;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD32 pad2 B32;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ CARD32 pad7 B32;
+ } xSetMappingReply;
+typedef xSetMappingReply xSetPointerMappingReply;
+typedef xSetMappingReply xSetModifierMappingReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ CARD8 nElts; /* how many elements does the map have */
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD32 pad2 B32;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ CARD32 pad7 B32;
+ } xGetPointerMappingReply;
+
+typedef struct {
+ BYTE type;
+ CARD8 keySymsPerKeyCode;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD32 pad2 B32;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ CARD32 pad7 B32;
+} xGetKeyboardMappingReply;
+
+typedef struct {
+ BYTE type;
+ CARD8 numKeyPerModifier;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD32 pad1 B32;
+ CARD32 pad2 B32;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+} xGetModifierMappingReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BOOL globalAutoRepeat;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* 5 */
+ CARD32 ledMask B32;
+ CARD8 keyClickPercent, bellPercent;
+ CARD16 bellPitch B16, bellDuration B16;
+ CARD16 pad B16;
+ BYTE map[32]; /* bit masks start here */
+ } xGetKeyboardControlReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* 0 */
+ CARD16 accelNumerator B16, accelDenominator B16;
+ CARD16 threshold B16;
+ CARD16 pad2 B16;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ } xGetPointerControlReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* 0 */
+ CARD16 timeout B16, interval B16;
+ BOOL preferBlanking;
+ BOOL allowExposures;
+ CARD16 pad2 B16;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ } xGetScreenSaverReply;
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BOOL enabled;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD16 nHosts B16;
+ CARD16 pad1 B16;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ CARD32 pad7 B32;
+ } xListHostsReply;
+
+
+
+
+/*****************************************************************
+ * Xerror
+ * All errors are 32 bytes
+ *****************************************************************/
+
+typedef struct {
+ BYTE type; /* X_Error */
+ BYTE errorCode;
+ CARD16 sequenceNumber B16; /* the nth request from this client */
+ CARD32 resourceID B32;
+ CARD16 minorCode B16;
+ CARD8 majorCode;
+ BYTE pad1;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ CARD32 pad7 B32;
+} xError;
+
+/*****************************************************************
+ * xEvent
+ * All events are 32 bytes
+ *****************************************************************/
+
+typedef struct _xEvent {
+ union {
+ struct {
+ BYTE type;
+ BYTE detail;
+ CARD16 sequenceNumber B16;
+ } u;
+ struct {
+ CARD32 pad00 B32;
+ Time time B32;
+ Window root B32, event B32, child B32;
+ INT16 rootX B16, rootY B16, eventX B16, eventY B16;
+ KeyButMask state B16;
+ BOOL sameScreen;
+ BYTE pad1;
+ } keyButtonPointer;
+ struct {
+ CARD32 pad00 B32;
+ Time time B32;
+ Window root B32, event B32, child B32;
+ INT16 rootX B16, rootY B16, eventX B16, eventY B16;
+ KeyButMask state B16;
+ BYTE mode; /* really XMode */
+ BYTE flags; /* sameScreen and focus booleans, packed together */
+#define ELFlagFocus (1<<0)
+#define ELFlagSameScreen (1<<1)
+ } enterLeave;
+ struct {
+ CARD32 pad00 B32;
+ Window window B32;
+ BYTE mode; /* really XMode */
+ BYTE pad1, pad2, pad3;
+ } focus;
+ struct {
+ CARD32 pad00 B32;
+ Window window B32;
+ CARD16 x B16, y B16, width B16, height B16;
+ CARD16 count B16;
+ CARD16 pad2 B16;
+ } expose;
+ struct {
+ CARD32 pad00 B32;
+ Drawable drawable B32;
+ CARD16 x B16, y B16, width B16, height B16;
+ CARD16 minorEvent B16;
+ CARD16 count B16;
+ BYTE majorEvent;
+ BYTE pad1, pad2, pad3;
+ } graphicsExposure;
+ struct {
+ CARD32 pad00 B32;
+ Drawable drawable B32;
+ CARD16 minorEvent B16;
+ BYTE majorEvent;
+ BYTE bpad;
+ } noExposure;
+ struct {
+ CARD32 pad00 B32;
+ Window window B32;
+ CARD8 state;
+ BYTE pad1, pad2, pad3;
+ } visibility;
+ struct {
+ CARD32 pad00 B32;
+ Window parent B32, window B32;
+ INT16 x B16, y B16;
+ CARD16 width B16, height B16, borderWidth B16;
+ BOOL override;
+ BYTE bpad;
+ } createNotify;
+/*
+ * The event fields in the structures for DestroyNotify, UnmapNotify,
+ * MapNotify, ReparentNotify, ConfigureNotify, CirculateNotify, GravityNotify,
+ * must be at the same offset because server internal code is depending upon
+ * this to patch up the events before they are delivered.
+ * Also note that MapRequest, ConfigureRequest and CirculateRequest have
+ * the same offset for the event window.
+ */
+ struct {
+ CARD32 pad00 B32;
+ Window event B32, window B32;
+ } destroyNotify;
+ struct {
+ CARD32 pad00 B32;
+ Window event B32, window B32;
+ BOOL fromConfigure;
+ BYTE pad1, pad2, pad3;
+ } unmapNotify;
+ struct {
+ CARD32 pad00 B32;
+ Window event B32, window B32;
+ BOOL override;
+ BYTE pad1, pad2, pad3;
+ } mapNotify;
+ struct {
+ CARD32 pad00 B32;
+ Window parent B32, window B32;
+ } mapRequest;
+ struct {
+ CARD32 pad00 B32;
+ Window event B32, window B32, parent B32;
+ INT16 x B16, y B16;
+ BOOL override;
+ BYTE pad1, pad2, pad3;
+ } reparent;
+ struct {
+ CARD32 pad00 B32;
+ Window event B32, window B32, aboveSibling B32;
+ INT16 x B16, y B16;
+ CARD16 width B16, height B16, borderWidth B16;
+ BOOL override;
+ BYTE bpad;
+ } configureNotify;
+ struct {
+ CARD32 pad00 B32;
+ Window parent B32, window B32, sibling B32;
+ INT16 x B16, y B16;
+ CARD16 width B16, height B16, borderWidth B16;
+ CARD16 valueMask B16;
+ CARD32 pad1 B32;
+ } configureRequest;
+ struct {
+ CARD32 pad00 B32;
+ Window event B32, window B32;
+ INT16 x B16, y B16;
+ CARD32 pad1 B32, pad2 B32, pad3 B32, pad4 B32;
+ } gravity;
+ struct {
+ CARD32 pad00 B32;
+ Window window B32;
+ CARD16 width B16, height B16;
+ } resizeRequest;
+ struct {
+/* The event field in the circulate record is really the parent when this
+ is used as a CirculateRequest instead of a CirculateNotify */
+ CARD32 pad00 B32;
+ Window event B32, window B32, parent B32;
+ BYTE place; /* Top or Bottom */
+ BYTE pad1, pad2, pad3;
+ } circulate;
+ struct {
+ CARD32 pad00 B32;
+ Window window B32;
+ Atom atom B32;
+ Time time B32;
+ BYTE state; /* NewValue or Deleted */
+ BYTE pad1;
+ CARD16 pad2 B16;
+ } property;
+ struct {
+ CARD32 pad00 B32;
+ Time time B32;
+ Window window B32;
+ Atom atom B32;
+ } selectionClear;
+ struct {
+ CARD32 pad00 B32;
+ Time time B32;
+ Window owner B32, requestor B32;
+ Atom selection B32, target B32, property B32;
+ } selectionRequest;
+ struct {
+ CARD32 pad00 B32;
+ Time time B32;
+ Window requestor B32;
+ Atom selection B32, target B32, property B32;
+ } selectionNotify;
+ struct {
+ CARD32 pad00 B32;
+ Window window B32;
+ Colormap colormap B32;
+#if defined(__cplusplus) || defined(c_plusplus)
+ BOOL c_new;
+#else
+ BOOL new;
+#endif
+ BYTE state; /* Installed or UnInstalled */
+ BYTE pad1, pad2;
+ } colormap;
+ struct {
+ CARD32 pad00 B32;
+ CARD8 request;
+ KeyCode firstKeyCode;
+ CARD8 count;
+ BYTE pad1;
+ } mappingNotify;
+ struct {
+ CARD32 pad00 B32;
+ Window window B32;
+ union {
+ struct {
+ Atom type B32;
+ INT32 longs0 B32;
+ INT32 longs1 B32;
+ INT32 longs2 B32;
+ INT32 longs3 B32;
+ INT32 longs4 B32;
+ } l;
+ struct {
+ Atom type B32;
+ INT16 shorts0 B16;
+ INT16 shorts1 B16;
+ INT16 shorts2 B16;
+ INT16 shorts3 B16;
+ INT16 shorts4 B16;
+ INT16 shorts5 B16;
+ INT16 shorts6 B16;
+ INT16 shorts7 B16;
+ INT16 shorts8 B16;
+ INT16 shorts9 B16;
+ } s;
+ struct {
+ Atom type B32;
+ INT8 bytes[20];
+ } b;
+ } u;
+ } clientMessage;
+ } u;
+} xEvent;
+
+/*********************************************************
+ *
+ * Generic event
+ *
+ * Those events are not part of the core protocol spec and can be used by
+ * various extensions.
+ * type is always GenericEvent
+ * extension is the minor opcode of the extension the event belongs to.
+ * evtype is the actual event type, unique __per extension__.
+ *
+ * GenericEvents can be longer than 32 bytes, with the length field
+ * specifying the number of 4 byte blocks after the first 32 bytes.
+ *
+ *
+ */
+typedef struct
+{
+ BYTE type;
+ CARD8 extension;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD16 evtype B16;
+ CARD16 pad2 B16;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ CARD32 pad7 B32;
+} xGenericEvent;
+
+
+
+/* KeymapNotify events are not included in the above union because they
+ are different from all other events: they do not have a "detail"
+ or "sequenceNumber", so there is room for a 248-bit key mask. */
+
+typedef struct {
+ BYTE type;
+ BYTE map[31];
+ } xKeymapEvent;
+
+#define XEventSize (sizeof(xEvent))
+
+/* XReply is the union of all the replies above whose "fixed part"
+fits in 32 bytes. It does NOT include GetWindowAttributesReply,
+QueryFontReply, QueryKeymapReply, or GetKeyboardControlReply
+ListFontsWithInfoReply */
+
+typedef union {
+ xGenericReply generic;
+ xGetGeometryReply geom;
+ xQueryTreeReply tree;
+ xInternAtomReply atom;
+ xGetAtomNameReply atomName;
+ xGetPropertyReply property;
+ xListPropertiesReply listProperties;
+ xGetSelectionOwnerReply selection;
+ xGrabPointerReply grabPointer;
+ xGrabKeyboardReply grabKeyboard;
+ xQueryPointerReply pointer;
+ xGetMotionEventsReply motionEvents;
+ xTranslateCoordsReply coords;
+ xGetInputFocusReply inputFocus;
+ xQueryTextExtentsReply textExtents;
+ xListFontsReply fonts;
+ xGetFontPathReply fontPath;
+ xGetImageReply image;
+ xListInstalledColormapsReply colormaps;
+ xAllocColorReply allocColor;
+ xAllocNamedColorReply allocNamedColor;
+ xAllocColorCellsReply colorCells;
+ xAllocColorPlanesReply colorPlanes;
+ xQueryColorsReply colors;
+ xLookupColorReply lookupColor;
+ xQueryBestSizeReply bestSize;
+ xQueryExtensionReply extension;
+ xListExtensionsReply extensions;
+ xSetModifierMappingReply setModifierMapping;
+ xGetModifierMappingReply getModifierMapping;
+ xSetPointerMappingReply setPointerMapping;
+ xGetKeyboardMappingReply getKeyboardMapping;
+ xGetPointerMappingReply getPointerMapping;
+ xGetPointerControlReply pointerControl;
+ xGetScreenSaverReply screenSaver;
+ xListHostsReply hosts;
+ xError error;
+ xEvent event;
+} xReply;
+
+
+
+/*****************************************************************
+ * REQUESTS
+ *****************************************************************/
+
+
+/* Request structure */
+
+typedef struct _xReq {
+ CARD8 reqType;
+ CARD8 data; /* meaning depends on request type */
+ CARD16 length B16; /* length in 4 bytes quantities
+ of whole request, including this header */
+} xReq;
+
+/*****************************************************************
+ * structures that follow request.
+ *****************************************************************/
+
+/* ResourceReq is used for any request which has a resource ID
+ (or Atom or Time) as its one and only argument. */
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ CARD32 id B32; /* a Window, Drawable, Font, GContext, Pixmap, etc. */
+ } xResourceReq;
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 depth;
+ CARD16 length B16;
+ Window wid B32, parent B32;
+ INT16 x B16, y B16;
+ CARD16 width B16, height B16, borderWidth B16;
+#if defined(__cplusplus) || defined(c_plusplus)
+ CARD16 c_class B16;
+#else
+ CARD16 class B16;
+#endif
+ VisualID visual B32;
+ CARD32 mask B32;
+} xCreateWindowReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Window window B32;
+ CARD32 valueMask B32;
+} xChangeWindowAttributesReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE mode;
+ CARD16 length B16;
+ Window window B32;
+} xChangeSaveSetReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Window window B32, parent B32;
+ INT16 x B16, y B16;
+} xReparentWindowReq;
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 pad;
+ CARD16 length B16;
+ Window window B32;
+ CARD16 mask B16;
+ CARD16 pad2 B16;
+} xConfigureWindowReq;
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 direction;
+ CARD16 length B16;
+ Window window B32;
+} xCirculateWindowReq;
+
+typedef struct { /* followed by padded string */
+ CARD8 reqType;
+ BOOL onlyIfExists;
+ CARD16 length B16;
+ CARD16 nbytes B16; /* number of bytes in string */
+ CARD16 pad B16;
+} xInternAtomReq;
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 mode;
+ CARD16 length B16;
+ Window window B32;
+ Atom property B32, type B32;
+ CARD8 format;
+ BYTE pad[3];
+ CARD32 nUnits B32; /* length of stuff following, depends on format */
+} xChangePropertyReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Window window B32;
+ Atom property B32;
+} xDeletePropertyReq;
+
+typedef struct {
+ CARD8 reqType;
+#if defined(__cplusplus) || defined(c_plusplus)
+ BOOL c_delete;
+#else
+ BOOL delete;
+#endif
+ CARD16 length B16;
+ Window window B32;
+ Atom property B32, type B32;
+ CARD32 longOffset B32;
+ CARD32 longLength B32;
+} xGetPropertyReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Window window B32;
+ Atom selection B32;
+ Time time B32;
+} xSetSelectionOwnerReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Window requestor B32;
+ Atom selection B32, target B32, property B32;
+ Time time B32;
+ } xConvertSelectionReq;
+
+typedef struct {
+ CARD8 reqType;
+ BOOL propagate;
+ CARD16 length B16;
+ Window destination B32;
+ CARD32 eventMask B32;
+#ifdef WORD64
+ /* the structure should have been quad-aligned */
+ BYTE eventdata[SIZEOF(xEvent)];
+#else
+ xEvent event;
+#endif /* WORD64 */
+} xSendEventReq;
+
+typedef struct {
+ CARD8 reqType;
+ BOOL ownerEvents;
+ CARD16 length B16;
+ Window grabWindow B32;
+ CARD16 eventMask B16;
+ BYTE pointerMode, keyboardMode;
+ Window confineTo B32;
+ Cursor cursor B32;
+ Time time B32;
+} xGrabPointerReq;
+
+typedef struct {
+ CARD8 reqType;
+ BOOL ownerEvents;
+ CARD16 length B16;
+ Window grabWindow B32;
+ CARD16 eventMask B16;
+ BYTE pointerMode, keyboardMode;
+ Window confineTo B32;
+ Cursor cursor B32;
+ CARD8 button;
+ BYTE pad;
+ CARD16 modifiers B16;
+} xGrabButtonReq;
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 button;
+ CARD16 length B16;
+ Window grabWindow B32;
+ CARD16 modifiers B16;
+ CARD16 pad B16;
+} xUngrabButtonReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Cursor cursor B32;
+ Time time B32;
+ CARD16 eventMask B16;
+ CARD16 pad2 B16;
+} xChangeActivePointerGrabReq;
+
+typedef struct {
+ CARD8 reqType;
+ BOOL ownerEvents;
+ CARD16 length B16;
+ Window grabWindow B32;
+ Time time B32;
+ BYTE pointerMode, keyboardMode;
+ CARD16 pad B16;
+} xGrabKeyboardReq;
+
+typedef struct {
+ CARD8 reqType;
+ BOOL ownerEvents;
+ CARD16 length B16;
+ Window grabWindow B32;
+ CARD16 modifiers B16;
+ CARD8 key;
+ BYTE pointerMode, keyboardMode;
+ BYTE pad1, pad2, pad3;
+} xGrabKeyReq;
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 key;
+ CARD16 length B16;
+ Window grabWindow B32;
+ CARD16 modifiers B16;
+ CARD16 pad B16;
+} xUngrabKeyReq;
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 mode;
+ CARD16 length B16;
+ Time time B32;
+} xAllowEventsReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Window window B32;
+ Time start B32, stop B32;
+} xGetMotionEventsReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Window srcWid B32, dstWid B32;
+ INT16 srcX B16, srcY B16;
+} xTranslateCoordsReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Window srcWid B32, dstWid B32;
+ INT16 srcX B16, srcY B16;
+ CARD16 srcWidth B16, srcHeight B16;
+ INT16 dstX B16, dstY B16;
+} xWarpPointerReq;
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 revertTo;
+ CARD16 length B16;
+ Window focus B32;
+ Time time B32;
+} xSetInputFocusReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Font fid B32;
+ CARD16 nbytes B16;
+ BYTE pad1, pad2; /* string follows on word boundary */
+} xOpenFontReq;
+
+typedef struct {
+ CARD8 reqType;
+ BOOL oddLength;
+ CARD16 length B16;
+ Font fid B32;
+ } xQueryTextExtentsReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ CARD16 maxNames B16;
+ CARD16 nbytes B16; /* followed immediately by string bytes */
+} xListFontsReq;
+
+typedef xListFontsReq xListFontsWithInfoReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ CARD16 nFonts B16;
+ BYTE pad1, pad2; /* LISTofSTRING8 follows on word boundary */
+} xSetFontPathReq;
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 depth;
+ CARD16 length B16;
+ Pixmap pid B32;
+ Drawable drawable B32;
+ CARD16 width B16, height B16;
+} xCreatePixmapReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ GContext gc B32;
+ Drawable drawable B32;
+ CARD32 mask B32;
+} xCreateGCReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ GContext gc B32;
+ CARD32 mask B32;
+} xChangeGCReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ GContext srcGC B32, dstGC B32;
+ CARD32 mask B32;
+} xCopyGCReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ GContext gc B32;
+ CARD16 dashOffset B16;
+ CARD16 nDashes B16; /* length LISTofCARD8 of values following */
+} xSetDashesReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE ordering;
+ CARD16 length B16;
+ GContext gc B32;
+ INT16 xOrigin B16, yOrigin B16;
+} xSetClipRectanglesReq;
+
+typedef struct {
+ CARD8 reqType;
+ BOOL exposures;
+ CARD16 length B16;
+ Window window B32;
+ INT16 x B16, y B16;
+ CARD16 width B16, height B16;
+} xClearAreaReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Drawable srcDrawable B32, dstDrawable B32;
+ GContext gc B32;
+ INT16 srcX B16, srcY B16, dstX B16, dstY B16;
+ CARD16 width B16, height B16;
+} xCopyAreaReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Drawable srcDrawable B32, dstDrawable B32;
+ GContext gc B32;
+ INT16 srcX B16, srcY B16, dstX B16, dstY B16;
+ CARD16 width B16, height B16;
+ CARD32 bitPlane B32;
+} xCopyPlaneReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE coordMode;
+ CARD16 length B16;
+ Drawable drawable B32;
+ GContext gc B32;
+} xPolyPointReq;
+
+typedef xPolyPointReq xPolyLineReq; /* same request structure */
+
+/* The following used for PolySegment, PolyRectangle, PolyArc, PolyFillRectangle, PolyFillArc */
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Drawable drawable B32;
+ GContext gc B32;
+} xPolySegmentReq;
+
+typedef xPolySegmentReq xPolyArcReq;
+typedef xPolySegmentReq xPolyRectangleReq;
+typedef xPolySegmentReq xPolyFillRectangleReq;
+typedef xPolySegmentReq xPolyFillArcReq;
+
+typedef struct _FillPolyReq {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Drawable drawable B32;
+ GContext gc B32;
+ BYTE shape;
+ BYTE coordMode;
+ CARD16 pad1 B16;
+} xFillPolyReq;
+
+
+typedef struct _PutImageReq {
+ CARD8 reqType;
+ CARD8 format;
+ CARD16 length B16;
+ Drawable drawable B32;
+ GContext gc B32;
+ CARD16 width B16, height B16;
+ INT16 dstX B16, dstY B16;
+ CARD8 leftPad;
+ CARD8 depth;
+ CARD16 pad B16;
+} xPutImageReq;
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 format;
+ CARD16 length B16;
+ Drawable drawable B32;
+ INT16 x B16, y B16;
+ CARD16 width B16, height B16;
+ CARD32 planeMask B32;
+} xGetImageReq;
+
+/* the following used by PolyText8 and PolyText16 */
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 pad;
+ CARD16 length B16;
+ Drawable drawable B32;
+ GContext gc B32;
+ INT16 x B16, y B16; /* items (xTextElt) start after struct */
+} xPolyTextReq;
+
+typedef xPolyTextReq xPolyText8Req;
+typedef xPolyTextReq xPolyText16Req;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE nChars;
+ CARD16 length B16;
+ Drawable drawable B32;
+ GContext gc B32;
+ INT16 x B16, y B16;
+} xImageTextReq;
+
+typedef xImageTextReq xImageText8Req;
+typedef xImageTextReq xImageText16Req;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE alloc;
+ CARD16 length B16;
+ Colormap mid B32;
+ Window window B32;
+ VisualID visual B32;
+} xCreateColormapReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Colormap mid B32;
+ Colormap srcCmap B32;
+} xCopyColormapAndFreeReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Colormap cmap B32;
+ CARD16 red B16, green B16, blue B16;
+ CARD16 pad2 B16;
+} xAllocColorReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Colormap cmap B32;
+ CARD16 nbytes B16; /* followed by structure */
+ BYTE pad1, pad2;
+} xAllocNamedColorReq;
+
+typedef struct {
+ CARD8 reqType;
+ BOOL contiguous;
+ CARD16 length B16;
+ Colormap cmap B32;
+ CARD16 colors B16, planes B16;
+} xAllocColorCellsReq;
+
+typedef struct {
+ CARD8 reqType;
+ BOOL contiguous;
+ CARD16 length B16;
+ Colormap cmap B32;
+ CARD16 colors B16, red B16, green B16, blue B16;
+} xAllocColorPlanesReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Colormap cmap B32;
+ CARD32 planeMask B32;
+} xFreeColorsReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Colormap cmap B32;
+} xStoreColorsReq;
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 flags; /* DoRed, DoGreen, DoBlue, as in xColorItem */
+ CARD16 length B16;
+ Colormap cmap B32;
+ CARD32 pixel B32;
+ CARD16 nbytes B16; /* number of name string bytes following structure */
+ BYTE pad1, pad2;
+ } xStoreNamedColorReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Colormap cmap B32;
+} xQueryColorsReq;
+
+typedef struct { /* followed by string of length len */
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Colormap cmap B32;
+ CARD16 nbytes B16; /* number of string bytes following structure*/
+ BYTE pad1, pad2;
+} xLookupColorReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Cursor cid B32;
+ Pixmap source B32, mask B32;
+ CARD16 foreRed B16, foreGreen B16, foreBlue B16;
+ CARD16 backRed B16, backGreen B16, backBlue B16;
+ CARD16 x B16, y B16;
+} xCreateCursorReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Cursor cid B32;
+ Font source B32, mask B32;
+ CARD16 sourceChar B16, maskChar B16;
+ CARD16 foreRed B16, foreGreen B16, foreBlue B16;
+ CARD16 backRed B16, backGreen B16, backBlue B16;
+} xCreateGlyphCursorReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Cursor cursor B32;
+ CARD16 foreRed B16, foreGreen B16, foreBlue B16;
+ CARD16 backRed B16, backGreen B16, backBlue B16;
+} xRecolorCursorReq;
+
+typedef struct {
+ CARD8 reqType;
+#if defined(__cplusplus) || defined(c_plusplus)
+ CARD8 c_class;
+#else
+ CARD8 class;
+#endif
+ CARD16 length B16;
+ Drawable drawable B32;
+ CARD16 width B16, height B16;
+} xQueryBestSizeReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ CARD16 nbytes B16; /* number of string bytes following structure */
+ BYTE pad1, pad2;
+} xQueryExtensionReq;
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 numKeyPerModifier;
+ CARD16 length B16;
+} xSetModifierMappingReq;
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 nElts; /* how many elements in the map */
+ CARD16 length B16;
+} xSetPointerMappingReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ KeyCode firstKeyCode;
+ CARD8 count;
+ CARD16 pad1 B16;
+} xGetKeyboardMappingReq;
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 keyCodes;
+ CARD16 length B16;
+ KeyCode firstKeyCode;
+ CARD8 keySymsPerKeyCode;
+ CARD16 pad1 B16;
+} xChangeKeyboardMappingReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ CARD32 mask B32;
+} xChangeKeyboardControlReq;
+
+typedef struct {
+ CARD8 reqType;
+ INT8 percent; /* -100 to 100 */
+ CARD16 length B16;
+} xBellReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ INT16 accelNum B16, accelDenum B16;
+ INT16 threshold B16;
+ BOOL doAccel, doThresh;
+} xChangePointerControlReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ INT16 timeout B16, interval B16;
+ BYTE preferBlank, allowExpose;
+ CARD16 pad2 B16;
+} xSetScreenSaverReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE mode;
+ CARD16 length B16;
+ CARD8 hostFamily;
+ BYTE pad;
+ CARD16 hostLength B16;
+} xChangeHostsReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ } xListHostsReq;
+
+typedef struct {
+ CARD8 reqType;
+ BYTE mode;
+ CARD16 length B16;
+ } xChangeModeReq;
+
+typedef xChangeModeReq xSetAccessControlReq;
+typedef xChangeModeReq xSetCloseDownModeReq;
+typedef xChangeModeReq xForceScreenSaverReq;
+
+typedef struct { /* followed by LIST of ATOM */
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ Window window B32;
+ CARD16 nAtoms B16;
+ INT16 nPositions B16;
+ } xRotatePropertiesReq;
+
+
+
+/* Reply codes */
+
+#define X_Reply 1 /* Normal reply */
+#define X_Error 0 /* Error */
+
+/* Request codes */
+
+#define X_CreateWindow 1
+#define X_ChangeWindowAttributes 2
+#define X_GetWindowAttributes 3
+#define X_DestroyWindow 4
+#define X_DestroySubwindows 5
+#define X_ChangeSaveSet 6
+#define X_ReparentWindow 7
+#define X_MapWindow 8
+#define X_MapSubwindows 9
+#define X_UnmapWindow 10
+#define X_UnmapSubwindows 11
+#define X_ConfigureWindow 12
+#define X_CirculateWindow 13
+#define X_GetGeometry 14
+#define X_QueryTree 15
+#define X_InternAtom 16
+#define X_GetAtomName 17
+#define X_ChangeProperty 18
+#define X_DeleteProperty 19
+#define X_GetProperty 20
+#define X_ListProperties 21
+#define X_SetSelectionOwner 22
+#define X_GetSelectionOwner 23
+#define X_ConvertSelection 24
+#define X_SendEvent 25
+#define X_GrabPointer 26
+#define X_UngrabPointer 27
+#define X_GrabButton 28
+#define X_UngrabButton 29
+#define X_ChangeActivePointerGrab 30
+#define X_GrabKeyboard 31
+#define X_UngrabKeyboard 32
+#define X_GrabKey 33
+#define X_UngrabKey 34
+#define X_AllowEvents 35
+#define X_GrabServer 36
+#define X_UngrabServer 37
+#define X_QueryPointer 38
+#define X_GetMotionEvents 39
+#define X_TranslateCoords 40
+#define X_WarpPointer 41
+#define X_SetInputFocus 42
+#define X_GetInputFocus 43
+#define X_QueryKeymap 44
+#define X_OpenFont 45
+#define X_CloseFont 46
+#define X_QueryFont 47
+#define X_QueryTextExtents 48
+#define X_ListFonts 49
+#define X_ListFontsWithInfo 50
+#define X_SetFontPath 51
+#define X_GetFontPath 52
+#define X_CreatePixmap 53
+#define X_FreePixmap 54
+#define X_CreateGC 55
+#define X_ChangeGC 56
+#define X_CopyGC 57
+#define X_SetDashes 58
+#define X_SetClipRectangles 59
+#define X_FreeGC 60
+#define X_ClearArea 61
+#define X_CopyArea 62
+#define X_CopyPlane 63
+#define X_PolyPoint 64
+#define X_PolyLine 65
+#define X_PolySegment 66
+#define X_PolyRectangle 67
+#define X_PolyArc 68
+#define X_FillPoly 69
+#define X_PolyFillRectangle 70
+#define X_PolyFillArc 71
+#define X_PutImage 72
+#define X_GetImage 73
+#define X_PolyText8 74
+#define X_PolyText16 75
+#define X_ImageText8 76
+#define X_ImageText16 77
+#define X_CreateColormap 78
+#define X_FreeColormap 79
+#define X_CopyColormapAndFree 80
+#define X_InstallColormap 81
+#define X_UninstallColormap 82
+#define X_ListInstalledColormaps 83
+#define X_AllocColor 84
+#define X_AllocNamedColor 85
+#define X_AllocColorCells 86
+#define X_AllocColorPlanes 87
+#define X_FreeColors 88
+#define X_StoreColors 89
+#define X_StoreNamedColor 90
+#define X_QueryColors 91
+#define X_LookupColor 92
+#define X_CreateCursor 93
+#define X_CreateGlyphCursor 94
+#define X_FreeCursor 95
+#define X_RecolorCursor 96
+#define X_QueryBestSize 97
+#define X_QueryExtension 98
+#define X_ListExtensions 99
+#define X_ChangeKeyboardMapping 100
+#define X_GetKeyboardMapping 101
+#define X_ChangeKeyboardControl 102
+#define X_GetKeyboardControl 103
+#define X_Bell 104
+#define X_ChangePointerControl 105
+#define X_GetPointerControl 106
+#define X_SetScreenSaver 107
+#define X_GetScreenSaver 108
+#define X_ChangeHosts 109
+#define X_ListHosts 110
+#define X_SetAccessControl 111
+#define X_SetCloseDownMode 112
+#define X_KillClient 113
+#define X_RotateProperties 114
+#define X_ForceScreenSaver 115
+#define X_SetPointerMapping 116
+#define X_GetPointerMapping 117
+#define X_SetModifierMapping 118
+#define X_GetModifierMapping 119
+#define X_NoOperation 127
+
+/* restore these definitions back to the typedefs in X.h */
+#undef Window
+#undef Drawable
+#undef Font
+#undef Pixmap
+#undef Cursor
+#undef Colormap
+#undef GContext
+#undef Atom
+#undef VisualID
+#undef Time
+#undef KeyCode
+#undef KeySym
+
+#endif /* XPROTO_H */
diff --git a/Xprotostr.h b/Xprotostr.h
new file mode 100644
index 0000000..a9e854d
--- /dev/null
+++ b/Xprotostr.h
@@ -0,0 +1,77 @@
+#ifndef XPROTOSTRUCTS_H
+#define XPROTOSTRUCTS_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 of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall not be
+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.
+
+******************************************************************/
+#include <X11/Xmd.h>
+
+/* Used by PolySegment */
+
+typedef struct _xSegment {
+ INT16 x1 B16, y1 B16, x2 B16, y2 B16;
+} xSegment;
+
+/* POINT */
+
+typedef struct _xPoint {
+ INT16 x B16, y B16;
+} xPoint;
+
+typedef struct _xRectangle {
+ INT16 x B16, y B16;
+ CARD16 width B16, height B16;
+} xRectangle;
+
+/* ARC */
+
+typedef struct _xArc {
+ INT16 x B16, y B16;
+ CARD16 width B16, height B16;
+ INT16 angle1 B16, angle2 B16;
+} xArc;
+
+#endif /* XPROTOSTRUCTS_H */
diff --git a/Xthreads.h b/Xthreads.h
new file mode 100644
index 0000000..3d44208
--- /dev/null
+++ b/Xthreads.h
@@ -0,0 +1,313 @@
+/*
+ *
+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.
+ * *
+ */
+
+#ifndef _XTHREADS_H_
+# define _XTHREADS_H_
+
+/* Redefine these to XtMalloc/XtFree or whatever you want before including
+ * this header file.
+ */
+# ifndef xmalloc
+# define xmalloc malloc
+# endif
+# ifndef xfree
+# define xfree free
+# endif
+
+# ifdef CTHREADS
+# include <cthreads.h>
+typedef cthread_t xthread_t;
+typedef struct condition xcondition_rec;
+typedef struct mutex xmutex_rec;
+# define xthread_init() cthread_init()
+# define xthread_self cthread_self
+# define xthread_fork(func,closure) cthread_fork(func,closure)
+# define xthread_yield() cthread_yield()
+# define xthread_exit(v) cthread_exit(v)
+# define xthread_set_name(t,str) cthread_set_name(t,str)
+# define xmutex_init(m) mutex_init(m)
+# define xmutex_clear(m) mutex_clear(m)
+# define xmutex_lock(m) mutex_lock(m)
+# define xmutex_unlock(m) mutex_unlock(m)
+# define xmutex_set_name(m,str) mutex_set_name(m,str)
+# define xcondition_init(cv) condition_init(cv)
+# define xcondition_clear(cv) condition_clear(cv)
+# define xcondition_wait(cv,m) condition_wait(cv,m)
+# define xcondition_signal(cv) condition_signal(cv)
+# define xcondition_broadcast(cv) condition_broadcast(cv)
+# define xcondition_set_name(cv,str) condition_set_name(cv,str)
+# else /* !CTHREADS */
+# if defined(SVR4)
+# include <thread.h>
+# include <synch.h>
+typedef thread_t xthread_t;
+typedef thread_key_t xthread_key_t;
+typedef cond_t xcondition_rec;
+typedef mutex_t xmutex_rec;
+# if defined(__UNIXWARE__)
+extern xthread_t (*_x11_thr_self)();
+# define xthread_self (_x11_thr_self)
+# else
+# define xthread_self thr_self
+# endif
+# define xthread_fork(func,closure) thr_create(NULL,0,func,closure,THR_NEW_LWP|THR_DETACHED,NULL)
+# define xthread_yield() thr_yield()
+# define xthread_exit(v) thr_exit(v)
+# define xthread_key_create(kp,d) thr_keycreate(kp,d)
+# ifdef __sun
+# define xthread_key_delete(k) 0
+# else
+# define xthread_key_delete(k) thr_keydelete(k)
+# endif
+# define xthread_set_specific(k,v) thr_setspecific(k,v)
+# define xthread_get_specific(k,vp) thr_getspecific(k,vp)
+# define xmutex_init(m) mutex_init(m,USYNC_THREAD,0)
+# define xmutex_clear(m) mutex_destroy(m)
+# define xmutex_lock(m) mutex_lock(m)
+# define xmutex_unlock(m) mutex_unlock(m)
+# define xcondition_init(cv) cond_init(cv,USYNC_THREAD,0)
+# define xcondition_clear(cv) cond_destroy(cv)
+# define xcondition_wait(cv,m) cond_wait(cv,m)
+# define xcondition_signal(cv) cond_signal(cv)
+# define xcondition_broadcast(cv) cond_broadcast(cv)
+# else /* !SVR4 */
+# ifdef WIN32
+# include <X11/Xwindows.h>
+typedef DWORD xthread_t;
+typedef DWORD xthread_key_t;
+struct _xthread_waiter {
+ HANDLE sem;
+ struct _xthread_waiter *next;
+};
+typedef struct {
+ CRITICAL_SECTION cs;
+ struct _xthread_waiter *waiters;
+} xcondition_rec;
+typedef CRITICAL_SECTION xmutex_rec;
+# define xthread_init() _Xthread_init()
+# define xthread_self GetCurrentThreadId
+# define xthread_fork(func,closure) { \
+ DWORD _tmptid; \
+ CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)func, (LPVOID)closure, 0, \
+ &_tmptid); \
+}
+# define xthread_yield() Sleep(0)
+# define xthread_exit(v) ExitThread((DWORD)(v))
+# define xthread_key_create(kp,d) *(kp) = TlsAlloc()
+# define xthread_key_delete(k) TlsFree(k)
+# define xthread_set_specific(k,v) TlsSetValue(k,v)
+# define xthread_get_specific(k,vp) TlsGetValue(k)
+# define xmutex_init(m) InitializeCriticalSection(m)
+# define xmutex_clear(m) DeleteCriticalSection(m)
+# define _XMUTEX_NESTS
+# define xmutex_lock(m) EnterCriticalSection(m)
+# define xmutex_unlock(m) LeaveCriticalSection(m)
+# define xcondition_init(cv) { \
+ InitializeCriticalSection(&(cv)->cs); \
+ (cv)->waiters = NULL; \
+}
+# define xcondition_clear(cv) DeleteCriticalSection(&(cv)->cs)
+extern struct _xthread_waiter *_Xthread_waiter();
+# define xcondition_wait(cv,m) { \
+ struct _xthread_waiter *_tmpthr = _Xthread_waiter(); \
+ EnterCriticalSection(&(cv)->cs); \
+ _tmpthr->next = (cv)->waiters; \
+ (cv)->waiters = _tmpthr; \
+ LeaveCriticalSection(&(cv)->cs); \
+ LeaveCriticalSection(m); \
+ WaitForSingleObject(_tmpthr->sem, INFINITE); \
+ EnterCriticalSection(m); \
+}
+# define xcondition_signal(cv) { \
+ EnterCriticalSection(&(cv)->cs); \
+ if ((cv)->waiters) { \
+ ReleaseSemaphore((cv)->waiters->sem, 1, NULL); \
+ (cv)->waiters = (cv)->waiters->next; \
+ } \
+ LeaveCriticalSection(&(cv)->cs); \
+}
+# define xcondition_broadcast(cv) { \
+ struct _xthread_waiter *_tmpthr; \
+ EnterCriticalSection(&(cv)->cs); \
+ for (_tmpthr = (cv)->waiters; _tmpthr; _tmpthr = _tmpthr->next) \
+ ReleaseSemaphore(_tmpthr->sem, 1, NULL); \
+ (cv)->waiters = NULL; \
+ LeaveCriticalSection(&(cv)->cs); \
+}
+# else /* !WIN32 */
+# ifdef USE_TIS_SUPPORT
+/*
+ * TIS support is intended for thread safe libraries.
+ * This should not be used for general client programming.
+ */
+# include <tis.h>
+typedef pthread_t xthread_t;
+typedef pthread_key_t xthread_key_t;
+typedef pthread_cond_t xcondition_rec;
+typedef pthread_mutex_t xmutex_rec;
+# define xthread_self tis_self
+# define xthread_fork(func,closure) { pthread_t _tmpxthr; \
+ pthread_create(&_tmpxthr,NULL,func,closure); }
+# define xthread_yield() pthread_yield_np()
+# define xthread_exit(v) pthread_exit(v)
+# define xthread_key_create(kp,d) tis_key_create(kp,d)
+# define xthread_key_delete(k) tis_key_delete(k)
+# define xthread_set_specific(k,v) tis_setspecific(k,v)
+# define xthread_get_specific(k,vp) *(vp) = tis_getspecific(k)
+# define XMUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
+# define xmutex_init(m) tis_mutex_init(m)
+# define xmutex_clear(m) tis_mutex_destroy(m)
+# define xmutex_lock(m) tis_mutex_lock(m)
+# define xmutex_unlock(m) tis_mutex_unlock(m)
+# define xcondition_init(c) tis_cond_init(c)
+# define xcondition_clear(c) tis_cond_destroy(c)
+# define xcondition_wait(c,m) tis_cond_wait(c,m)
+# define xcondition_signal(c) tis_cond_signal(c)
+# define xcondition_broadcast(c) tis_cond_broadcast(c)
+# else
+# ifdef USE_NBSD_THREADLIB
+/*
+ * NetBSD threadlib support is intended for thread safe libraries.
+ * This should not be used for general client programming.
+ */
+# include <threadlib.h>
+typedef thr_t xthread_t;
+typedef thread_key_t xthread_key_t;
+typedef cond_t xcondition_rec;
+typedef mutex_t xmutex_rec;
+# define xthread_self thr_self
+# define xthread_fork(func,closure) { thr_t _tmpxthr; \
+ /* XXX Create it detached? --thorpej */ \
+ thr_create(&_tmpxthr,NULL,func,closure); }
+# define xthread_yield() thr_yield()
+# define xthread_exit(v) thr_exit(v)
+# define xthread_key_create(kp,d) thr_keycreate(kp,d)
+# define xthread_key_delete(k) thr_keydelete(k)
+# define xthread_set_specific(k,v) thr_setspecific(k,v)
+# define xthread_get_specific(k,vp) *(vp) = thr_getspecific(k)
+# define XMUTEX_INITIALIZER MUTEX_INITIALIZER
+# define xmutex_init(m) mutex_init(m, 0)
+# define xmutex_clear(m) mutex_destroy(m)
+# define xmutex_lock(m) mutex_lock(m)
+# define xmutex_unlock(m) mutex_unlock(m)
+# define xcondition_init(c) cond_init(c, 0, 0)
+# define xcondition_clear(c) cond_destroy(c)
+# define xcondition_wait(c,m) cond_wait(c,m)
+# define xcondition_signal(c) cond_signal(c)
+# define xcondition_broadcast(c) cond_broadcast(c)
+# else
+# include <pthread.h>
+typedef pthread_t xthread_t;
+typedef pthread_key_t xthread_key_t;
+typedef pthread_cond_t xcondition_rec;
+typedef pthread_mutex_t xmutex_rec;
+# define xthread_self pthread_self
+# define xthread_yield() pthread_yield()
+# define xthread_exit(v) pthread_exit(v)
+# define xthread_set_specific(k,v) pthread_setspecific(k,v)
+# define xmutex_clear(m) pthread_mutex_destroy(m)
+# define xmutex_lock(m) pthread_mutex_lock(m)
+# define xmutex_unlock(m) pthread_mutex_unlock(m)
+# ifndef XPRE_STANDARD_API
+# define xthread_key_create(kp,d) pthread_key_create(kp,d)
+# define xthread_key_delete(k) pthread_key_delete(k)
+# define xthread_get_specific(k,vp) *(vp) = pthread_getspecific(k)
+# define xthread_fork(func,closure) { pthread_t _tmpxthr; \
+ pthread_create(&_tmpxthr,NULL,func,closure); }
+# define XMUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
+# define xmutex_init(m) pthread_mutex_init(m, NULL)
+# define xcondition_init(c) pthread_cond_init(c, NULL)
+# else /* XPRE_STANDARD_API */
+# define xthread_key_create(kp,d) pthread_keycreate(kp,d)
+# define xthread_key_delete(k) 0
+# define xthread_get_specific(k,vp) pthread_getspecific(k,vp)
+# define xthread_fork(func,closure) { pthread_t _tmpxthr; \
+ pthread_create(&_tmpxthr,pthread_attr_default,func,closure); }
+# define xmutex_init(m) pthread_mutex_init(m, pthread_mutexattr_default)
+# define xcondition_init(c) pthread_cond_init(c, pthread_condattr_default)
+# endif /* XPRE_STANDARD_API */
+# define xcondition_clear(c) pthread_cond_destroy(c)
+# define xcondition_wait(c,m) pthread_cond_wait(c,m)
+# define xcondition_signal(c) pthread_cond_signal(c)
+# define xcondition_broadcast(c) pthread_cond_broadcast(c)
+# if defined(_DECTHREADS_)
+static xthread_t _X_no_thread_id;
+# define xthread_have_id(id) !pthread_equal(id, _X_no_thread_id)
+# define xthread_clear_id(id) id = _X_no_thread_id
+# define xthread_equal(id1,id2) pthread_equal(id1, id2)
+# endif /* _DECTHREADS_ */
+# if defined(__linux__)
+# define xthread_have_id(id) !pthread_equal(id, 0)
+# define xthread_clear_id(id) id = 0
+# define xthread_equal(id1,id2) pthread_equal(id1, id2)
+# endif /* linux */
+# if defined(_CMA_VENDOR_) && defined(_CMA__IBM) && (_CMA_VENDOR_ == _CMA__IBM)
+# ifdef DEBUG /* too much of a hack to enable normally */
+/* see also cma__obj_set_name() */
+# define xmutex_set_name(m,str) ((char**)(m)->field1)[5] = (str)
+# define xcondition_set_name(cv,str) ((char**)(cv)->field1)[5] = (str)
+# endif /* DEBUG */
+# endif /* _CMA_VENDOR_ == _CMA__IBM */
+# endif /* USE_NBSD_THREADLIB */
+# endif /* USE_TIS_SUPPORT */
+# endif /* WIN32 */
+# endif /* SVR4 */
+# endif /* CTHREADS */
+typedef xcondition_rec *xcondition_t;
+typedef xmutex_rec *xmutex_t;
+# ifndef xcondition_malloc
+# define xcondition_malloc() (xcondition_t)xmalloc(sizeof(xcondition_rec))
+# endif
+# ifndef xcondition_free
+# define xcondition_free(c) xfree((char *)c)
+# endif
+# ifndef xmutex_malloc
+# define xmutex_malloc() (xmutex_t)xmalloc(sizeof(xmutex_rec))
+# endif
+# ifndef xmutex_free
+# define xmutex_free(m) xfree((char *)m)
+# endif
+# ifndef xthread_have_id
+# define xthread_have_id(id) id
+# endif
+# ifndef xthread_clear_id
+# define xthread_clear_id(id) id = 0
+# endif
+# ifndef xthread_equal
+# define xthread_equal(id1,id2) ((id1) == (id2))
+# endif
+/* aids understood by some debuggers */
+# ifndef xthread_set_name
+# define xthread_set_name(t,str)
+# endif
+# ifndef xmutex_set_name
+# define xmutex_set_name(m,str)
+# endif
+# ifndef xcondition_set_name
+# define xcondition_set_name(cv,str)
+# endif
+
+#endif /* _XTHREADS_H_ */
diff --git a/Xw32defs.h b/Xw32defs.h
new file mode 100644
index 0000000..b2e4b33
--- /dev/null
+++ b/Xw32defs.h
@@ -0,0 +1,79 @@
+#ifndef _XW32DEFS_H
+# define _XW32DEFS_H
+
+# ifdef __GNUC__ /* mingw is more close to unix than msvc */
+# if !defined(__daddr_t_defined)
+typedef char *caddr_t;
+# endif
+# define lstat stat
+
+# else
+typedef char *caddr_t;
+
+# define access _access
+# define alloca _alloca
+# define chdir _chdir
+# define chmod _chmod
+# define close _close
+# define creat _creat
+# define dup _dup
+# define dup2 _dup2
+# define environ _environ
+# define execl _execl
+# define execle _execle
+# define execlp _execlp
+# define execlpe _execlpe
+# define execv _execv
+# define execve _execve
+# define execvp _execvp
+# define execvpe _execvpe
+# define fdopen _fdopen
+# define fileno _fileno
+# define fstat _fstat
+# define getcwd _getcwd
+# define getpid _getpid
+# define hypot _hypot
+# define isascii __isascii
+# define isatty _isatty
+# define lseek _lseek
+# define mkdir _mkdir
+# define mktemp _mktemp
+# define open _open
+# define putenv _putenv
+# define read _read
+# define rmdir _rmdir
+# define sleep(x) Sleep((x) * 1000)
+# define stat _stat
+# define sys_errlist _sys_errlist
+# define sys_nerr _sys_nerr
+# define umask _umask
+# define unlink _unlink
+# define write _write
+# define random rand
+# define srandom srand
+
+# define O_RDONLY _O_RDONLY
+# define O_WRONLY _O_WRONLY
+# define O_RDWR _O_RDWR
+# define O_APPEND _O_APPEND
+# define O_CREAT _O_CREAT
+# define O_TRUNC _O_TRUNC
+# define O_EXCL _O_EXCL
+# define O_TEXT _O_TEXT
+# define O_BINARY _O_BINARY
+# define O_RAW _O_BINARY
+
+# define S_IFMT _S_IFMT
+# define S_IFDIR _S_IFDIR
+# define S_IFCHR _S_IFCHR
+# define S_IFREG _S_IFREG
+# define S_IREAD _S_IREAD
+# define S_IWRITE _S_IWRITE
+# define S_IEXEC _S_IEXEC
+
+# define F_OK 0
+# define X_OK 1
+# define W_OK 2
+# define R_OK 4
+# endif /* __GNUC__ */
+#endif
diff --git a/Xwindows.h b/Xwindows.h
new file mode 100644
index 0000000..6318155
--- /dev/null
+++ b/Xwindows.h
@@ -0,0 +1,91 @@
+/*
+
+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 MERCHANTABIL-
+ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABIL-
+ITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall
+not be 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 header file has the sole purpose of allowing the inclusion of
+ * windows.h without getting any name conflicts with X headers code, by
+ * renaming the conflicting definitions from windows.h
+ *
+ * Some (non-Microsoft) versions of the Windows API headers actually avoid
+ * making the conflicting definitions if XFree86Server is defined, so we
+ * need to remember if that was defined and undefine it during including
+ * windows.h (so the conflicting definitions get wrapped correctly), and
+ * then redefine it afterwards...
+ *
+ * There doesn't seem to be a good way to wrap the min/max macros from
+ * windows.h, so we simply avoid defining them completely, allowing any
+ * pre-existing definition to stand.
+ *
+ */
+
+#undef _XFree86Server
+#ifdef XFree86Server
+# define _XFree86Server
+# undef XFree86Server
+#endif
+
+#define NOMINMAX
+#define BOOL wBOOL
+#define INT32 wINT32
+#undef Status
+#define Status wStatus
+#define ATOM wATOM
+#define BYTE wBYTE
+#define FreeResource wFreeResource
+#include <windows.h>
+#undef NOMINMAX
+#undef Status
+#define Status int
+#undef BYTE
+#undef BOOL
+#undef INT32
+#undef ATOM
+#undef FreeResource
+#undef CreateWindowA
+
+#ifdef RESOURCE_H
+# undef RT_FONT
+# undef RT_CURSOR
+# define RT_FONT ((RESTYPE)4)
+# define RT_CURSOR ((RESTYPE)5)
+#endif
+
+#ifndef __CYGWIN__
+#define sleep(x) Sleep((x) * 1000)
+#endif
+
+#if defined(WIN32) && (!defined(PATH_MAX) || PATH_MAX < 1024)
+# undef PATH_MAX
+# define PATH_MAX 1024
+#endif
+
+#ifdef _XFree86Server
+# define XFree86Server
+# undef _XFree86Server
+#endif
+
diff --git a/Xwinsock.h b/Xwinsock.h
new file mode 100644
index 0000000..e6ca7b5
--- /dev/null
+++ b/Xwinsock.h
@@ -0,0 +1,65 @@
+/*
+
+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 MERCHANTABIL-
+ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABIL-
+ITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall
+not be 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 header file has for sole purpose to allow to include winsock.h
+ * without getting any name conflicts with our code.
+ * Conflicts come from the fact that including winsock.h actually pulls
+ * in the whole Windows API...
+ */
+
+#undef _XFree86Server
+#ifdef XFree86Server
+# define _XFree86Server
+# undef XFree86Server
+#endif
+
+#define BOOL wBOOL
+#define INT32 wINT32
+#undef Status
+#define Status wStatus
+#define ATOM wATOM
+#define BYTE wBYTE
+#define FreeResource wFreeResource
+#include <winsock2.h>
+#undef Status
+#define Status int
+#undef BYTE
+#undef BOOL
+#undef INT32
+#undef ATOM
+#undef FreeResource
+#undef CreateWindowA
+#undef RT_FONT
+#undef RT_CURSOR
+
+#ifdef _XFree86Server
+# define XFree86Server
+# undef _XFree86Server
+#endif
+
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..464110b
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,3027 @@
+# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009 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_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
+[m4_warning([this file was generated for autoconf 2.68.
+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, 2003, 2005, 2006, 2007, 2008 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.11'
+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.11.1], [],
+ [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.11.1])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, 2003, 2005 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],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
+# 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.
+
+# serial 9
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$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, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+# 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.
+
+# serial 10
+
+# 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", "GCJ", or "OBJC".
+# 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
+
+ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
+ [$1], CXX, [depcc="$CXX" am_compiler_list=],
+ [$1], OBJC, [depcc="$OBJC" 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'.
+ 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 8's {/usr,}/bin/sh.
+ touch 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
+ ;;
+ 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,
+[ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# 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.
+
+#serial 5
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+ # Autoconf 2.62 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"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //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' -e 's/\$U/'"$U"'/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, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008, 2009 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.
+
+# serial 16
+
+# 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.
+
+# 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.62])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],
+[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], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+ [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([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target. 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)],
+ [define([AC_PROG_CC],
+ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES(CXX)],
+ [define([AC_PROG_CXX],
+ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES(OBJC)],
+ [define([AC_PROG_OBJC],
+ defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
+dnl 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
+])
+
+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, 2003, 2005, 2008 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}" != 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, 2005 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.
+
+# serial 2
+
+# 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])])
+
+# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# 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.
+
+# serial 5
+
+# AM_MAINTAINER_MODE([DEFAULT-MODE])
+# ----------------------------------
+# Control maintainer-specific portions of Makefiles.
+# Default is to disable them, unless `enable' is passed literally.
+# For symmetry, `disable' may be passed as well. Anyway, the user
+# can override the default with the --enable/--disable switch.
+AC_DEFUN([AM_MAINTAINER_MODE],
+[m4_case(m4_default([$1], [disable]),
+ [enable], [m4_define([am_maintainer_other], [disable])],
+ [disable], [m4_define([am_maintainer_other], [enable])],
+ [m4_define([am_maintainer_other], [enable])
+ m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
+AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles])
+ dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+ AC_ARG_ENABLE([maintainer-mode],
+[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer],
+ [USE_MAINTAINER_MODE=$enableval],
+ [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+ AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+ AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+ MAINT=$MAINTAINER_MODE_TRUE
+ AC_SUBST([MAINT])dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2009 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.
+
+# serial 4
+
+# 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, 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# 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.
+
+# serial 6
+
+# 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 supports --run.
+# If it does, 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 --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006 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_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+ [[\\/$]]* | ?:[[\\/]]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008 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.
+
+# serial 4
+
+# _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])])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
+# 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.
+
+# serial 5
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# 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 (
+ 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
+ rm -f conftest.file
+ 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
+
+ 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)])
+
+# Copyright (C) 2009 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.
+
+# serial 1
+
+# 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],
+[ --enable-silent-rules less verbose build output (undo: `make V=1')
+ --disable-silent-rules verbose build output (undo: `make V=0')])
+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
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+
+# Copyright (C) 2001, 2003, 2005 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, 2008 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.
+
+# serial 2
+
+# _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, 2005 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.
+
+# serial 2
+
+# _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.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+ [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+ [m4_case([$1], [ustar],, [pax],,
+ [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+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])
+ 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
+
+# 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.17])
+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
+ 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)
+]) # 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
+#
+# 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])
+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])
+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_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_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);
+])],
+ [MALLOC_ZERO_RETURNS_NULL=yes],
+ [MALLOC_ZERO_RETURNS_NULL=no],
+ [MALLOC_ZERO_RETURNS_NULL=yes])
+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_unknown_warning_option" = "xyes" ; then
+ PREFIX[FLAGS]="$PREFIX[FLAGS] -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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])
+ 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]], [-Wcast-qual])
+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])
+
+# 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]], [-Wlogical-op])
+# XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wparentheses])
+# XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wcast-align])
+
+# 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
+
diff --git a/ap_keysym.h b/ap_keysym.h
new file mode 100644
index 0000000..9a11971
--- /dev/null
+++ b/ap_keysym.h
@@ -0,0 +1,51 @@
+/******************************************************************
+Copyright 1987 by Apollo Computer Inc., Chelmsford, Massachusetts.
+Copyright 1989 by Hewlett-Packard Company.
+
+ All Rights Reserved
+
+Permission to use, duplicate, change, and distribute this software and
+its documentation for any purpose and without fee is granted, provided
+that the above copyright notice appear in such copy and that this
+copyright notice appear in all supporting documentation, and that the
+names of Apollo Computer Inc., the Hewlett-Packard Company, or the X
+Consortium not be used in advertising or publicity pertaining to
+distribution of the software without written prior permission.
+
+HEWLETT-PACKARD MAKES NO WARRANTY OF ANY KIND WITH REGARD
+TO THIS SOFWARE, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. Hewlett-Packard shall not be liable for errors
+contained herein or direct, indirect, special, incidental or
+consequential damages in connection with the furnishing,
+performance, or use of this material.
+
+This software is not subject to any license of the American
+Telephone and Telegraph Company or of the Regents of the
+University of California.
+******************************************************************/
+
+#define apXK_LineDel 0x1000FF00
+#define apXK_CharDel 0x1000FF01
+#define apXK_Copy 0x1000FF02
+#define apXK_Cut 0x1000FF03
+#define apXK_Paste 0x1000FF04
+#define apXK_Move 0x1000FF05
+#define apXK_Grow 0x1000FF06
+#define apXK_Cmd 0x1000FF07
+#define apXK_Shell 0x1000FF08
+#define apXK_LeftBar 0x1000FF09
+#define apXK_RightBar 0x1000FF0A
+#define apXK_LeftBox 0x1000FF0B
+#define apXK_RightBox 0x1000FF0C
+#define apXK_UpBox 0x1000FF0D
+#define apXK_DownBox 0x1000FF0E
+#define apXK_Pop 0x1000FF0F
+#define apXK_Read 0x1000FF10
+#define apXK_Edit 0x1000FF11
+#define apXK_Save 0x1000FF12
+#define apXK_Exit 0x1000FF13
+#define apXK_Repeat 0x1000FF14
+
+#define apXK_KP_parenleft 0x1000FFA8
+#define apXK_KP_parenright 0x1000FFA9
diff --git a/config.guess b/config.guess
new file mode 100644
index 0000000..2852378
--- /dev/null
+++ b/config.guess
@@ -0,0 +1,1505 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# Free Software Foundation, Inc.
+
+timestamp='2010-08-21'
+
+# 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 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., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, 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.
+
+
+# Originally written by Per Bothner. Please send patches (context
+# diff format) to <config-patches@gnu.org> and include a ChangeLog
+# entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub. If it succeeds, it prints the system name on stdout, and
+# exits with 0. Otherwise, it exits with 1.
+#
+# 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
+
+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 <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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' HUP INT TERM
+
+# 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" HUP INT PIPE TERM ;
+: ${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
+
+# 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 tupples: *-*-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 ;;
+ *: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'`
+ exit ;;
+ 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 <stdio.h> /* 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 <sys/systemcfg.h>
+
+ 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/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ 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 <stdlib.h>
+ #include <unistd.h>
+
+ 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 <unistd.h>
+ 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:*:*)
+ case ${UNAME_MACHINE} in
+ pc98)
+ echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ amd64)
+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ *)
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ esac
+ exit ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit ;;
+ *:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ 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-gnu`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/[-(].*//'`-gnu
+ exit ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ 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="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${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-gnu
+ else
+ echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+ fi
+ exit ;;
+ avr32*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ cris:Linux:*:*)
+ echo cris-axis-linux-gnu
+ exit ;;
+ crisv32:Linux:*:*)
+ echo crisv32-axis-linux-gnu
+ exit ;;
+ frv:Linux:*:*)
+ echo frv-unknown-linux-gnu
+ exit ;;
+ i*86:Linux:*:*)
+ LIBC=gnu
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #ifdef __dietlibc__
+ LIBC=dietlibc
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+ exit ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ 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-gnu"; exit; }
+ ;;
+ or32:Linux:*:*)
+ echo or32-unknown-linux-gnu
+ exit ;;
+ padre:Linux:*:*)
+ echo sparc-unknown-linux-gnu
+ exit ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-gnu
+ 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-gnu ;;
+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
+ *) echo hppa-unknown-linux-gnu ;;
+ esac
+ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-gnu
+ exit ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit ;;
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ tile*:Linux:*:*)
+ echo ${UNAME_MACHINE}-tilera-linux-gnu
+ exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-gnu
+ exit ;;
+ x86_64:Linux:*:*)
+ echo x86_64-unknown-linux-gnu
+ exit ;;
+ xtensa*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ 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' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/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 <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # 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 ;;
+ 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
+ case $UNAME_PROCESSOR in
+ i386)
+ eval $set_cc_for_build
+ 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
+ UNAME_PROCESSOR="x86_64"
+ fi
+ fi ;;
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ 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 ;;
+ 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 ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ c34*)
+ echo c34-convex-bsd
+ exit ;;
+ c38*)
+ echo c38-convex-bsd
+ exit ;;
+ c4*)
+ echo c4-convex-bsd
+ exit ;;
+ esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> 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:
diff --git a/config.sub b/config.sub
new file mode 100644
index 0000000..320e303
--- /dev/null
+++ b/config.sub
@@ -0,0 +1,1739 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# Free Software Foundation, Inc.
+
+timestamp='2010-09-11'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine. It does not imply ALL GNU software can.
+#
+# 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 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., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, 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.
+
+
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted GNU ChangeLog entry.
+#
+# 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 <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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-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/'`
+ ;;
+ *)
+ 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*)
+ 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 \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+ | bfin \
+ | c4x | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | fido | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+ | lm32 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | 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 \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nds32 | nds32le | nds32be \
+ | nios | nios2 \
+ | ns16k | ns32k \
+ | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | pyramid \
+ | 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 | strongarm \
+ | tahoe | thumb | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+ | ubicom32 \
+ | v850 | v850e \
+ | we32k \
+ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+ | z8k | z80)
+ basic_machine=$basic_machine-unknown
+ ;;
+ c54x)
+ basic_machine=tic54x-unknown
+ ;;
+ c55x)
+ basic_machine=tic55x-unknown
+ ;;
+ c6x)
+ basic_machine=tic6x-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12 | picochip)
+ # Motorola 68HC11/12.
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+ ms1)
+ basic_machine=mt-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-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* | avr32-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* \
+ | 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-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | lm32-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+ | 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-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
+ | msp430-* \
+ | nds32-* | nds32le-* | nds32be-* \
+ | nios-* | nios2-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | pyramid-* \
+ | 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-* | strongarm-* | sv1-* | sx?-* \
+ | tahoe-* | thumb-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tile-* | tilegx-* \
+ | tron-* \
+ | ubicom32-* \
+ | v850-* | v850e-* | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+ | 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)
+ 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'm not sure what "Sysv32" means. Should this be sysv3.2?
+ 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
+ ;;
+ 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
+ ;;
+ mingw32)
+ basic_machine=i386-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
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ 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) basic_machine=powerpc-unknown
+ ;;
+ ppc-*) 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)
+ 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
+ ;;
+ 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
+ ;;
+ # This must be matched before tile*.
+ tilegx*)
+ basic_machine=tilegx-unknown
+ os=-linux-gnu
+ ;;
+ tile*)
+ basic_machine=tile-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
+ ;;
+ 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* \
+ | -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* \
+ | -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* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -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*)
+ # 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
+ ;;
+ -kaos*)
+ os=-kaos
+ ;;
+ -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
+ ;;
+ 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
+ # This also exists in the configure program, but was not the
+ # default.
+ # os=-sunos4
+ ;;
+ 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:
diff --git a/configure b/configure
new file mode 100755
index 0000000..01e5589
--- /dev/null
+++ b/configure
@@ -0,0 +1,12848 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.68 for Xproto 7.0.23.
+#
+# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>.
+#
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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
+
+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"
+ 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"
+ 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 :
+ # 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
+ export CONFIG_SHELL
+ 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+"$@"}
+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_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; }
+
+ # 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 -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+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
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# 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'"
+
+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 </dev/null
+exec 6>&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='Xproto'
+PACKAGE_TARNAME='xproto'
+PACKAGE_VERSION='7.0.23'
+PACKAGE_STRING='Xproto 7.0.23'
+PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg'
+PACKAGE_URL=''
+
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIBOBJS
+USE_FDS_BITS
+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
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+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
+SED
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+INSTALL_CMD
+PKG_CONFIG
+CHANGELOG_CMD
+STRICT_CFLAGS
+CWARNFLAGS
+BASE_CFLAGS
+EGREP
+GREP
+CPP
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
+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
+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_maintainer_mode
+enable_dependency_tracking
+enable_selective_werror
+enable_strict_compilation
+enable_silent_rules
+enable_specs
+with_xmlto
+with_fop
+with_xsltproc
+enable_function_prototypes
+enable_varargs_prototypes
+enable_const_prototypes
+enable_nested_prototypes
+enable_wide_prototypes
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+PKG_CONFIG
+XMLTO
+FOP
+XSLTPROC'
+
+
+# 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
+ $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used" >&2
+ 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 Xproto 7.0.23 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/xproto]
+ --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 Xproto 7.0.23:";;
+ 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-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer
+ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors
+ --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-silent-rules less verbose build output (undo: `make V=1')
+ --disable-silent-rules verbose build output (undo: `make V=0')
+ --enable-specs Enable building the specs (default: yes)
+ --enable-function-prototypes
+ force function prototypes (default: auto)
+ --enable-varargs-prototypes
+ varargs prototypes are supported (default: auto)
+ --enable-const-prototypes
+ const is supported (default: auto)
+ --enable-nested-prototypes
+ nested prototypes are supported (default: auto)
+ --enable-wide-prototypes
+ widen function prototypes (default: auto)
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-xmlto Use xmlto to regenerate documentation (default:
+ auto)
+ --with-fop Use fop to regenerate documentation (default: auto)
+ --with-xsltproc Use xsltproc for the transformation of XML documents
+ (default: auto)
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ 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
+
+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 <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>.
+_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
+Xproto configure 7.0.23
+generated by GNU Autoconf 2.68
+
+Copyright (C) 2010 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_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_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_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 ||
+ $as_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_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_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
+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 Xproto $as_me 7.0.23, which was
+generated by GNU Autoconf 2.68. 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
+
+# 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
+
+
+am__api_version='1.11'
+
+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.
+
+
+# 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 { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# 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 (
+ 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
+ rm -f conftest.file
+ 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
+
+ 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; }
+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"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+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 --run true"; then
+ am_missing_run="$MISSING --run "
+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}" != 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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
+ { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+ [\\/$]* | ?:[\\/]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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
+
+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='xproto'
+ VERSION='7.0.23'
+
+
+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"}
+
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+ # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then :
+ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+ USE_MAINTAINER_MODE=no
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+ if test $USE_MAINTAINER_MODE = yes; then
+ MAINTAINER_MODE_TRUE=
+ MAINTAINER_MODE_FALSE='#'
+else
+ MAINTAINER_MODE_TRUE='#'
+ MAINTAINER_MODE_FALSE=
+fi
+
+ MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+# Require xorg-macros minimum of 1.12 for DocBook external references
+
+
+
+
+
+
+
+
+
+
+
+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='\'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+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
+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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 <stdio.h>
+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 <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* 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
+
+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'.
+ 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 8's {/usr,}/bin/sh.
+ touch 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
+ ;;
+ 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
+
+
+ { $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 <stdarg.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <wchar.h>
+#include <stdio.h>
+
+// 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 -xc99=all -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_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 <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> 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 <limits.h>
+#else
+# include <assert.h>
+#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 <ac_nonexistent.h>
+_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 <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> 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 <limits.h>
+#else
+# include <assert.h>
+#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 <ac_nonexistent.h>
+_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"
+ { test -f "$ac_path_GREP" && $as_test_x "$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"
+ { test -f "$ac_path_EGREP" && $as_test_x "$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 <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+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 <string.h>
+
+_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 <stdlib.h>
+
+_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 <ctype.h>
+#include <stdlib.h>
+#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_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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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
+# 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
+
+
+{ $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"
+ { test -f "$ac_path_SED" && $as_test_x "$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
+
+
+
+
+
+
+# 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Wformat=2" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_unused_command_line_argument" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unused-command-line-argument"
+ fi
+
+ CFLAGS="$CFLAGS -Wcast-qual"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports-Wcast-qual" >&5
+$as_echo_n "checking if $CC supports-Wcast-qual... " >&6; }
+ cacheid=xorg_cv_cc_flag__Wcast_qual
+ 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 -Wcast-qual"
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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
+
+
+
+# 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]], [-Wlogical-op])
+# XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wparentheses])
+# XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wcast-align])
+
+# 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=implicit" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-errwarn=E_NO_EXPLICIT_TYPE_GIVEN -errwarn=E_NO_IMPLICIT_DECL_ALLOWED" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=nonnull" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=init-self" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=main" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=missing-braces" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=sequence-point" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=return-type" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-errwarn=E_FUNC_HAS_NO_RETURN_STMT" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=trigraphs" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=array-bounds" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=write-strings" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=address" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=int-to-pointer-cast" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-errwarn=E_BAD_PTR_INT_COMBINATION" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=pointer-to-int-cast" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=attributes" | $as_tr_sh`
+ 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_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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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=auto
+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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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.8" >&5
+$as_echo_n "checking for X.Org SGML entities >= 1.8... " >&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.8\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "xorg-sgml-doctools >= 1.8") 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
+
+
+
+ac_config_headers="$ac_config_headers do-not-use-config.h"
+
+ac_config_headers="$ac_config_headers Xfuncproto.h"
+
+
+
+
+
+
+# Check for enable/disable options
+# Check whether --enable-function-prototypes was given.
+if test "${enable_function_prototypes+set}" = set; then :
+ enableval=$enable_function_prototypes; FUNCPROTO=$enableval
+else
+ FUNCPROTO=auto
+fi
+
+# Check whether --enable-varargs-prototypes was given.
+if test "${enable_varargs_prototypes+set}" = set; then :
+ enableval=$enable_varargs_prototypes; VAPROTO=$enableval
+else
+ VAPROTO=auto
+fi
+
+# Check whether --enable-const-prototypes was given.
+if test "${enable_const_prototypes+set}" = set; then :
+ enableval=$enable_const_prototypes; CONSTPROTO=$enableval
+else
+ CONSTPROTO=auto
+fi
+
+# Check whether --enable-nested-prototypes was given.
+if test "${enable_nested_prototypes+set}" = set; then :
+ enableval=$enable_nested_prototypes; NESTEDPROTO=$enableval
+else
+ NESTEDPROTO=auto
+fi
+
+# Check whether --enable-wide-prototypes was given.
+if test "${enable_wide_prototypes+set}" = set; then :
+ enableval=$enable_wide_prototypes; WIDEPROTO=$enableval
+else
+ WIDEPROTO=auto
+fi
+
+
+
+for ac_header in sys/select.h sys/param.h sys/types.h sys/time.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$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
+
+
+# Handle Xpoll.h.in
+# Avoid determining fds_bits on WIN32 hosts (not including cygwin)
+case $host_os in
+ mingw*) fds_bits_found=true;;
+ *) fds_bits_found=false;;
+esac
+
+if test "x$fds_bits_found" = xfalse ; then
+ ac_fn_c_check_member "$LINENO" "fd_set" "fds_bits" "ac_cv_member_fd_set_fds_bits" "
+ #ifdef HAVE_SYS_PARAM_H
+ #include <sys/param.h>
+ #endif
+ #ifdef HAVE_SYS_TYPES_H
+ #include <sys/types.h>
+ #endif
+ #ifdef HAVE_SYS_TIME_H
+ #include <sys/time.h>
+ #endif
+ #ifdef HAVE_SYS_SELECT_H
+ #include <sys/select.h>
+ #endif
+
+"
+if test "x$ac_cv_member_fd_set_fds_bits" = xyes; then :
+
+ fds_bits_found=plain
+ USE_FDS_BITS="fds_bits"
+
+fi
+
+fi
+
+if test "x$fds_bits_found" = xfalse ; then
+ ac_fn_c_check_member "$LINENO" "fd_set" "__fds_bits" "ac_cv_member_fd_set___fds_bits" "
+ #ifdef HAVE_SYS_PARAM_H
+ #include <sys/param.h>
+ #endif
+ #ifdef HAVE_SYS_TYPES_H
+ #include <sys/types.h>
+ #endif
+ #ifdef HAVE_SYS_TIME_H
+ #include <sys/time.h>
+ #endif
+ #ifdef HAVE_SYS_SELECT_H
+ #include <sys/select.h>
+ #endif
+
+"
+if test "x$ac_cv_member_fd_set___fds_bits" = xyes; then :
+
+ fds_bits_found=underscores
+ USE_FDS_BITS="__fds_bits"
+
+fi
+
+fi
+
+if test "x$fds_bits_found" = xfalse ; then
+ as_fn_error $? "Could not determine how to access the fds_bits or equivalent
+ structure in fd_set on your platform." "$LINENO" 5
+fi
+
+
+
+
+# Handle Xfuncproto.h
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether const prototypes are supported" >&5
+$as_echo_n "checking whether const prototypes are supported... " >&6; }
+if test "x$CONSTPROTO" = xauto; then
+ case $host_os in
+ linux*) CONSTPROTO=yes ;;
+ freebsd*) CONSTPROTO=yes ;;
+ netbsd*) CONSTPROTO=yes ;;
+ openbsd*) CONSTPROTO=yes ;;
+ solaris*) CONSTPROTO=yes ;;
+ *) CONSTPROTO=no ;;
+ esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CONSTPROTO" >&5
+$as_echo "$CONSTPROTO" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether varargs prototypes are supported" >&5
+$as_echo_n "checking whether varargs prototypes are supported... " >&6; }
+if test "x$VAPROTO" = xauto; then
+ case $host_os in
+ linux*) VAPROTO=yes ;;
+ freebsd*) VAPROTO=yes ;;
+ netbsd*) VAPROTO=yes ;;
+ openbsd*) VAPROTO=yes ;;
+ solaris*) VAPROTO=yes ;;
+ *) VAPROTO=no ;;
+ esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $VAPROTO" >&5
+$as_echo "$VAPROTO" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether nested prototypes are supported" >&5
+$as_echo_n "checking whether nested prototypes are supported... " >&6; }
+if test "x$NESTEDPROTO" = xauto; then
+ case $host_os in
+ linux*) NESTEDPROTO=yes ;;
+ freebsd*) NESTEDPROTO=yes ;;
+ netbsd*) NESTEDPROTO=yes ;;
+ openbsd*) NESTEDPROTO=yes ;;
+ solaris*) NESTEDPROTO=yes ;;
+ *) NESTEDPROTO=no ;;
+ esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $NESTEDPROTO" >&5
+$as_echo "$NESTEDPROTO" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to force function prototypes" >&5
+$as_echo_n "checking whether to force function prototypes... " >&6; }
+if test "x$FUNCPROTO" = xauto; then
+ case $host_os in
+ linux*) FUNCPROTO=yes ;;
+ freebsd*) FUNCPROTO=yes ;;
+ netbsd*) FUNCPROTO=yes ;;
+ openbsd*) FUNCPROTO=yes ;;
+ *)
+ if test "x$VAPROTO" = xyes && test "x$NESTEDPROTO" = xyes; then
+ FUNCPROTO=yes
+ else
+ FUNCPROTO=no
+ fi
+ ;;
+ esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $FUNCPROTO" >&5
+$as_echo "$FUNCPROTO" >&6; }
+
+# Logic for this was taken from Imake.tmpl
+if test "x$FUNCPROTO" = xyes && test "x$VAPROTO" = xyes && test "x$NESTEDPROTO" = xyes && test "x$CONSTPROTO" = xyes; then
+
+$as_echo "#define FUNCPROTO 15" >>confdefs.h
+
+else
+ if test "x$FUNCPROTO" = xyes && test "x$VAPROTO" = xyes && test "x$NESTEDPROTO" = xyes; then
+
+$as_echo "#define FUNCPROTO 11" >>confdefs.h
+
+ else
+ if test "x$FUNCPROTO" = xyes && test "x$NESTEDPROTO" = xyes; then
+
+$as_echo "#define FUNCPROTO 9" >>confdefs.h
+
+ else
+ if test "x$FUNCPROTO" = xyes && test "x$VAPROTO" = xyes && test "x$CONSTPROTO" = xyes; then
+
+$as_echo "#define FUNCPROTO 7" >>confdefs.h
+
+ else
+ if test "x$FUNCPROTO" = xyes && test "x$CONSTPROTO" = xyes; then
+
+$as_echo "#define FUNCPROTO 5" >>confdefs.h
+
+ else
+ if test "x$FUNCPROTO" = xyes && test "x$VAPROTO" = xyes; then
+
+$as_echo "#define FUNCPROTO 3" >>confdefs.h
+
+ else
+ if test "x$FUNCPROTO" = xyes; then
+
+$as_echo "#define FUNCPROTO /**/" >>confdefs.h
+
+ fi
+ fi
+ fi
+ fi
+ fi
+ fi
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to widen function prototypes" >&5
+$as_echo_n "checking whether to widen function prototypes... " >&6; }
+if test "x$WIDEPROTO" = xauto; then
+ case $host_os in
+ linux*) WIDEPROTO=no ;;
+ freebsd*) WIDEPROTO=no ;;
+ netbsd*) WIDEPROTO=no ;;
+ openbsd*) WIDEPROTO=no ;;
+ *) WIDEPROTO=yes ;;
+ esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $WIDEPROTO" >&5
+$as_echo "$WIDEPROTO" >&6; }
+
+if test "x$WIDEPROTO" = xno; then
+
+$as_echo "#define NARROWPROTO /**/" >>confdefs.h
+
+fi
+
+
+ac_config_files="$ac_config_files Makefile specs/Makefile specs/SIAddresses/Makefile Xpoll.h xproto.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
+
+
+ if test -n "$EXEEXT"; then
+ am__EXEEXT_TRUE=
+ am__EXEEXT_FALSE='#'
+else
+ am__EXEEXT_TRUE='#'
+ am__EXEEXT_FALSE=
+fi
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+ as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+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 -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
+
+: "${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 -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+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
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# 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 Xproto $as_me 7.0.23, which was
+generated by GNU Autoconf 2.68. 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 <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+Xproto config.status 7.0.23
+configured by $0, generated by GNU Autoconf 2.68,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2010 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"
+
+_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
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "do-not-use-config.h") CONFIG_HEADERS="$CONFIG_HEADERS do-not-use-config.h" ;;
+ "Xfuncproto.h") CONFIG_HEADERS="$CONFIG_HEADERS Xfuncproto.h" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "specs/Makefile") CONFIG_FILES="$CONFIG_FILES specs/Makefile" ;;
+ "specs/SIAddresses/Makefile") CONFIG_FILES="$CONFIG_FILES specs/SIAddresses/Makefile" ;;
+ "Xpoll.h") CONFIG_FILES="$CONFIG_FILES Xpoll.h" ;;
+ "xproto.pc") CONFIG_FILES="$CONFIG_FILES xproto.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 2>/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
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$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
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$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"" || {
+ # Autoconf 2.62 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"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //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' -e 's/\$U/'"$U"'/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
+}
+ ;;
+
+ 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
+
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..4bd61fe
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,217 @@
+AC_PREREQ([2.60])
+AC_INIT([Xproto], [7.0.23],
+ [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg])
+AM_INIT_AUTOMAKE([foreign dist-bzip2])
+AM_MAINTAINER_MODE
+
+# Require xorg-macros minimum of 1.12 for DocBook external references
+m4_ifndef([XORG_MACROS_VERSION],
+ [m4_fatal([must install xorg-macros 1.12 or later before running autoconf/autogen])])
+XORG_MACROS_VERSION(1.12)
+XORG_DEFAULT_OPTIONS
+XORG_ENABLE_SPECS
+XORG_WITH_XMLTO(0.0.22)
+XORG_WITH_FOP
+XORG_WITH_XSLTPROC
+XORG_CHECK_SGML_DOCTOOLS(1.8)
+
+AC_CONFIG_HEADER([do-not-use-config.h])
+AC_CONFIG_HEADER([Xfuncproto.h])
+
+AC_CANONICAL_HOST
+
+m4_ifdef([AS_HELP_STRING], , [m4_define([AS_HELP_STRING], m4_defn([AC_HELP_STRING]))])
+
+# Check for enable/disable options
+AC_ARG_ENABLE(function-prototypes,
+ AS_HELP_STRING([--enable-function-prototypes],
+ [force function prototypes (default: auto)]),
+ [FUNCPROTO=$enableval], [FUNCPROTO=auto])
+AC_ARG_ENABLE(varargs-prototypes,
+ AS_HELP_STRING([--enable-varargs-prototypes],
+ [varargs prototypes are supported (default: auto)]),
+ [VAPROTO=$enableval], [VAPROTO=auto])
+AC_ARG_ENABLE(const-prototypes,
+ AS_HELP_STRING([--enable-const-prototypes],
+ [const is supported (default: auto)]),
+ [CONSTPROTO=$enableval], [CONSTPROTO=auto])
+AC_ARG_ENABLE(nested-prototypes,
+ AS_HELP_STRING([--enable-nested-prototypes],
+ [nested prototypes are supported (default: auto)]),
+ [NESTEDPROTO=$enableval], [NESTEDPROTO=auto])
+AC_ARG_ENABLE(wide-prototypes,
+ AS_HELP_STRING([--enable-wide-prototypes],
+ [widen function prototypes (default: auto)]),
+ [WIDEPROTO=$enableval], [WIDEPROTO=auto])
+
+
+AC_CHECK_HEADERS([sys/select.h sys/param.h sys/types.h sys/time.h])
+
+# Handle Xpoll.h.in
+# Avoid determining fds_bits on WIN32 hosts (not including cygwin)
+case $host_os in
+ mingw*) fds_bits_found=true;;
+ *) fds_bits_found=false;;
+esac
+
+if test "x$fds_bits_found" = xfalse ; then
+ AC_CHECK_MEMBER(fd_set.fds_bits,
+ [
+ fds_bits_found=plain
+ USE_FDS_BITS="fds_bits"
+ ],,
+ [
+ #ifdef HAVE_SYS_PARAM_H
+ #include <sys/param.h>
+ #endif
+ #ifdef HAVE_SYS_TYPES_H
+ #include <sys/types.h>
+ #endif
+ #ifdef HAVE_SYS_TIME_H
+ #include <sys/time.h>
+ #endif
+ #ifdef HAVE_SYS_SELECT_H
+ #include <sys/select.h>
+ #endif
+ ])
+fi
+
+if test "x$fds_bits_found" = xfalse ; then
+ AC_CHECK_MEMBER(fd_set.__fds_bits,
+ [
+ fds_bits_found=underscores
+ USE_FDS_BITS="__fds_bits"
+ ],,
+ [
+ #ifdef HAVE_SYS_PARAM_H
+ #include <sys/param.h>
+ #endif
+ #ifdef HAVE_SYS_TYPES_H
+ #include <sys/types.h>
+ #endif
+ #ifdef HAVE_SYS_TIME_H
+ #include <sys/time.h>
+ #endif
+ #ifdef HAVE_SYS_SELECT_H
+ #include <sys/select.h>
+ #endif
+ ])
+fi
+
+if test "x$fds_bits_found" = xfalse ; then
+ AC_MSG_ERROR([Could not determine how to access the fds_bits or equivalent
+ structure in fd_set on your platform.])
+fi
+
+AC_SUBST([USE_FDS_BITS])
+
+
+# Handle Xfuncproto.h
+AC_MSG_CHECKING([whether const prototypes are supported])
+if test "x$CONSTPROTO" = xauto; then
+ case $host_os in
+ linux*) CONSTPROTO=yes ;;
+ freebsd*) CONSTPROTO=yes ;;
+ netbsd*) CONSTPROTO=yes ;;
+ openbsd*) CONSTPROTO=yes ;;
+ solaris*) CONSTPROTO=yes ;;
+ *) CONSTPROTO=no ;;
+ esac
+fi
+AC_MSG_RESULT([$CONSTPROTO])
+
+AC_MSG_CHECKING([whether varargs prototypes are supported])
+if test "x$VAPROTO" = xauto; then
+ case $host_os in
+ linux*) VAPROTO=yes ;;
+ freebsd*) VAPROTO=yes ;;
+ netbsd*) VAPROTO=yes ;;
+ openbsd*) VAPROTO=yes ;;
+ solaris*) VAPROTO=yes ;;
+ *) VAPROTO=no ;;
+ esac
+fi
+AC_MSG_RESULT([$VAPROTO])
+
+AC_MSG_CHECKING([whether nested prototypes are supported])
+if test "x$NESTEDPROTO" = xauto; then
+ case $host_os in
+ linux*) NESTEDPROTO=yes ;;
+ freebsd*) NESTEDPROTO=yes ;;
+ netbsd*) NESTEDPROTO=yes ;;
+ openbsd*) NESTEDPROTO=yes ;;
+ solaris*) NESTEDPROTO=yes ;;
+ *) NESTEDPROTO=no ;;
+ esac
+fi
+AC_MSG_RESULT([$NESTEDPROTO])
+
+AC_MSG_CHECKING([whether to force function prototypes])
+if test "x$FUNCPROTO" = xauto; then
+ case $host_os in
+ linux*) FUNCPROTO=yes ;;
+ freebsd*) FUNCPROTO=yes ;;
+ netbsd*) FUNCPROTO=yes ;;
+ openbsd*) FUNCPROTO=yes ;;
+ *)
+ if test "x$VAPROTO" = xyes && test "x$NESTEDPROTO" = xyes; then
+ FUNCPROTO=yes
+ else
+ FUNCPROTO=no
+ fi
+ ;;
+ esac
+fi
+AC_MSG_RESULT([$FUNCPROTO])
+
+# Logic for this was taken from Imake.tmpl
+if test "x$FUNCPROTO" = xyes && test "x$VAPROTO" = xyes && test "x$NESTEDPROTO" = xyes && test "x$CONSTPROTO" = xyes; then
+ AC_DEFINE(FUNCPROTO, [15], [FUNCPROTO])
+else
+ if test "x$FUNCPROTO" = xyes && test "x$VAPROTO" = xyes && test "x$NESTEDPROTO" = xyes; then
+ AC_DEFINE(FUNCPROTO, [11], [FUNCPROTO])
+ else
+ if test "x$FUNCPROTO" = xyes && test "x$NESTEDPROTO" = xyes; then
+ AC_DEFINE(FUNCPROTO, [9], [FUNCPROTO])
+ else
+ if test "x$FUNCPROTO" = xyes && test "x$VAPROTO" = xyes && test "x$CONSTPROTO" = xyes; then
+ AC_DEFINE(FUNCPROTO, [7], [FUNCPROTO])
+ else
+ if test "x$FUNCPROTO" = xyes && test "x$CONSTPROTO" = xyes; then
+ AC_DEFINE(FUNCPROTO, [5], [FUNCPROTO])
+ else
+ if test "x$FUNCPROTO" = xyes && test "x$VAPROTO" = xyes; then
+ AC_DEFINE(FUNCPROTO, [3], [FUNCPROTO])
+ else
+ if test "x$FUNCPROTO" = xyes; then
+ AC_DEFINE(FUNCPROTO, [], [FUNCPROTO])
+ fi
+ fi
+ fi
+ fi
+ fi
+ fi
+fi
+
+AC_MSG_CHECKING([whether to widen function prototypes])
+if test "x$WIDEPROTO" = xauto; then
+ case $host_os in
+ linux*) WIDEPROTO=no ;;
+ freebsd*) WIDEPROTO=no ;;
+ netbsd*) WIDEPROTO=no ;;
+ openbsd*) WIDEPROTO=no ;;
+ *) WIDEPROTO=yes ;;
+ esac
+fi
+AC_MSG_RESULT([$WIDEPROTO])
+
+if test "x$WIDEPROTO" = xno; then
+ AC_DEFINE(NARROWPROTO, [], [Narrow prototypes])
+fi
+
+
+AC_OUTPUT([Makefile
+ specs/Makefile
+ specs/SIAddresses/Makefile
+ Xpoll.h
+ xproto.pc])
diff --git a/do-not-use-config.h.in b/do-not-use-config.h.in
new file mode 100644
index 0000000..25b8013
--- /dev/null
+++ b/do-not-use-config.h.in
@@ -0,0 +1,79 @@
+/* do-not-use-config.h.in. Generated from configure.ac by autoheader. */
+
+/* FUNCPROTO */
+#undef FUNCPROTO
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_H
+
+/* Define to 1 if you have the <sys/select.h> header file. */
+#undef HAVE_SYS_SELECT_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Narrow prototypes */
+#undef NARROWPROTO
+
+/* 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
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Version number of package */
+#undef VERSION
diff --git a/docbook.am b/docbook.am
new file mode 100644
index 0000000..bba4d54
--- /dev/null
+++ b/docbook.am
@@ -0,0 +1,105 @@
+#
+# 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)
diff --git a/install-sh b/install-sh
new file mode 100755
index 0000000..6781b98
--- /dev/null
+++ b/install-sh
@@ -0,0 +1,520 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2009-04-28.21; # 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.
+
+nl='
+'
+IFS=" "" $nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+ doit_exec=exec
+else
+ doit_exec=$doit
+fi
+
+# 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_glob='?'
+initialize_posix_glob='
+ test "$posix_glob" != "?" || {
+ if (set -f) 2>/dev/null; then
+ posix_glob=
+ else
+ posix_glob=:
+ fi
+ }
+'
+
+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
+no_target_directory=
+
+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
+ *' '* | *' '* | *'
+'* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
+
+ -o) chowncmd="$chownprog $2"
+ shift;;
+
+ -s) stripcmd=$stripprog;;
+
+ -t) dst_arg=$2
+ shift;;
+
+ -T) no_target_directory=true;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ --) shift
+ break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
+ esac
+ shift
+done
+
+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
+ 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
+ trap '(exit $?); exit' 1 2 13 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 starting with `-'.
+ 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
+ # Protect names starting with `-'.
+ case $dst in
+ -*) dst=./$dst;;
+ esac
+
+ # 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 -n "$no_target_directory"; then
+ echo "$0: $dst_arg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dst=$dstdir/`basename "$src"`
+ dstdir_status=0
+ else
+ # Prefer dirname, but fall back on a substitute if dirname fails.
+ dstdir=`
+ (dirname "$dst") 2>/dev/null ||
+ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$dst" : 'X\(//\)[^/]' \| \
+ X"$dst" : 'X\(//\)$' \| \
+ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X"$dst" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'
+ `
+
+ 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-writeable 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
+
+ eval "$initialize_posix_glob"
+
+ oIFS=$IFS
+ IFS=/
+ $posix_glob set -f
+ set fnord $dstdir
+ shift
+ $posix_glob set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test -z "$d" && 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` &&
+
+ eval "$initialize_posix_glob" &&
+ $posix_glob set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ $posix_glob 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:
diff --git a/keysym.h b/keysym.h
new file mode 100644
index 0000000..4f58488
--- /dev/null
+++ b/keysym.h
@@ -0,0 +1,74 @@
+/***********************************************************
+
+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.
+
+******************************************************************/
+
+/* default keysyms */
+#define XK_MISCELLANY
+#define XK_XKB_KEYS
+#define XK_LATIN1
+#define XK_LATIN2
+#define XK_LATIN3
+#define XK_LATIN4
+#define XK_LATIN8
+#define XK_LATIN9
+#define XK_CAUCASUS
+#define XK_GREEK
+#define XK_KATAKANA
+#define XK_ARABIC
+#define XK_CYRILLIC
+#define XK_HEBREW
+#define XK_THAI
+#define XK_KOREAN
+#define XK_ARMENIAN
+#define XK_GEORGIAN
+#define XK_VIETNAMESE
+#define XK_CURRENCY
+#define XK_MATHEMATICAL
+#define XK_BRAILLE
+#define XK_SINHALA
+
+#include <X11/keysymdef.h>
+
diff --git a/keysymdef.h b/keysymdef.h
new file mode 100644
index 0000000..ae73977
--- /dev/null
+++ b/keysymdef.h
@@ -0,0 +1,2491 @@
+/***********************************************************
+Copyright 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.
+
+
+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.
+
+******************************************************************/
+
+/*
+ * The "X11 Window System Protocol" standard defines in Appendix A the
+ * keysym codes. These 29-bit integer values identify characters or
+ * functions associated with each key (e.g., via the visible
+ * engraving) of a keyboard layout. This file assigns mnemonic macro
+ * names for these keysyms.
+ *
+ * This file is also compiled (by src/util/makekeys.c in libX11) into
+ * hash tables that can be accessed with X11 library functions such as
+ * XStringToKeysym() and XKeysymToString().
+ *
+ * Where a keysym corresponds one-to-one to an ISO 10646 / Unicode
+ * character, this is noted in a comment that provides both the U+xxxx
+ * Unicode position, as well as the official Unicode name of the
+ * character.
+ *
+ * Where the correspondence is either not one-to-one or semantically
+ * unclear, the Unicode position and name are enclosed in
+ * parentheses. Such legacy keysyms should be considered deprecated
+ * and are not recommended for use in future keyboard mappings.
+ *
+ * For any future extension of the keysyms with characters already
+ * found in ISO 10646 / Unicode, the following algorithm shall be
+ * used. The new keysym code position will simply be the character's
+ * Unicode number plus 0x01000000. The keysym values in the range
+ * 0x01000100 to 0x0110ffff are reserved to represent Unicode
+ * characters in the range U+0100 to U+10FFFF.
+ *
+ * While most newer Unicode-based X11 clients do already accept
+ * Unicode-mapped keysyms in the range 0x01000100 to 0x0110ffff, it
+ * will remain necessary for clients -- in the interest of
+ * compatibility with existing servers -- to also understand the
+ * existing legacy keysym values in the range 0x0100 to 0x20ff.
+ *
+ * Where several mnemonic names are defined for the same keysym in this
+ * file, all but the first one listed should be considered deprecated.
+ *
+ * Mnemonic names for keysyms are defined in this file with lines
+ * that match one of these Perl regular expressions:
+ *
+ * /^\#define XK_([a-zA-Z_0-9]+)\s+0x([0-9a-f]+)\s*\/\* U+([0-9A-F]{4,6}) (.*) \*\/\s*$/
+ * /^\#define XK_([a-zA-Z_0-9]+)\s+0x([0-9a-f]+)\s*\/\*\(U+([0-9A-F]{4,6}) (.*)\)\*\/\s*$/
+ * /^\#define XK_([a-zA-Z_0-9]+)\s+0x([0-9a-f]+)\s*(\/\*\s*(.*)\s*\*\/)?\s*$/
+ *
+ * Before adding new keysyms, please do consider the following: In
+ * addition to the keysym names defined in this file, the
+ * XStringToKeysym() and XKeysymToString() functions will also handle
+ * any keysym string of the form "U0020" to "U007E" and "U00A0" to
+ * "U10FFFF" for all possible Unicode characters. In other words,
+ * every possible Unicode character has already a keysym string
+ * defined algorithmically, even if it is not listed here. Therefore,
+ * defining an additional keysym macro is only necessary where a
+ * non-hexadecimal mnemonic name is needed, or where the new keysym
+ * does not represent any existing Unicode character.
+ *
+ * When adding new keysyms to this file, do not forget to also update the
+ * following as needed:
+ *
+ * - the mappings in src/KeyBind.c in the repo
+ * git://anongit.freedesktop.org/xorg/lib/libX11.git
+ *
+ * - the protocol specification in specs/keysyms.xml
+ * in the repo git://anongit.freedesktop.org/xorg/proto/x11proto.git
+ *
+ */
+
+#define XK_VoidSymbol 0xffffff /* Void symbol */
+
+#ifdef XK_MISCELLANY
+/*
+ * TTY function keys, cleverly chosen to map to ASCII, for convenience of
+ * programming, but could have been arbitrary (at the cost of lookup
+ * tables in client code).
+ */
+
+#define XK_BackSpace 0xff08 /* Back space, back char */
+#define XK_Tab 0xff09
+#define XK_Linefeed 0xff0a /* Linefeed, LF */
+#define XK_Clear 0xff0b
+#define XK_Return 0xff0d /* Return, enter */
+#define XK_Pause 0xff13 /* Pause, hold */
+#define XK_Scroll_Lock 0xff14
+#define XK_Sys_Req 0xff15
+#define XK_Escape 0xff1b
+#define XK_Delete 0xffff /* Delete, rubout */
+
+
+
+/* International & multi-key character composition */
+
+#define XK_Multi_key 0xff20 /* Multi-key character compose */
+#define XK_Codeinput 0xff37
+#define XK_SingleCandidate 0xff3c
+#define XK_MultipleCandidate 0xff3d
+#define XK_PreviousCandidate 0xff3e
+
+/* Japanese keyboard support */
+
+#define XK_Kanji 0xff21 /* Kanji, Kanji convert */
+#define XK_Muhenkan 0xff22 /* Cancel Conversion */
+#define XK_Henkan_Mode 0xff23 /* Start/Stop Conversion */
+#define XK_Henkan 0xff23 /* Alias for Henkan_Mode */
+#define XK_Romaji 0xff24 /* to Romaji */
+#define XK_Hiragana 0xff25 /* to Hiragana */
+#define XK_Katakana 0xff26 /* to Katakana */
+#define XK_Hiragana_Katakana 0xff27 /* Hiragana/Katakana toggle */
+#define XK_Zenkaku 0xff28 /* to Zenkaku */
+#define XK_Hankaku 0xff29 /* to Hankaku */
+#define XK_Zenkaku_Hankaku 0xff2a /* Zenkaku/Hankaku toggle */
+#define XK_Touroku 0xff2b /* Add to Dictionary */
+#define XK_Massyo 0xff2c /* Delete from Dictionary */
+#define XK_Kana_Lock 0xff2d /* Kana Lock */
+#define XK_Kana_Shift 0xff2e /* Kana Shift */
+#define XK_Eisu_Shift 0xff2f /* Alphanumeric Shift */
+#define XK_Eisu_toggle 0xff30 /* Alphanumeric toggle */
+#define XK_Kanji_Bangou 0xff37 /* Codeinput */
+#define XK_Zen_Koho 0xff3d /* Multiple/All Candidate(s) */
+#define XK_Mae_Koho 0xff3e /* Previous Candidate */
+
+/* 0xff31 thru 0xff3f are under XK_KOREAN */
+
+/* Cursor control & motion */
+
+#define XK_Home 0xff50
+#define XK_Left 0xff51 /* Move left, left arrow */
+#define XK_Up 0xff52 /* Move up, up arrow */
+#define XK_Right 0xff53 /* Move right, right arrow */
+#define XK_Down 0xff54 /* Move down, down arrow */
+#define XK_Prior 0xff55 /* Prior, previous */
+#define XK_Page_Up 0xff55
+#define XK_Next 0xff56 /* Next */
+#define XK_Page_Down 0xff56
+#define XK_End 0xff57 /* EOL */
+#define XK_Begin 0xff58 /* BOL */
+
+
+/* Misc functions */
+
+#define XK_Select 0xff60 /* Select, mark */
+#define XK_Print 0xff61
+#define XK_Execute 0xff62 /* Execute, run, do */
+#define XK_Insert 0xff63 /* Insert, insert here */
+#define XK_Undo 0xff65
+#define XK_Redo 0xff66 /* Redo, again */
+#define XK_Menu 0xff67
+#define XK_Find 0xff68 /* Find, search */
+#define XK_Cancel 0xff69 /* Cancel, stop, abort, exit */
+#define XK_Help 0xff6a /* Help */
+#define XK_Break 0xff6b
+#define XK_Mode_switch 0xff7e /* Character set switch */
+#define XK_script_switch 0xff7e /* Alias for mode_switch */
+#define XK_Num_Lock 0xff7f
+
+/* Keypad functions, keypad numbers cleverly chosen to map to ASCII */
+
+#define XK_KP_Space 0xff80 /* Space */
+#define XK_KP_Tab 0xff89
+#define XK_KP_Enter 0xff8d /* Enter */
+#define XK_KP_F1 0xff91 /* PF1, KP_A, ... */
+#define XK_KP_F2 0xff92
+#define XK_KP_F3 0xff93
+#define XK_KP_F4 0xff94
+#define XK_KP_Home 0xff95
+#define XK_KP_Left 0xff96
+#define XK_KP_Up 0xff97
+#define XK_KP_Right 0xff98
+#define XK_KP_Down 0xff99
+#define XK_KP_Prior 0xff9a
+#define XK_KP_Page_Up 0xff9a
+#define XK_KP_Next 0xff9b
+#define XK_KP_Page_Down 0xff9b
+#define XK_KP_End 0xff9c
+#define XK_KP_Begin 0xff9d
+#define XK_KP_Insert 0xff9e
+#define XK_KP_Delete 0xff9f
+#define XK_KP_Equal 0xffbd /* Equals */
+#define XK_KP_Multiply 0xffaa
+#define XK_KP_Add 0xffab
+#define XK_KP_Separator 0xffac /* Separator, often comma */
+#define XK_KP_Subtract 0xffad
+#define XK_KP_Decimal 0xffae
+#define XK_KP_Divide 0xffaf
+
+#define XK_KP_0 0xffb0
+#define XK_KP_1 0xffb1
+#define XK_KP_2 0xffb2
+#define XK_KP_3 0xffb3
+#define XK_KP_4 0xffb4
+#define XK_KP_5 0xffb5
+#define XK_KP_6 0xffb6
+#define XK_KP_7 0xffb7
+#define XK_KP_8 0xffb8
+#define XK_KP_9 0xffb9
+
+
+
+/*
+ * Auxiliary functions; note the duplicate definitions for left and right
+ * function keys; Sun keyboards and a few other manufacturers have such
+ * function key groups on the left and/or right sides of the keyboard.
+ * We've not found a keyboard with more than 35 function keys total.
+ */
+
+#define XK_F1 0xffbe
+#define XK_F2 0xffbf
+#define XK_F3 0xffc0
+#define XK_F4 0xffc1
+#define XK_F5 0xffc2
+#define XK_F6 0xffc3
+#define XK_F7 0xffc4
+#define XK_F8 0xffc5
+#define XK_F9 0xffc6
+#define XK_F10 0xffc7
+#define XK_F11 0xffc8
+#define XK_L1 0xffc8
+#define XK_F12 0xffc9
+#define XK_L2 0xffc9
+#define XK_F13 0xffca
+#define XK_L3 0xffca
+#define XK_F14 0xffcb
+#define XK_L4 0xffcb
+#define XK_F15 0xffcc
+#define XK_L5 0xffcc
+#define XK_F16 0xffcd
+#define XK_L6 0xffcd
+#define XK_F17 0xffce
+#define XK_L7 0xffce
+#define XK_F18 0xffcf
+#define XK_L8 0xffcf
+#define XK_F19 0xffd0
+#define XK_L9 0xffd0
+#define XK_F20 0xffd1
+#define XK_L10 0xffd1
+#define XK_F21 0xffd2
+#define XK_R1 0xffd2
+#define XK_F22 0xffd3
+#define XK_R2 0xffd3
+#define XK_F23 0xffd4
+#define XK_R3 0xffd4
+#define XK_F24 0xffd5
+#define XK_R4 0xffd5
+#define XK_F25 0xffd6
+#define XK_R5 0xffd6
+#define XK_F26 0xffd7
+#define XK_R6 0xffd7
+#define XK_F27 0xffd8
+#define XK_R7 0xffd8
+#define XK_F28 0xffd9
+#define XK_R8 0xffd9
+#define XK_F29 0xffda
+#define XK_R9 0xffda
+#define XK_F30 0xffdb
+#define XK_R10 0xffdb
+#define XK_F31 0xffdc
+#define XK_R11 0xffdc
+#define XK_F32 0xffdd
+#define XK_R12 0xffdd
+#define XK_F33 0xffde
+#define XK_R13 0xffde
+#define XK_F34 0xffdf
+#define XK_R14 0xffdf
+#define XK_F35 0xffe0
+#define XK_R15 0xffe0
+
+/* Modifiers */
+
+#define XK_Shift_L 0xffe1 /* Left shift */
+#define XK_Shift_R 0xffe2 /* Right shift */
+#define XK_Control_L 0xffe3 /* Left control */
+#define XK_Control_R 0xffe4 /* Right control */
+#define XK_Caps_Lock 0xffe5 /* Caps lock */
+#define XK_Shift_Lock 0xffe6 /* Shift lock */
+
+#define XK_Meta_L 0xffe7 /* Left meta */
+#define XK_Meta_R 0xffe8 /* Right meta */
+#define XK_Alt_L 0xffe9 /* Left alt */
+#define XK_Alt_R 0xffea /* Right alt */
+#define XK_Super_L 0xffeb /* Left super */
+#define XK_Super_R 0xffec /* Right super */
+#define XK_Hyper_L 0xffed /* Left hyper */
+#define XK_Hyper_R 0xffee /* Right hyper */
+#endif /* XK_MISCELLANY */
+
+/*
+ * Keyboard (XKB) Extension function and modifier keys
+ * (from Appendix C of "The X Keyboard Extension: Protocol Specification")
+ * Byte 3 = 0xfe
+ */
+
+#ifdef XK_XKB_KEYS
+#define XK_ISO_Lock 0xfe01
+#define XK_ISO_Level2_Latch 0xfe02
+#define XK_ISO_Level3_Shift 0xfe03
+#define XK_ISO_Level3_Latch 0xfe04
+#define XK_ISO_Level3_Lock 0xfe05
+#define XK_ISO_Level5_Shift 0xfe11
+#define XK_ISO_Level5_Latch 0xfe12
+#define XK_ISO_Level5_Lock 0xfe13
+#define XK_ISO_Group_Shift 0xff7e /* Alias for mode_switch */
+#define XK_ISO_Group_Latch 0xfe06
+#define XK_ISO_Group_Lock 0xfe07
+#define XK_ISO_Next_Group 0xfe08
+#define XK_ISO_Next_Group_Lock 0xfe09
+#define XK_ISO_Prev_Group 0xfe0a
+#define XK_ISO_Prev_Group_Lock 0xfe0b
+#define XK_ISO_First_Group 0xfe0c
+#define XK_ISO_First_Group_Lock 0xfe0d
+#define XK_ISO_Last_Group 0xfe0e
+#define XK_ISO_Last_Group_Lock 0xfe0f
+
+#define XK_ISO_Left_Tab 0xfe20
+#define XK_ISO_Move_Line_Up 0xfe21
+#define XK_ISO_Move_Line_Down 0xfe22
+#define XK_ISO_Partial_Line_Up 0xfe23
+#define XK_ISO_Partial_Line_Down 0xfe24
+#define XK_ISO_Partial_Space_Left 0xfe25
+#define XK_ISO_Partial_Space_Right 0xfe26
+#define XK_ISO_Set_Margin_Left 0xfe27
+#define XK_ISO_Set_Margin_Right 0xfe28
+#define XK_ISO_Release_Margin_Left 0xfe29
+#define XK_ISO_Release_Margin_Right 0xfe2a
+#define XK_ISO_Release_Both_Margins 0xfe2b
+#define XK_ISO_Fast_Cursor_Left 0xfe2c
+#define XK_ISO_Fast_Cursor_Right 0xfe2d
+#define XK_ISO_Fast_Cursor_Up 0xfe2e
+#define XK_ISO_Fast_Cursor_Down 0xfe2f
+#define XK_ISO_Continuous_Underline 0xfe30
+#define XK_ISO_Discontinuous_Underline 0xfe31
+#define XK_ISO_Emphasize 0xfe32
+#define XK_ISO_Center_Object 0xfe33
+#define XK_ISO_Enter 0xfe34
+
+#define XK_dead_grave 0xfe50
+#define XK_dead_acute 0xfe51
+#define XK_dead_circumflex 0xfe52
+#define XK_dead_tilde 0xfe53
+#define XK_dead_perispomeni 0xfe53 /* alias for dead_tilde */
+#define XK_dead_macron 0xfe54
+#define XK_dead_breve 0xfe55
+#define XK_dead_abovedot 0xfe56
+#define XK_dead_diaeresis 0xfe57
+#define XK_dead_abovering 0xfe58
+#define XK_dead_doubleacute 0xfe59
+#define XK_dead_caron 0xfe5a
+#define XK_dead_cedilla 0xfe5b
+#define XK_dead_ogonek 0xfe5c
+#define XK_dead_iota 0xfe5d
+#define XK_dead_voiced_sound 0xfe5e
+#define XK_dead_semivoiced_sound 0xfe5f
+#define XK_dead_belowdot 0xfe60
+#define XK_dead_hook 0xfe61
+#define XK_dead_horn 0xfe62
+#define XK_dead_stroke 0xfe63
+#define XK_dead_abovecomma 0xfe64
+#define XK_dead_psili 0xfe64 /* alias for dead_abovecomma */
+#define XK_dead_abovereversedcomma 0xfe65
+#define XK_dead_dasia 0xfe65 /* alias for dead_abovereversedcomma */
+#define XK_dead_doublegrave 0xfe66
+#define XK_dead_belowring 0xfe67
+#define XK_dead_belowmacron 0xfe68
+#define XK_dead_belowcircumflex 0xfe69
+#define XK_dead_belowtilde 0xfe6a
+#define XK_dead_belowbreve 0xfe6b
+#define XK_dead_belowdiaeresis 0xfe6c
+#define XK_dead_invertedbreve 0xfe6d
+#define XK_dead_belowcomma 0xfe6e
+#define XK_dead_currency 0xfe6f
+
+/* dead vowels for universal syllable entry */
+#define XK_dead_a 0xfe80
+#define XK_dead_A 0xfe81
+#define XK_dead_e 0xfe82
+#define XK_dead_E 0xfe83
+#define XK_dead_i 0xfe84
+#define XK_dead_I 0xfe85
+#define XK_dead_o 0xfe86
+#define XK_dead_O 0xfe87
+#define XK_dead_u 0xfe88
+#define XK_dead_U 0xfe89
+#define XK_dead_small_schwa 0xfe8a
+#define XK_dead_capital_schwa 0xfe8b
+
+#define XK_dead_greek 0xfe8c
+
+#define XK_First_Virtual_Screen 0xfed0
+#define XK_Prev_Virtual_Screen 0xfed1
+#define XK_Next_Virtual_Screen 0xfed2
+#define XK_Last_Virtual_Screen 0xfed4
+#define XK_Terminate_Server 0xfed5
+
+#define XK_AccessX_Enable 0xfe70
+#define XK_AccessX_Feedback_Enable 0xfe71
+#define XK_RepeatKeys_Enable 0xfe72
+#define XK_SlowKeys_Enable 0xfe73
+#define XK_BounceKeys_Enable 0xfe74
+#define XK_StickyKeys_Enable 0xfe75
+#define XK_MouseKeys_Enable 0xfe76
+#define XK_MouseKeys_Accel_Enable 0xfe77
+#define XK_Overlay1_Enable 0xfe78
+#define XK_Overlay2_Enable 0xfe79
+#define XK_AudibleBell_Enable 0xfe7a
+
+#define XK_Pointer_Left 0xfee0
+#define XK_Pointer_Right 0xfee1
+#define XK_Pointer_Up 0xfee2
+#define XK_Pointer_Down 0xfee3
+#define XK_Pointer_UpLeft 0xfee4
+#define XK_Pointer_UpRight 0xfee5
+#define XK_Pointer_DownLeft 0xfee6
+#define XK_Pointer_DownRight 0xfee7
+#define XK_Pointer_Button_Dflt 0xfee8
+#define XK_Pointer_Button1 0xfee9
+#define XK_Pointer_Button2 0xfeea
+#define XK_Pointer_Button3 0xfeeb
+#define XK_Pointer_Button4 0xfeec
+#define XK_Pointer_Button5 0xfeed
+#define XK_Pointer_DblClick_Dflt 0xfeee
+#define XK_Pointer_DblClick1 0xfeef
+#define XK_Pointer_DblClick2 0xfef0
+#define XK_Pointer_DblClick3 0xfef1
+#define XK_Pointer_DblClick4 0xfef2
+#define XK_Pointer_DblClick5 0xfef3
+#define XK_Pointer_Drag_Dflt 0xfef4
+#define XK_Pointer_Drag1 0xfef5
+#define XK_Pointer_Drag2 0xfef6
+#define XK_Pointer_Drag3 0xfef7
+#define XK_Pointer_Drag4 0xfef8
+#define XK_Pointer_Drag5 0xfefd
+
+#define XK_Pointer_EnableKeys 0xfef9
+#define XK_Pointer_Accelerate 0xfefa
+#define XK_Pointer_DfltBtnNext 0xfefb
+#define XK_Pointer_DfltBtnPrev 0xfefc
+
+/* Single-Stroke Multiple-Character N-Graph Keysyms For The X Input Method */
+
+#define XK_ch 0xfea0
+#define XK_Ch 0xfea1
+#define XK_CH 0xfea2
+#define XK_c_h 0xfea3
+#define XK_C_h 0xfea4
+#define XK_C_H 0xfea5
+
+#endif /* XK_XKB_KEYS */
+
+/*
+ * 3270 Terminal Keys
+ * Byte 3 = 0xfd
+ */
+
+#ifdef XK_3270
+#define XK_3270_Duplicate 0xfd01
+#define XK_3270_FieldMark 0xfd02
+#define XK_3270_Right2 0xfd03
+#define XK_3270_Left2 0xfd04
+#define XK_3270_BackTab 0xfd05
+#define XK_3270_EraseEOF 0xfd06
+#define XK_3270_EraseInput 0xfd07
+#define XK_3270_Reset 0xfd08
+#define XK_3270_Quit 0xfd09
+#define XK_3270_PA1 0xfd0a
+#define XK_3270_PA2 0xfd0b
+#define XK_3270_PA3 0xfd0c
+#define XK_3270_Test 0xfd0d
+#define XK_3270_Attn 0xfd0e
+#define XK_3270_CursorBlink 0xfd0f
+#define XK_3270_AltCursor 0xfd10
+#define XK_3270_KeyClick 0xfd11
+#define XK_3270_Jump 0xfd12
+#define XK_3270_Ident 0xfd13
+#define XK_3270_Rule 0xfd14
+#define XK_3270_Copy 0xfd15
+#define XK_3270_Play 0xfd16
+#define XK_3270_Setup 0xfd17
+#define XK_3270_Record 0xfd18
+#define XK_3270_ChangeScreen 0xfd19
+#define XK_3270_DeleteWord 0xfd1a
+#define XK_3270_ExSelect 0xfd1b
+#define XK_3270_CursorSelect 0xfd1c
+#define XK_3270_PrintScreen 0xfd1d
+#define XK_3270_Enter 0xfd1e
+#endif /* XK_3270 */
+
+/*
+ * Latin 1
+ * (ISO/IEC 8859-1 = Unicode U+0020..U+00FF)
+ * Byte 3 = 0
+ */
+#ifdef XK_LATIN1
+#define XK_space 0x0020 /* U+0020 SPACE */
+#define XK_exclam 0x0021 /* U+0021 EXCLAMATION MARK */
+#define XK_quotedbl 0x0022 /* U+0022 QUOTATION MARK */
+#define XK_numbersign 0x0023 /* U+0023 NUMBER SIGN */
+#define XK_dollar 0x0024 /* U+0024 DOLLAR SIGN */
+#define XK_percent 0x0025 /* U+0025 PERCENT SIGN */
+#define XK_ampersand 0x0026 /* U+0026 AMPERSAND */
+#define XK_apostrophe 0x0027 /* U+0027 APOSTROPHE */
+#define XK_quoteright 0x0027 /* deprecated */
+#define XK_parenleft 0x0028 /* U+0028 LEFT PARENTHESIS */
+#define XK_parenright 0x0029 /* U+0029 RIGHT PARENTHESIS */
+#define XK_asterisk 0x002a /* U+002A ASTERISK */
+#define XK_plus 0x002b /* U+002B PLUS SIGN */
+#define XK_comma 0x002c /* U+002C COMMA */
+#define XK_minus 0x002d /* U+002D HYPHEN-MINUS */
+#define XK_period 0x002e /* U+002E FULL STOP */
+#define XK_slash 0x002f /* U+002F SOLIDUS */
+#define XK_0 0x0030 /* U+0030 DIGIT ZERO */
+#define XK_1 0x0031 /* U+0031 DIGIT ONE */
+#define XK_2 0x0032 /* U+0032 DIGIT TWO */
+#define XK_3 0x0033 /* U+0033 DIGIT THREE */
+#define XK_4 0x0034 /* U+0034 DIGIT FOUR */
+#define XK_5 0x0035 /* U+0035 DIGIT FIVE */
+#define XK_6 0x0036 /* U+0036 DIGIT SIX */
+#define XK_7 0x0037 /* U+0037 DIGIT SEVEN */
+#define XK_8 0x0038 /* U+0038 DIGIT EIGHT */
+#define XK_9 0x0039 /* U+0039 DIGIT NINE */
+#define XK_colon 0x003a /* U+003A COLON */
+#define XK_semicolon 0x003b /* U+003B SEMICOLON */
+#define XK_less 0x003c /* U+003C LESS-THAN SIGN */
+#define XK_equal 0x003d /* U+003D EQUALS SIGN */
+#define XK_greater 0x003e /* U+003E GREATER-THAN SIGN */
+#define XK_question 0x003f /* U+003F QUESTION MARK */
+#define XK_at 0x0040 /* U+0040 COMMERCIAL AT */
+#define XK_A 0x0041 /* U+0041 LATIN CAPITAL LETTER A */
+#define XK_B 0x0042 /* U+0042 LATIN CAPITAL LETTER B */
+#define XK_C 0x0043 /* U+0043 LATIN CAPITAL LETTER C */
+#define XK_D 0x0044 /* U+0044 LATIN CAPITAL LETTER D */
+#define XK_E 0x0045 /* U+0045 LATIN CAPITAL LETTER E */
+#define XK_F 0x0046 /* U+0046 LATIN CAPITAL LETTER F */
+#define XK_G 0x0047 /* U+0047 LATIN CAPITAL LETTER G */
+#define XK_H 0x0048 /* U+0048 LATIN CAPITAL LETTER H */
+#define XK_I 0x0049 /* U+0049 LATIN CAPITAL LETTER I */
+#define XK_J 0x004a /* U+004A LATIN CAPITAL LETTER J */
+#define XK_K 0x004b /* U+004B LATIN CAPITAL LETTER K */
+#define XK_L 0x004c /* U+004C LATIN CAPITAL LETTER L */
+#define XK_M 0x004d /* U+004D LATIN CAPITAL LETTER M */
+#define XK_N 0x004e /* U+004E LATIN CAPITAL LETTER N */
+#define XK_O 0x004f /* U+004F LATIN CAPITAL LETTER O */
+#define XK_P 0x0050 /* U+0050 LATIN CAPITAL LETTER P */
+#define XK_Q 0x0051 /* U+0051 LATIN CAPITAL LETTER Q */
+#define XK_R 0x0052 /* U+0052 LATIN CAPITAL LETTER R */
+#define XK_S 0x0053 /* U+0053 LATIN CAPITAL LETTER S */
+#define XK_T 0x0054 /* U+0054 LATIN CAPITAL LETTER T */
+#define XK_U 0x0055 /* U+0055 LATIN CAPITAL LETTER U */
+#define XK_V 0x0056 /* U+0056 LATIN CAPITAL LETTER V */
+#define XK_W 0x0057 /* U+0057 LATIN CAPITAL LETTER W */
+#define XK_X 0x0058 /* U+0058 LATIN CAPITAL LETTER X */
+#define XK_Y 0x0059 /* U+0059 LATIN CAPITAL LETTER Y */
+#define XK_Z 0x005a /* U+005A LATIN CAPITAL LETTER Z */
+#define XK_bracketleft 0x005b /* U+005B LEFT SQUARE BRACKET */
+#define XK_backslash 0x005c /* U+005C REVERSE SOLIDUS */
+#define XK_bracketright 0x005d /* U+005D RIGHT SQUARE BRACKET */
+#define XK_asciicircum 0x005e /* U+005E CIRCUMFLEX ACCENT */
+#define XK_underscore 0x005f /* U+005F LOW LINE */
+#define XK_grave 0x0060 /* U+0060 GRAVE ACCENT */
+#define XK_quoteleft 0x0060 /* deprecated */
+#define XK_a 0x0061 /* U+0061 LATIN SMALL LETTER A */
+#define XK_b 0x0062 /* U+0062 LATIN SMALL LETTER B */
+#define XK_c 0x0063 /* U+0063 LATIN SMALL LETTER C */
+#define XK_d 0x0064 /* U+0064 LATIN SMALL LETTER D */
+#define XK_e 0x0065 /* U+0065 LATIN SMALL LETTER E */
+#define XK_f 0x0066 /* U+0066 LATIN SMALL LETTER F */
+#define XK_g 0x0067 /* U+0067 LATIN SMALL LETTER G */
+#define XK_h 0x0068 /* U+0068 LATIN SMALL LETTER H */
+#define XK_i 0x0069 /* U+0069 LATIN SMALL LETTER I */
+#define XK_j 0x006a /* U+006A LATIN SMALL LETTER J */
+#define XK_k 0x006b /* U+006B LATIN SMALL LETTER K */
+#define XK_l 0x006c /* U+006C LATIN SMALL LETTER L */
+#define XK_m 0x006d /* U+006D LATIN SMALL LETTER M */
+#define XK_n 0x006e /* U+006E LATIN SMALL LETTER N */
+#define XK_o 0x006f /* U+006F LATIN SMALL LETTER O */
+#define XK_p 0x0070 /* U+0070 LATIN SMALL LETTER P */
+#define XK_q 0x0071 /* U+0071 LATIN SMALL LETTER Q */
+#define XK_r 0x0072 /* U+0072 LATIN SMALL LETTER R */
+#define XK_s 0x0073 /* U+0073 LATIN SMALL LETTER S */
+#define XK_t 0x0074 /* U+0074 LATIN SMALL LETTER T */
+#define XK_u 0x0075 /* U+0075 LATIN SMALL LETTER U */
+#define XK_v 0x0076 /* U+0076 LATIN SMALL LETTER V */
+#define XK_w 0x0077 /* U+0077 LATIN SMALL LETTER W */
+#define XK_x 0x0078 /* U+0078 LATIN SMALL LETTER X */
+#define XK_y 0x0079 /* U+0079 LATIN SMALL LETTER Y */
+#define XK_z 0x007a /* U+007A LATIN SMALL LETTER Z */
+#define XK_braceleft 0x007b /* U+007B LEFT CURLY BRACKET */
+#define XK_bar 0x007c /* U+007C VERTICAL LINE */
+#define XK_braceright 0x007d /* U+007D RIGHT CURLY BRACKET */
+#define XK_asciitilde 0x007e /* U+007E TILDE */
+
+#define XK_nobreakspace 0x00a0 /* U+00A0 NO-BREAK SPACE */
+#define XK_exclamdown 0x00a1 /* U+00A1 INVERTED EXCLAMATION MARK */
+#define XK_cent 0x00a2 /* U+00A2 CENT SIGN */
+#define XK_sterling 0x00a3 /* U+00A3 POUND SIGN */
+#define XK_currency 0x00a4 /* U+00A4 CURRENCY SIGN */
+#define XK_yen 0x00a5 /* U+00A5 YEN SIGN */
+#define XK_brokenbar 0x00a6 /* U+00A6 BROKEN BAR */
+#define XK_section 0x00a7 /* U+00A7 SECTION SIGN */
+#define XK_diaeresis 0x00a8 /* U+00A8 DIAERESIS */
+#define XK_copyright 0x00a9 /* U+00A9 COPYRIGHT SIGN */
+#define XK_ordfeminine 0x00aa /* U+00AA FEMININE ORDINAL INDICATOR */
+#define XK_guillemotleft 0x00ab /* U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */
+#define XK_notsign 0x00ac /* U+00AC NOT SIGN */
+#define XK_hyphen 0x00ad /* U+00AD SOFT HYPHEN */
+#define XK_registered 0x00ae /* U+00AE REGISTERED SIGN */
+#define XK_macron 0x00af /* U+00AF MACRON */
+#define XK_degree 0x00b0 /* U+00B0 DEGREE SIGN */
+#define XK_plusminus 0x00b1 /* U+00B1 PLUS-MINUS SIGN */
+#define XK_twosuperior 0x00b2 /* U+00B2 SUPERSCRIPT TWO */
+#define XK_threesuperior 0x00b3 /* U+00B3 SUPERSCRIPT THREE */
+#define XK_acute 0x00b4 /* U+00B4 ACUTE ACCENT */
+#define XK_mu 0x00b5 /* U+00B5 MICRO SIGN */
+#define XK_paragraph 0x00b6 /* U+00B6 PILCROW SIGN */
+#define XK_periodcentered 0x00b7 /* U+00B7 MIDDLE DOT */
+#define XK_cedilla 0x00b8 /* U+00B8 CEDILLA */
+#define XK_onesuperior 0x00b9 /* U+00B9 SUPERSCRIPT ONE */
+#define XK_masculine 0x00ba /* U+00BA MASCULINE ORDINAL INDICATOR */
+#define XK_guillemotright 0x00bb /* U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */
+#define XK_onequarter 0x00bc /* U+00BC VULGAR FRACTION ONE QUARTER */
+#define XK_onehalf 0x00bd /* U+00BD VULGAR FRACTION ONE HALF */
+#define XK_threequarters 0x00be /* U+00BE VULGAR FRACTION THREE QUARTERS */
+#define XK_questiondown 0x00bf /* U+00BF INVERTED QUESTION MARK */
+#define XK_Agrave 0x00c0 /* U+00C0 LATIN CAPITAL LETTER A WITH GRAVE */
+#define XK_Aacute 0x00c1 /* U+00C1 LATIN CAPITAL LETTER A WITH ACUTE */
+#define XK_Acircumflex 0x00c2 /* U+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX */
+#define XK_Atilde 0x00c3 /* U+00C3 LATIN CAPITAL LETTER A WITH TILDE */
+#define XK_Adiaeresis 0x00c4 /* U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS */
+#define XK_Aring 0x00c5 /* U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE */
+#define XK_AE 0x00c6 /* U+00C6 LATIN CAPITAL LETTER AE */
+#define XK_Ccedilla 0x00c7 /* U+00C7 LATIN CAPITAL LETTER C WITH CEDILLA */
+#define XK_Egrave 0x00c8 /* U+00C8 LATIN CAPITAL LETTER E WITH GRAVE */
+#define XK_Eacute 0x00c9 /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */
+#define XK_Ecircumflex 0x00ca /* U+00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX */
+#define XK_Ediaeresis 0x00cb /* U+00CB LATIN CAPITAL LETTER E WITH DIAERESIS */
+#define XK_Igrave 0x00cc /* U+00CC LATIN CAPITAL LETTER I WITH GRAVE */
+#define XK_Iacute 0x00cd /* U+00CD LATIN CAPITAL LETTER I WITH ACUTE */
+#define XK_Icircumflex 0x00ce /* U+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX */
+#define XK_Idiaeresis 0x00cf /* U+00CF LATIN CAPITAL LETTER I WITH DIAERESIS */
+#define XK_ETH 0x00d0 /* U+00D0 LATIN CAPITAL LETTER ETH */
+#define XK_Eth 0x00d0 /* deprecated */
+#define XK_Ntilde 0x00d1 /* U+00D1 LATIN CAPITAL LETTER N WITH TILDE */
+#define XK_Ograve 0x00d2 /* U+00D2 LATIN CAPITAL LETTER O WITH GRAVE */
+#define XK_Oacute 0x00d3 /* U+00D3 LATIN CAPITAL LETTER O WITH ACUTE */
+#define XK_Ocircumflex 0x00d4 /* U+00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX */
+#define XK_Otilde 0x00d5 /* U+00D5 LATIN CAPITAL LETTER O WITH TILDE */
+#define XK_Odiaeresis 0x00d6 /* U+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS */
+#define XK_multiply 0x00d7 /* U+00D7 MULTIPLICATION SIGN */
+#define XK_Oslash 0x00d8 /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */
+#define XK_Ooblique 0x00d8 /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */
+#define XK_Ugrave 0x00d9 /* U+00D9 LATIN CAPITAL LETTER U WITH GRAVE */
+#define XK_Uacute 0x00da /* U+00DA LATIN CAPITAL LETTER U WITH ACUTE */
+#define XK_Ucircumflex 0x00db /* U+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX */
+#define XK_Udiaeresis 0x00dc /* U+00DC LATIN CAPITAL LETTER U WITH DIAERESIS */
+#define XK_Yacute 0x00dd /* U+00DD LATIN CAPITAL LETTER Y WITH ACUTE */
+#define XK_THORN 0x00de /* U+00DE LATIN CAPITAL LETTER THORN */
+#define XK_Thorn 0x00de /* deprecated */
+#define XK_ssharp 0x00df /* U+00DF LATIN SMALL LETTER SHARP S */
+#define XK_agrave 0x00e0 /* U+00E0 LATIN SMALL LETTER A WITH GRAVE */
+#define XK_aacute 0x00e1 /* U+00E1 LATIN SMALL LETTER A WITH ACUTE */
+#define XK_acircumflex 0x00e2 /* U+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX */
+#define XK_atilde 0x00e3 /* U+00E3 LATIN SMALL LETTER A WITH TILDE */
+#define XK_adiaeresis 0x00e4 /* U+00E4 LATIN SMALL LETTER A WITH DIAERESIS */
+#define XK_aring 0x00e5 /* U+00E5 LATIN SMALL LETTER A WITH RING ABOVE */
+#define XK_ae 0x00e6 /* U+00E6 LATIN SMALL LETTER AE */
+#define XK_ccedilla 0x00e7 /* U+00E7 LATIN SMALL LETTER C WITH CEDILLA */
+#define XK_egrave 0x00e8 /* U+00E8 LATIN SMALL LETTER E WITH GRAVE */
+#define XK_eacute 0x00e9 /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */
+#define XK_ecircumflex 0x00ea /* U+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX */
+#define XK_ediaeresis 0x00eb /* U+00EB LATIN SMALL LETTER E WITH DIAERESIS */
+#define XK_igrave 0x00ec /* U+00EC LATIN SMALL LETTER I WITH GRAVE */
+#define XK_iacute 0x00ed /* U+00ED LATIN SMALL LETTER I WITH ACUTE */
+#define XK_icircumflex 0x00ee /* U+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX */
+#define XK_idiaeresis 0x00ef /* U+00EF LATIN SMALL LETTER I WITH DIAERESIS */
+#define XK_eth 0x00f0 /* U+00F0 LATIN SMALL LETTER ETH */
+#define XK_ntilde 0x00f1 /* U+00F1 LATIN SMALL LETTER N WITH TILDE */
+#define XK_ograve 0x00f2 /* U+00F2 LATIN SMALL LETTER O WITH GRAVE */
+#define XK_oacute 0x00f3 /* U+00F3 LATIN SMALL LETTER O WITH ACUTE */
+#define XK_ocircumflex 0x00f4 /* U+00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX */
+#define XK_otilde 0x00f5 /* U+00F5 LATIN SMALL LETTER O WITH TILDE */
+#define XK_odiaeresis 0x00f6 /* U+00F6 LATIN SMALL LETTER O WITH DIAERESIS */
+#define XK_division 0x00f7 /* U+00F7 DIVISION SIGN */
+#define XK_oslash 0x00f8 /* U+00F8 LATIN SMALL LETTER O WITH STROKE */
+#define XK_ooblique 0x00f8 /* U+00F8 LATIN SMALL LETTER O WITH STROKE */
+#define XK_ugrave 0x00f9 /* U+00F9 LATIN SMALL LETTER U WITH GRAVE */
+#define XK_uacute 0x00fa /* U+00FA LATIN SMALL LETTER U WITH ACUTE */
+#define XK_ucircumflex 0x00fb /* U+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX */
+#define XK_udiaeresis 0x00fc /* U+00FC LATIN SMALL LETTER U WITH DIAERESIS */
+#define XK_yacute 0x00fd /* U+00FD LATIN SMALL LETTER Y WITH ACUTE */
+#define XK_thorn 0x00fe /* U+00FE LATIN SMALL LETTER THORN */
+#define XK_ydiaeresis 0x00ff /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */
+#endif /* XK_LATIN1 */
+
+/*
+ * Latin 2
+ * Byte 3 = 1
+ */
+
+#ifdef XK_LATIN2
+#define XK_Aogonek 0x01a1 /* U+0104 LATIN CAPITAL LETTER A WITH OGONEK */
+#define XK_breve 0x01a2 /* U+02D8 BREVE */
+#define XK_Lstroke 0x01a3 /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */
+#define XK_Lcaron 0x01a5 /* U+013D LATIN CAPITAL LETTER L WITH CARON */
+#define XK_Sacute 0x01a6 /* U+015A LATIN CAPITAL LETTER S WITH ACUTE */
+#define XK_Scaron 0x01a9 /* U+0160 LATIN CAPITAL LETTER S WITH CARON */
+#define XK_Scedilla 0x01aa /* U+015E LATIN CAPITAL LETTER S WITH CEDILLA */
+#define XK_Tcaron 0x01ab /* U+0164 LATIN CAPITAL LETTER T WITH CARON */
+#define XK_Zacute 0x01ac /* U+0179 LATIN CAPITAL LETTER Z WITH ACUTE */
+#define XK_Zcaron 0x01ae /* U+017D LATIN CAPITAL LETTER Z WITH CARON */
+#define XK_Zabovedot 0x01af /* U+017B LATIN CAPITAL LETTER Z WITH DOT ABOVE */
+#define XK_aogonek 0x01b1 /* U+0105 LATIN SMALL LETTER A WITH OGONEK */
+#define XK_ogonek 0x01b2 /* U+02DB OGONEK */
+#define XK_lstroke 0x01b3 /* U+0142 LATIN SMALL LETTER L WITH STROKE */
+#define XK_lcaron 0x01b5 /* U+013E LATIN SMALL LETTER L WITH CARON */
+#define XK_sacute 0x01b6 /* U+015B LATIN SMALL LETTER S WITH ACUTE */
+#define XK_caron 0x01b7 /* U+02C7 CARON */
+#define XK_scaron 0x01b9 /* U+0161 LATIN SMALL LETTER S WITH CARON */
+#define XK_scedilla 0x01ba /* U+015F LATIN SMALL LETTER S WITH CEDILLA */
+#define XK_tcaron 0x01bb /* U+0165 LATIN SMALL LETTER T WITH CARON */
+#define XK_zacute 0x01bc /* U+017A LATIN SMALL LETTER Z WITH ACUTE */
+#define XK_doubleacute 0x01bd /* U+02DD DOUBLE ACUTE ACCENT */
+#define XK_zcaron 0x01be /* U+017E LATIN SMALL LETTER Z WITH CARON */
+#define XK_zabovedot 0x01bf /* U+017C LATIN SMALL LETTER Z WITH DOT ABOVE */
+#define XK_Racute 0x01c0 /* U+0154 LATIN CAPITAL LETTER R WITH ACUTE */
+#define XK_Abreve 0x01c3 /* U+0102 LATIN CAPITAL LETTER A WITH BREVE */
+#define XK_Lacute 0x01c5 /* U+0139 LATIN CAPITAL LETTER L WITH ACUTE */
+#define XK_Cacute 0x01c6 /* U+0106 LATIN CAPITAL LETTER C WITH ACUTE */
+#define XK_Ccaron 0x01c8 /* U+010C LATIN CAPITAL LETTER C WITH CARON */
+#define XK_Eogonek 0x01ca /* U+0118 LATIN CAPITAL LETTER E WITH OGONEK */
+#define XK_Ecaron 0x01cc /* U+011A LATIN CAPITAL LETTER E WITH CARON */
+#define XK_Dcaron 0x01cf /* U+010E LATIN CAPITAL LETTER D WITH CARON */
+#define XK_Dstroke 0x01d0 /* U+0110 LATIN CAPITAL LETTER D WITH STROKE */
+#define XK_Nacute 0x01d1 /* U+0143 LATIN CAPITAL LETTER N WITH ACUTE */
+#define XK_Ncaron 0x01d2 /* U+0147 LATIN CAPITAL LETTER N WITH CARON */
+#define XK_Odoubleacute 0x01d5 /* U+0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */
+#define XK_Rcaron 0x01d8 /* U+0158 LATIN CAPITAL LETTER R WITH CARON */
+#define XK_Uring 0x01d9 /* U+016E LATIN CAPITAL LETTER U WITH RING ABOVE */
+#define XK_Udoubleacute 0x01db /* U+0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */
+#define XK_Tcedilla 0x01de /* U+0162 LATIN CAPITAL LETTER T WITH CEDILLA */
+#define XK_racute 0x01e0 /* U+0155 LATIN SMALL LETTER R WITH ACUTE */
+#define XK_abreve 0x01e3 /* U+0103 LATIN SMALL LETTER A WITH BREVE */
+#define XK_lacute 0x01e5 /* U+013A LATIN SMALL LETTER L WITH ACUTE */
+#define XK_cacute 0x01e6 /* U+0107 LATIN SMALL LETTER C WITH ACUTE */
+#define XK_ccaron 0x01e8 /* U+010D LATIN SMALL LETTER C WITH CARON */
+#define XK_eogonek 0x01ea /* U+0119 LATIN SMALL LETTER E WITH OGONEK */
+#define XK_ecaron 0x01ec /* U+011B LATIN SMALL LETTER E WITH CARON */
+#define XK_dcaron 0x01ef /* U+010F LATIN SMALL LETTER D WITH CARON */
+#define XK_dstroke 0x01f0 /* U+0111 LATIN SMALL LETTER D WITH STROKE */
+#define XK_nacute 0x01f1 /* U+0144 LATIN SMALL LETTER N WITH ACUTE */
+#define XK_ncaron 0x01f2 /* U+0148 LATIN SMALL LETTER N WITH CARON */
+#define XK_odoubleacute 0x01f5 /* U+0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE */
+#define XK_rcaron 0x01f8 /* U+0159 LATIN SMALL LETTER R WITH CARON */
+#define XK_uring 0x01f9 /* U+016F LATIN SMALL LETTER U WITH RING ABOVE */
+#define XK_udoubleacute 0x01fb /* U+0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE */
+#define XK_tcedilla 0x01fe /* U+0163 LATIN SMALL LETTER T WITH CEDILLA */
+#define XK_abovedot 0x01ff /* U+02D9 DOT ABOVE */
+#endif /* XK_LATIN2 */
+
+/*
+ * Latin 3
+ * Byte 3 = 2
+ */
+
+#ifdef XK_LATIN3
+#define XK_Hstroke 0x02a1 /* U+0126 LATIN CAPITAL LETTER H WITH STROKE */
+#define XK_Hcircumflex 0x02a6 /* U+0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX */
+#define XK_Iabovedot 0x02a9 /* U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE */
+#define XK_Gbreve 0x02ab /* U+011E LATIN CAPITAL LETTER G WITH BREVE */
+#define XK_Jcircumflex 0x02ac /* U+0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX */
+#define XK_hstroke 0x02b1 /* U+0127 LATIN SMALL LETTER H WITH STROKE */
+#define XK_hcircumflex 0x02b6 /* U+0125 LATIN SMALL LETTER H WITH CIRCUMFLEX */
+#define XK_idotless 0x02b9 /* U+0131 LATIN SMALL LETTER DOTLESS I */
+#define XK_gbreve 0x02bb /* U+011F LATIN SMALL LETTER G WITH BREVE */
+#define XK_jcircumflex 0x02bc /* U+0135 LATIN SMALL LETTER J WITH CIRCUMFLEX */
+#define XK_Cabovedot 0x02c5 /* U+010A LATIN CAPITAL LETTER C WITH DOT ABOVE */
+#define XK_Ccircumflex 0x02c6 /* U+0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX */
+#define XK_Gabovedot 0x02d5 /* U+0120 LATIN CAPITAL LETTER G WITH DOT ABOVE */
+#define XK_Gcircumflex 0x02d8 /* U+011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX */
+#define XK_Ubreve 0x02dd /* U+016C LATIN CAPITAL LETTER U WITH BREVE */
+#define XK_Scircumflex 0x02de /* U+015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX */
+#define XK_cabovedot 0x02e5 /* U+010B LATIN SMALL LETTER C WITH DOT ABOVE */
+#define XK_ccircumflex 0x02e6 /* U+0109 LATIN SMALL LETTER C WITH CIRCUMFLEX */
+#define XK_gabovedot 0x02f5 /* U+0121 LATIN SMALL LETTER G WITH DOT ABOVE */
+#define XK_gcircumflex 0x02f8 /* U+011D LATIN SMALL LETTER G WITH CIRCUMFLEX */
+#define XK_ubreve 0x02fd /* U+016D LATIN SMALL LETTER U WITH BREVE */
+#define XK_scircumflex 0x02fe /* U+015D LATIN SMALL LETTER S WITH CIRCUMFLEX */
+#endif /* XK_LATIN3 */
+
+
+/*
+ * Latin 4
+ * Byte 3 = 3
+ */
+
+#ifdef XK_LATIN4
+#define XK_kra 0x03a2 /* U+0138 LATIN SMALL LETTER KRA */
+#define XK_kappa 0x03a2 /* deprecated */
+#define XK_Rcedilla 0x03a3 /* U+0156 LATIN CAPITAL LETTER R WITH CEDILLA */
+#define XK_Itilde 0x03a5 /* U+0128 LATIN CAPITAL LETTER I WITH TILDE */
+#define XK_Lcedilla 0x03a6 /* U+013B LATIN CAPITAL LETTER L WITH CEDILLA */
+#define XK_Emacron 0x03aa /* U+0112 LATIN CAPITAL LETTER E WITH MACRON */
+#define XK_Gcedilla 0x03ab /* U+0122 LATIN CAPITAL LETTER G WITH CEDILLA */
+#define XK_Tslash 0x03ac /* U+0166 LATIN CAPITAL LETTER T WITH STROKE */
+#define XK_rcedilla 0x03b3 /* U+0157 LATIN SMALL LETTER R WITH CEDILLA */
+#define XK_itilde 0x03b5 /* U+0129 LATIN SMALL LETTER I WITH TILDE */
+#define XK_lcedilla 0x03b6 /* U+013C LATIN SMALL LETTER L WITH CEDILLA */
+#define XK_emacron 0x03ba /* U+0113 LATIN SMALL LETTER E WITH MACRON */
+#define XK_gcedilla 0x03bb /* U+0123 LATIN SMALL LETTER G WITH CEDILLA */
+#define XK_tslash 0x03bc /* U+0167 LATIN SMALL LETTER T WITH STROKE */
+#define XK_ENG 0x03bd /* U+014A LATIN CAPITAL LETTER ENG */
+#define XK_eng 0x03bf /* U+014B LATIN SMALL LETTER ENG */
+#define XK_Amacron 0x03c0 /* U+0100 LATIN CAPITAL LETTER A WITH MACRON */
+#define XK_Iogonek 0x03c7 /* U+012E LATIN CAPITAL LETTER I WITH OGONEK */
+#define XK_Eabovedot 0x03cc /* U+0116 LATIN CAPITAL LETTER E WITH DOT ABOVE */
+#define XK_Imacron 0x03cf /* U+012A LATIN CAPITAL LETTER I WITH MACRON */
+#define XK_Ncedilla 0x03d1 /* U+0145 LATIN CAPITAL LETTER N WITH CEDILLA */
+#define XK_Omacron 0x03d2 /* U+014C LATIN CAPITAL LETTER O WITH MACRON */
+#define XK_Kcedilla 0x03d3 /* U+0136 LATIN CAPITAL LETTER K WITH CEDILLA */
+#define XK_Uogonek 0x03d9 /* U+0172 LATIN CAPITAL LETTER U WITH OGONEK */
+#define XK_Utilde 0x03dd /* U+0168 LATIN CAPITAL LETTER U WITH TILDE */
+#define XK_Umacron 0x03de /* U+016A LATIN CAPITAL LETTER U WITH MACRON */
+#define XK_amacron 0x03e0 /* U+0101 LATIN SMALL LETTER A WITH MACRON */
+#define XK_iogonek 0x03e7 /* U+012F LATIN SMALL LETTER I WITH OGONEK */
+#define XK_eabovedot 0x03ec /* U+0117 LATIN SMALL LETTER E WITH DOT ABOVE */
+#define XK_imacron 0x03ef /* U+012B LATIN SMALL LETTER I WITH MACRON */
+#define XK_ncedilla 0x03f1 /* U+0146 LATIN SMALL LETTER N WITH CEDILLA */
+#define XK_omacron 0x03f2 /* U+014D LATIN SMALL LETTER O WITH MACRON */
+#define XK_kcedilla 0x03f3 /* U+0137 LATIN SMALL LETTER K WITH CEDILLA */
+#define XK_uogonek 0x03f9 /* U+0173 LATIN SMALL LETTER U WITH OGONEK */
+#define XK_utilde 0x03fd /* U+0169 LATIN SMALL LETTER U WITH TILDE */
+#define XK_umacron 0x03fe /* U+016B LATIN SMALL LETTER U WITH MACRON */
+#endif /* XK_LATIN4 */
+
+/*
+ * Latin 8
+ */
+#ifdef XK_LATIN8
+#define XK_Wcircumflex 0x1000174 /* U+0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX */
+#define XK_wcircumflex 0x1000175 /* U+0175 LATIN SMALL LETTER W WITH CIRCUMFLEX */
+#define XK_Ycircumflex 0x1000176 /* U+0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX */
+#define XK_ycircumflex 0x1000177 /* U+0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX */
+#define XK_Babovedot 0x1001e02 /* U+1E02 LATIN CAPITAL LETTER B WITH DOT ABOVE */
+#define XK_babovedot 0x1001e03 /* U+1E03 LATIN SMALL LETTER B WITH DOT ABOVE */
+#define XK_Dabovedot 0x1001e0a /* U+1E0A LATIN CAPITAL LETTER D WITH DOT ABOVE */
+#define XK_dabovedot 0x1001e0b /* U+1E0B LATIN SMALL LETTER D WITH DOT ABOVE */
+#define XK_Fabovedot 0x1001e1e /* U+1E1E LATIN CAPITAL LETTER F WITH DOT ABOVE */
+#define XK_fabovedot 0x1001e1f /* U+1E1F LATIN SMALL LETTER F WITH DOT ABOVE */
+#define XK_Mabovedot 0x1001e40 /* U+1E40 LATIN CAPITAL LETTER M WITH DOT ABOVE */
+#define XK_mabovedot 0x1001e41 /* U+1E41 LATIN SMALL LETTER M WITH DOT ABOVE */
+#define XK_Pabovedot 0x1001e56 /* U+1E56 LATIN CAPITAL LETTER P WITH DOT ABOVE */
+#define XK_pabovedot 0x1001e57 /* U+1E57 LATIN SMALL LETTER P WITH DOT ABOVE */
+#define XK_Sabovedot 0x1001e60 /* U+1E60 LATIN CAPITAL LETTER S WITH DOT ABOVE */
+#define XK_sabovedot 0x1001e61 /* U+1E61 LATIN SMALL LETTER S WITH DOT ABOVE */
+#define XK_Tabovedot 0x1001e6a /* U+1E6A LATIN CAPITAL LETTER T WITH DOT ABOVE */
+#define XK_tabovedot 0x1001e6b /* U+1E6B LATIN SMALL LETTER T WITH DOT ABOVE */
+#define XK_Wgrave 0x1001e80 /* U+1E80 LATIN CAPITAL LETTER W WITH GRAVE */
+#define XK_wgrave 0x1001e81 /* U+1E81 LATIN SMALL LETTER W WITH GRAVE */
+#define XK_Wacute 0x1001e82 /* U+1E82 LATIN CAPITAL LETTER W WITH ACUTE */
+#define XK_wacute 0x1001e83 /* U+1E83 LATIN SMALL LETTER W WITH ACUTE */
+#define XK_Wdiaeresis 0x1001e84 /* U+1E84 LATIN CAPITAL LETTER W WITH DIAERESIS */
+#define XK_wdiaeresis 0x1001e85 /* U+1E85 LATIN SMALL LETTER W WITH DIAERESIS */
+#define XK_Ygrave 0x1001ef2 /* U+1EF2 LATIN CAPITAL LETTER Y WITH GRAVE */
+#define XK_ygrave 0x1001ef3 /* U+1EF3 LATIN SMALL LETTER Y WITH GRAVE */
+#endif /* XK_LATIN8 */
+
+/*
+ * Latin 9
+ * Byte 3 = 0x13
+ */
+
+#ifdef XK_LATIN9
+#define XK_OE 0x13bc /* U+0152 LATIN CAPITAL LIGATURE OE */
+#define XK_oe 0x13bd /* U+0153 LATIN SMALL LIGATURE OE */
+#define XK_Ydiaeresis 0x13be /* U+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS */
+#endif /* XK_LATIN9 */
+
+/*
+ * Katakana
+ * Byte 3 = 4
+ */
+
+#ifdef XK_KATAKANA
+#define XK_overline 0x047e /* U+203E OVERLINE */
+#define XK_kana_fullstop 0x04a1 /* U+3002 IDEOGRAPHIC FULL STOP */
+#define XK_kana_openingbracket 0x04a2 /* U+300C LEFT CORNER BRACKET */
+#define XK_kana_closingbracket 0x04a3 /* U+300D RIGHT CORNER BRACKET */
+#define XK_kana_comma 0x04a4 /* U+3001 IDEOGRAPHIC COMMA */
+#define XK_kana_conjunctive 0x04a5 /* U+30FB KATAKANA MIDDLE DOT */
+#define XK_kana_middledot 0x04a5 /* deprecated */
+#define XK_kana_WO 0x04a6 /* U+30F2 KATAKANA LETTER WO */
+#define XK_kana_a 0x04a7 /* U+30A1 KATAKANA LETTER SMALL A */
+#define XK_kana_i 0x04a8 /* U+30A3 KATAKANA LETTER SMALL I */
+#define XK_kana_u 0x04a9 /* U+30A5 KATAKANA LETTER SMALL U */
+#define XK_kana_e 0x04aa /* U+30A7 KATAKANA LETTER SMALL E */
+#define XK_kana_o 0x04ab /* U+30A9 KATAKANA LETTER SMALL O */
+#define XK_kana_ya 0x04ac /* U+30E3 KATAKANA LETTER SMALL YA */
+#define XK_kana_yu 0x04ad /* U+30E5 KATAKANA LETTER SMALL YU */
+#define XK_kana_yo 0x04ae /* U+30E7 KATAKANA LETTER SMALL YO */
+#define XK_kana_tsu 0x04af /* U+30C3 KATAKANA LETTER SMALL TU */
+#define XK_kana_tu 0x04af /* deprecated */
+#define XK_prolongedsound 0x04b0 /* U+30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK */
+#define XK_kana_A 0x04b1 /* U+30A2 KATAKANA LETTER A */
+#define XK_kana_I 0x04b2 /* U+30A4 KATAKANA LETTER I */
+#define XK_kana_U 0x04b3 /* U+30A6 KATAKANA LETTER U */
+#define XK_kana_E 0x04b4 /* U+30A8 KATAKANA LETTER E */
+#define XK_kana_O 0x04b5 /* U+30AA KATAKANA LETTER O */
+#define XK_kana_KA 0x04b6 /* U+30AB KATAKANA LETTER KA */
+#define XK_kana_KI 0x04b7 /* U+30AD KATAKANA LETTER KI */
+#define XK_kana_KU 0x04b8 /* U+30AF KATAKANA LETTER KU */
+#define XK_kana_KE 0x04b9 /* U+30B1 KATAKANA LETTER KE */
+#define XK_kana_KO 0x04ba /* U+30B3 KATAKANA LETTER KO */
+#define XK_kana_SA 0x04bb /* U+30B5 KATAKANA LETTER SA */
+#define XK_kana_SHI 0x04bc /* U+30B7 KATAKANA LETTER SI */
+#define XK_kana_SU 0x04bd /* U+30B9 KATAKANA LETTER SU */
+#define XK_kana_SE 0x04be /* U+30BB KATAKANA LETTER SE */
+#define XK_kana_SO 0x04bf /* U+30BD KATAKANA LETTER SO */
+#define XK_kana_TA 0x04c0 /* U+30BF KATAKANA LETTER TA */
+#define XK_kana_CHI 0x04c1 /* U+30C1 KATAKANA LETTER TI */
+#define XK_kana_TI 0x04c1 /* deprecated */
+#define XK_kana_TSU 0x04c2 /* U+30C4 KATAKANA LETTER TU */
+#define XK_kana_TU 0x04c2 /* deprecated */
+#define XK_kana_TE 0x04c3 /* U+30C6 KATAKANA LETTER TE */
+#define XK_kana_TO 0x04c4 /* U+30C8 KATAKANA LETTER TO */
+#define XK_kana_NA 0x04c5 /* U+30CA KATAKANA LETTER NA */
+#define XK_kana_NI 0x04c6 /* U+30CB KATAKANA LETTER NI */
+#define XK_kana_NU 0x04c7 /* U+30CC KATAKANA LETTER NU */
+#define XK_kana_NE 0x04c8 /* U+30CD KATAKANA LETTER NE */
+#define XK_kana_NO 0x04c9 /* U+30CE KATAKANA LETTER NO */
+#define XK_kana_HA 0x04ca /* U+30CF KATAKANA LETTER HA */
+#define XK_kana_HI 0x04cb /* U+30D2 KATAKANA LETTER HI */
+#define XK_kana_FU 0x04cc /* U+30D5 KATAKANA LETTER HU */
+#define XK_kana_HU 0x04cc /* deprecated */
+#define XK_kana_HE 0x04cd /* U+30D8 KATAKANA LETTER HE */
+#define XK_kana_HO 0x04ce /* U+30DB KATAKANA LETTER HO */
+#define XK_kana_MA 0x04cf /* U+30DE KATAKANA LETTER MA */
+#define XK_kana_MI 0x04d0 /* U+30DF KATAKANA LETTER MI */
+#define XK_kana_MU 0x04d1 /* U+30E0 KATAKANA LETTER MU */
+#define XK_kana_ME 0x04d2 /* U+30E1 KATAKANA LETTER ME */
+#define XK_kana_MO 0x04d3 /* U+30E2 KATAKANA LETTER MO */
+#define XK_kana_YA 0x04d4 /* U+30E4 KATAKANA LETTER YA */
+#define XK_kana_YU 0x04d5 /* U+30E6 KATAKANA LETTER YU */
+#define XK_kana_YO 0x04d6 /* U+30E8 KATAKANA LETTER YO */
+#define XK_kana_RA 0x04d7 /* U+30E9 KATAKANA LETTER RA */
+#define XK_kana_RI 0x04d8 /* U+30EA KATAKANA LETTER RI */
+#define XK_kana_RU 0x04d9 /* U+30EB KATAKANA LETTER RU */
+#define XK_kana_RE 0x04da /* U+30EC KATAKANA LETTER RE */
+#define XK_kana_RO 0x04db /* U+30ED KATAKANA LETTER RO */
+#define XK_kana_WA 0x04dc /* U+30EF KATAKANA LETTER WA */
+#define XK_kana_N 0x04dd /* U+30F3 KATAKANA LETTER N */
+#define XK_voicedsound 0x04de /* U+309B KATAKANA-HIRAGANA VOICED SOUND MARK */
+#define XK_semivoicedsound 0x04df /* U+309C KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */
+#define XK_kana_switch 0xff7e /* Alias for mode_switch */
+#endif /* XK_KATAKANA */
+
+/*
+ * Arabic
+ * Byte 3 = 5
+ */
+
+#ifdef XK_ARABIC
+#define XK_Farsi_0 0x10006f0 /* U+06F0 EXTENDED ARABIC-INDIC DIGIT ZERO */
+#define XK_Farsi_1 0x10006f1 /* U+06F1 EXTENDED ARABIC-INDIC DIGIT ONE */
+#define XK_Farsi_2 0x10006f2 /* U+06F2 EXTENDED ARABIC-INDIC DIGIT TWO */
+#define XK_Farsi_3 0x10006f3 /* U+06F3 EXTENDED ARABIC-INDIC DIGIT THREE */
+#define XK_Farsi_4 0x10006f4 /* U+06F4 EXTENDED ARABIC-INDIC DIGIT FOUR */
+#define XK_Farsi_5 0x10006f5 /* U+06F5 EXTENDED ARABIC-INDIC DIGIT FIVE */
+#define XK_Farsi_6 0x10006f6 /* U+06F6 EXTENDED ARABIC-INDIC DIGIT SIX */
+#define XK_Farsi_7 0x10006f7 /* U+06F7 EXTENDED ARABIC-INDIC DIGIT SEVEN */
+#define XK_Farsi_8 0x10006f8 /* U+06F8 EXTENDED ARABIC-INDIC DIGIT EIGHT */
+#define XK_Farsi_9 0x10006f9 /* U+06F9 EXTENDED ARABIC-INDIC DIGIT NINE */
+#define XK_Arabic_percent 0x100066a /* U+066A ARABIC PERCENT SIGN */
+#define XK_Arabic_superscript_alef 0x1000670 /* U+0670 ARABIC LETTER SUPERSCRIPT ALEF */
+#define XK_Arabic_tteh 0x1000679 /* U+0679 ARABIC LETTER TTEH */
+#define XK_Arabic_peh 0x100067e /* U+067E ARABIC LETTER PEH */
+#define XK_Arabic_tcheh 0x1000686 /* U+0686 ARABIC LETTER TCHEH */
+#define XK_Arabic_ddal 0x1000688 /* U+0688 ARABIC LETTER DDAL */
+#define XK_Arabic_rreh 0x1000691 /* U+0691 ARABIC LETTER RREH */
+#define XK_Arabic_comma 0x05ac /* U+060C ARABIC COMMA */
+#define XK_Arabic_fullstop 0x10006d4 /* U+06D4 ARABIC FULL STOP */
+#define XK_Arabic_0 0x1000660 /* U+0660 ARABIC-INDIC DIGIT ZERO */
+#define XK_Arabic_1 0x1000661 /* U+0661 ARABIC-INDIC DIGIT ONE */
+#define XK_Arabic_2 0x1000662 /* U+0662 ARABIC-INDIC DIGIT TWO */
+#define XK_Arabic_3 0x1000663 /* U+0663 ARABIC-INDIC DIGIT THREE */
+#define XK_Arabic_4 0x1000664 /* U+0664 ARABIC-INDIC DIGIT FOUR */
+#define XK_Arabic_5 0x1000665 /* U+0665 ARABIC-INDIC DIGIT FIVE */
+#define XK_Arabic_6 0x1000666 /* U+0666 ARABIC-INDIC DIGIT SIX */
+#define XK_Arabic_7 0x1000667 /* U+0667 ARABIC-INDIC DIGIT SEVEN */
+#define XK_Arabic_8 0x1000668 /* U+0668 ARABIC-INDIC DIGIT EIGHT */
+#define XK_Arabic_9 0x1000669 /* U+0669 ARABIC-INDIC DIGIT NINE */
+#define XK_Arabic_semicolon 0x05bb /* U+061B ARABIC SEMICOLON */
+#define XK_Arabic_question_mark 0x05bf /* U+061F ARABIC QUESTION MARK */
+#define XK_Arabic_hamza 0x05c1 /* U+0621 ARABIC LETTER HAMZA */
+#define XK_Arabic_maddaonalef 0x05c2 /* U+0622 ARABIC LETTER ALEF WITH MADDA ABOVE */
+#define XK_Arabic_hamzaonalef 0x05c3 /* U+0623 ARABIC LETTER ALEF WITH HAMZA ABOVE */
+#define XK_Arabic_hamzaonwaw 0x05c4 /* U+0624 ARABIC LETTER WAW WITH HAMZA ABOVE */
+#define XK_Arabic_hamzaunderalef 0x05c5 /* U+0625 ARABIC LETTER ALEF WITH HAMZA BELOW */
+#define XK_Arabic_hamzaonyeh 0x05c6 /* U+0626 ARABIC LETTER YEH WITH HAMZA ABOVE */
+#define XK_Arabic_alef 0x05c7 /* U+0627 ARABIC LETTER ALEF */
+#define XK_Arabic_beh 0x05c8 /* U+0628 ARABIC LETTER BEH */
+#define XK_Arabic_tehmarbuta 0x05c9 /* U+0629 ARABIC LETTER TEH MARBUTA */
+#define XK_Arabic_teh 0x05ca /* U+062A ARABIC LETTER TEH */
+#define XK_Arabic_theh 0x05cb /* U+062B ARABIC LETTER THEH */
+#define XK_Arabic_jeem 0x05cc /* U+062C ARABIC LETTER JEEM */
+#define XK_Arabic_hah 0x05cd /* U+062D ARABIC LETTER HAH */
+#define XK_Arabic_khah 0x05ce /* U+062E ARABIC LETTER KHAH */
+#define XK_Arabic_dal 0x05cf /* U+062F ARABIC LETTER DAL */
+#define XK_Arabic_thal 0x05d0 /* U+0630 ARABIC LETTER THAL */
+#define XK_Arabic_ra 0x05d1 /* U+0631 ARABIC LETTER REH */
+#define XK_Arabic_zain 0x05d2 /* U+0632 ARABIC LETTER ZAIN */
+#define XK_Arabic_seen 0x05d3 /* U+0633 ARABIC LETTER SEEN */
+#define XK_Arabic_sheen 0x05d4 /* U+0634 ARABIC LETTER SHEEN */
+#define XK_Arabic_sad 0x05d5 /* U+0635 ARABIC LETTER SAD */
+#define XK_Arabic_dad 0x05d6 /* U+0636 ARABIC LETTER DAD */
+#define XK_Arabic_tah 0x05d7 /* U+0637 ARABIC LETTER TAH */
+#define XK_Arabic_zah 0x05d8 /* U+0638 ARABIC LETTER ZAH */
+#define XK_Arabic_ain 0x05d9 /* U+0639 ARABIC LETTER AIN */
+#define XK_Arabic_ghain 0x05da /* U+063A ARABIC LETTER GHAIN */
+#define XK_Arabic_tatweel 0x05e0 /* U+0640 ARABIC TATWEEL */
+#define XK_Arabic_feh 0x05e1 /* U+0641 ARABIC LETTER FEH */
+#define XK_Arabic_qaf 0x05e2 /* U+0642 ARABIC LETTER QAF */
+#define XK_Arabic_kaf 0x05e3 /* U+0643 ARABIC LETTER KAF */
+#define XK_Arabic_lam 0x05e4 /* U+0644 ARABIC LETTER LAM */
+#define XK_Arabic_meem 0x05e5 /* U+0645 ARABIC LETTER MEEM */
+#define XK_Arabic_noon 0x05e6 /* U+0646 ARABIC LETTER NOON */
+#define XK_Arabic_ha 0x05e7 /* U+0647 ARABIC LETTER HEH */
+#define XK_Arabic_heh 0x05e7 /* deprecated */
+#define XK_Arabic_waw 0x05e8 /* U+0648 ARABIC LETTER WAW */
+#define XK_Arabic_alefmaksura 0x05e9 /* U+0649 ARABIC LETTER ALEF MAKSURA */
+#define XK_Arabic_yeh 0x05ea /* U+064A ARABIC LETTER YEH */
+#define XK_Arabic_fathatan 0x05eb /* U+064B ARABIC FATHATAN */
+#define XK_Arabic_dammatan 0x05ec /* U+064C ARABIC DAMMATAN */
+#define XK_Arabic_kasratan 0x05ed /* U+064D ARABIC KASRATAN */
+#define XK_Arabic_fatha 0x05ee /* U+064E ARABIC FATHA */
+#define XK_Arabic_damma 0x05ef /* U+064F ARABIC DAMMA */
+#define XK_Arabic_kasra 0x05f0 /* U+0650 ARABIC KASRA */
+#define XK_Arabic_shadda 0x05f1 /* U+0651 ARABIC SHADDA */
+#define XK_Arabic_sukun 0x05f2 /* U+0652 ARABIC SUKUN */
+#define XK_Arabic_madda_above 0x1000653 /* U+0653 ARABIC MADDAH ABOVE */
+#define XK_Arabic_hamza_above 0x1000654 /* U+0654 ARABIC HAMZA ABOVE */
+#define XK_Arabic_hamza_below 0x1000655 /* U+0655 ARABIC HAMZA BELOW */
+#define XK_Arabic_jeh 0x1000698 /* U+0698 ARABIC LETTER JEH */
+#define XK_Arabic_veh 0x10006a4 /* U+06A4 ARABIC LETTER VEH */
+#define XK_Arabic_keheh 0x10006a9 /* U+06A9 ARABIC LETTER KEHEH */
+#define XK_Arabic_gaf 0x10006af /* U+06AF ARABIC LETTER GAF */
+#define XK_Arabic_noon_ghunna 0x10006ba /* U+06BA ARABIC LETTER NOON GHUNNA */
+#define XK_Arabic_heh_doachashmee 0x10006be /* U+06BE ARABIC LETTER HEH DOACHASHMEE */
+#define XK_Farsi_yeh 0x10006cc /* U+06CC ARABIC LETTER FARSI YEH */
+#define XK_Arabic_farsi_yeh 0x10006cc /* U+06CC ARABIC LETTER FARSI YEH */
+#define XK_Arabic_yeh_baree 0x10006d2 /* U+06D2 ARABIC LETTER YEH BARREE */
+#define XK_Arabic_heh_goal 0x10006c1 /* U+06C1 ARABIC LETTER HEH GOAL */
+#define XK_Arabic_switch 0xff7e /* Alias for mode_switch */
+#endif /* XK_ARABIC */
+
+/*
+ * Cyrillic
+ * Byte 3 = 6
+ */
+#ifdef XK_CYRILLIC
+#define XK_Cyrillic_GHE_bar 0x1000492 /* U+0492 CYRILLIC CAPITAL LETTER GHE WITH STROKE */
+#define XK_Cyrillic_ghe_bar 0x1000493 /* U+0493 CYRILLIC SMALL LETTER GHE WITH STROKE */
+#define XK_Cyrillic_ZHE_descender 0x1000496 /* U+0496 CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER */
+#define XK_Cyrillic_zhe_descender 0x1000497 /* U+0497 CYRILLIC SMALL LETTER ZHE WITH DESCENDER */
+#define XK_Cyrillic_KA_descender 0x100049a /* U+049A CYRILLIC CAPITAL LETTER KA WITH DESCENDER */
+#define XK_Cyrillic_ka_descender 0x100049b /* U+049B CYRILLIC SMALL LETTER KA WITH DESCENDER */
+#define XK_Cyrillic_KA_vertstroke 0x100049c /* U+049C CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE */
+#define XK_Cyrillic_ka_vertstroke 0x100049d /* U+049D CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE */
+#define XK_Cyrillic_EN_descender 0x10004a2 /* U+04A2 CYRILLIC CAPITAL LETTER EN WITH DESCENDER */
+#define XK_Cyrillic_en_descender 0x10004a3 /* U+04A3 CYRILLIC SMALL LETTER EN WITH DESCENDER */
+#define XK_Cyrillic_U_straight 0x10004ae /* U+04AE CYRILLIC CAPITAL LETTER STRAIGHT U */
+#define XK_Cyrillic_u_straight 0x10004af /* U+04AF CYRILLIC SMALL LETTER STRAIGHT U */
+#define XK_Cyrillic_U_straight_bar 0x10004b0 /* U+04B0 CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE */
+#define XK_Cyrillic_u_straight_bar 0x10004b1 /* U+04B1 CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE */
+#define XK_Cyrillic_HA_descender 0x10004b2 /* U+04B2 CYRILLIC CAPITAL LETTER HA WITH DESCENDER */
+#define XK_Cyrillic_ha_descender 0x10004b3 /* U+04B3 CYRILLIC SMALL LETTER HA WITH DESCENDER */
+#define XK_Cyrillic_CHE_descender 0x10004b6 /* U+04B6 CYRILLIC CAPITAL LETTER CHE WITH DESCENDER */
+#define XK_Cyrillic_che_descender 0x10004b7 /* U+04B7 CYRILLIC SMALL LETTER CHE WITH DESCENDER */
+#define XK_Cyrillic_CHE_vertstroke 0x10004b8 /* U+04B8 CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE */
+#define XK_Cyrillic_che_vertstroke 0x10004b9 /* U+04B9 CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE */
+#define XK_Cyrillic_SHHA 0x10004ba /* U+04BA CYRILLIC CAPITAL LETTER SHHA */
+#define XK_Cyrillic_shha 0x10004bb /* U+04BB CYRILLIC SMALL LETTER SHHA */
+
+#define XK_Cyrillic_SCHWA 0x10004d8 /* U+04D8 CYRILLIC CAPITAL LETTER SCHWA */
+#define XK_Cyrillic_schwa 0x10004d9 /* U+04D9 CYRILLIC SMALL LETTER SCHWA */
+#define XK_Cyrillic_I_macron 0x10004e2 /* U+04E2 CYRILLIC CAPITAL LETTER I WITH MACRON */
+#define XK_Cyrillic_i_macron 0x10004e3 /* U+04E3 CYRILLIC SMALL LETTER I WITH MACRON */
+#define XK_Cyrillic_O_bar 0x10004e8 /* U+04E8 CYRILLIC CAPITAL LETTER BARRED O */
+#define XK_Cyrillic_o_bar 0x10004e9 /* U+04E9 CYRILLIC SMALL LETTER BARRED O */
+#define XK_Cyrillic_U_macron 0x10004ee /* U+04EE CYRILLIC CAPITAL LETTER U WITH MACRON */
+#define XK_Cyrillic_u_macron 0x10004ef /* U+04EF CYRILLIC SMALL LETTER U WITH MACRON */
+
+#define XK_Serbian_dje 0x06a1 /* U+0452 CYRILLIC SMALL LETTER DJE */
+#define XK_Macedonia_gje 0x06a2 /* U+0453 CYRILLIC SMALL LETTER GJE */
+#define XK_Cyrillic_io 0x06a3 /* U+0451 CYRILLIC SMALL LETTER IO */
+#define XK_Ukrainian_ie 0x06a4 /* U+0454 CYRILLIC SMALL LETTER UKRAINIAN IE */
+#define XK_Ukranian_je 0x06a4 /* deprecated */
+#define XK_Macedonia_dse 0x06a5 /* U+0455 CYRILLIC SMALL LETTER DZE */
+#define XK_Ukrainian_i 0x06a6 /* U+0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */
+#define XK_Ukranian_i 0x06a6 /* deprecated */
+#define XK_Ukrainian_yi 0x06a7 /* U+0457 CYRILLIC SMALL LETTER YI */
+#define XK_Ukranian_yi 0x06a7 /* deprecated */
+#define XK_Cyrillic_je 0x06a8 /* U+0458 CYRILLIC SMALL LETTER JE */
+#define XK_Serbian_je 0x06a8 /* deprecated */
+#define XK_Cyrillic_lje 0x06a9 /* U+0459 CYRILLIC SMALL LETTER LJE */
+#define XK_Serbian_lje 0x06a9 /* deprecated */
+#define XK_Cyrillic_nje 0x06aa /* U+045A CYRILLIC SMALL LETTER NJE */
+#define XK_Serbian_nje 0x06aa /* deprecated */
+#define XK_Serbian_tshe 0x06ab /* U+045B CYRILLIC SMALL LETTER TSHE */
+#define XK_Macedonia_kje 0x06ac /* U+045C CYRILLIC SMALL LETTER KJE */
+#define XK_Ukrainian_ghe_with_upturn 0x06ad /* U+0491 CYRILLIC SMALL LETTER GHE WITH UPTURN */
+#define XK_Byelorussian_shortu 0x06ae /* U+045E CYRILLIC SMALL LETTER SHORT U */
+#define XK_Cyrillic_dzhe 0x06af /* U+045F CYRILLIC SMALL LETTER DZHE */
+#define XK_Serbian_dze 0x06af /* deprecated */
+#define XK_numerosign 0x06b0 /* U+2116 NUMERO SIGN */
+#define XK_Serbian_DJE 0x06b1 /* U+0402 CYRILLIC CAPITAL LETTER DJE */
+#define XK_Macedonia_GJE 0x06b2 /* U+0403 CYRILLIC CAPITAL LETTER GJE */
+#define XK_Cyrillic_IO 0x06b3 /* U+0401 CYRILLIC CAPITAL LETTER IO */
+#define XK_Ukrainian_IE 0x06b4 /* U+0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE */
+#define XK_Ukranian_JE 0x06b4 /* deprecated */
+#define XK_Macedonia_DSE 0x06b5 /* U+0405 CYRILLIC CAPITAL LETTER DZE */
+#define XK_Ukrainian_I 0x06b6 /* U+0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */
+#define XK_Ukranian_I 0x06b6 /* deprecated */
+#define XK_Ukrainian_YI 0x06b7 /* U+0407 CYRILLIC CAPITAL LETTER YI */
+#define XK_Ukranian_YI 0x06b7 /* deprecated */
+#define XK_Cyrillic_JE 0x06b8 /* U+0408 CYRILLIC CAPITAL LETTER JE */
+#define XK_Serbian_JE 0x06b8 /* deprecated */
+#define XK_Cyrillic_LJE 0x06b9 /* U+0409 CYRILLIC CAPITAL LETTER LJE */
+#define XK_Serbian_LJE 0x06b9 /* deprecated */
+#define XK_Cyrillic_NJE 0x06ba /* U+040A CYRILLIC CAPITAL LETTER NJE */
+#define XK_Serbian_NJE 0x06ba /* deprecated */
+#define XK_Serbian_TSHE 0x06bb /* U+040B CYRILLIC CAPITAL LETTER TSHE */
+#define XK_Macedonia_KJE 0x06bc /* U+040C CYRILLIC CAPITAL LETTER KJE */
+#define XK_Ukrainian_GHE_WITH_UPTURN 0x06bd /* U+0490 CYRILLIC CAPITAL LETTER GHE WITH UPTURN */
+#define XK_Byelorussian_SHORTU 0x06be /* U+040E CYRILLIC CAPITAL LETTER SHORT U */
+#define XK_Cyrillic_DZHE 0x06bf /* U+040F CYRILLIC CAPITAL LETTER DZHE */
+#define XK_Serbian_DZE 0x06bf /* deprecated */
+#define XK_Cyrillic_yu 0x06c0 /* U+044E CYRILLIC SMALL LETTER YU */
+#define XK_Cyrillic_a 0x06c1 /* U+0430 CYRILLIC SMALL LETTER A */
+#define XK_Cyrillic_be 0x06c2 /* U+0431 CYRILLIC SMALL LETTER BE */
+#define XK_Cyrillic_tse 0x06c3 /* U+0446 CYRILLIC SMALL LETTER TSE */
+#define XK_Cyrillic_de 0x06c4 /* U+0434 CYRILLIC SMALL LETTER DE */
+#define XK_Cyrillic_ie 0x06c5 /* U+0435 CYRILLIC SMALL LETTER IE */
+#define XK_Cyrillic_ef 0x06c6 /* U+0444 CYRILLIC SMALL LETTER EF */
+#define XK_Cyrillic_ghe 0x06c7 /* U+0433 CYRILLIC SMALL LETTER GHE */
+#define XK_Cyrillic_ha 0x06c8 /* U+0445 CYRILLIC SMALL LETTER HA */
+#define XK_Cyrillic_i 0x06c9 /* U+0438 CYRILLIC SMALL LETTER I */
+#define XK_Cyrillic_shorti 0x06ca /* U+0439 CYRILLIC SMALL LETTER SHORT I */
+#define XK_Cyrillic_ka 0x06cb /* U+043A CYRILLIC SMALL LETTER KA */
+#define XK_Cyrillic_el 0x06cc /* U+043B CYRILLIC SMALL LETTER EL */
+#define XK_Cyrillic_em 0x06cd /* U+043C CYRILLIC SMALL LETTER EM */
+#define XK_Cyrillic_en 0x06ce /* U+043D CYRILLIC SMALL LETTER EN */
+#define XK_Cyrillic_o 0x06cf /* U+043E CYRILLIC SMALL LETTER O */
+#define XK_Cyrillic_pe 0x06d0 /* U+043F CYRILLIC SMALL LETTER PE */
+#define XK_Cyrillic_ya 0x06d1 /* U+044F CYRILLIC SMALL LETTER YA */
+#define XK_Cyrillic_er 0x06d2 /* U+0440 CYRILLIC SMALL LETTER ER */
+#define XK_Cyrillic_es 0x06d3 /* U+0441 CYRILLIC SMALL LETTER ES */
+#define XK_Cyrillic_te 0x06d4 /* U+0442 CYRILLIC SMALL LETTER TE */
+#define XK_Cyrillic_u 0x06d5 /* U+0443 CYRILLIC SMALL LETTER U */
+#define XK_Cyrillic_zhe 0x06d6 /* U+0436 CYRILLIC SMALL LETTER ZHE */
+#define XK_Cyrillic_ve 0x06d7 /* U+0432 CYRILLIC SMALL LETTER VE */
+#define XK_Cyrillic_softsign 0x06d8 /* U+044C CYRILLIC SMALL LETTER SOFT SIGN */
+#define XK_Cyrillic_yeru 0x06d9 /* U+044B CYRILLIC SMALL LETTER YERU */
+#define XK_Cyrillic_ze 0x06da /* U+0437 CYRILLIC SMALL LETTER ZE */
+#define XK_Cyrillic_sha 0x06db /* U+0448 CYRILLIC SMALL LETTER SHA */
+#define XK_Cyrillic_e 0x06dc /* U+044D CYRILLIC SMALL LETTER E */
+#define XK_Cyrillic_shcha 0x06dd /* U+0449 CYRILLIC SMALL LETTER SHCHA */
+#define XK_Cyrillic_che 0x06de /* U+0447 CYRILLIC SMALL LETTER CHE */
+#define XK_Cyrillic_hardsign 0x06df /* U+044A CYRILLIC SMALL LETTER HARD SIGN */
+#define XK_Cyrillic_YU 0x06e0 /* U+042E CYRILLIC CAPITAL LETTER YU */
+#define XK_Cyrillic_A 0x06e1 /* U+0410 CYRILLIC CAPITAL LETTER A */
+#define XK_Cyrillic_BE 0x06e2 /* U+0411 CYRILLIC CAPITAL LETTER BE */
+#define XK_Cyrillic_TSE 0x06e3 /* U+0426 CYRILLIC CAPITAL LETTER TSE */
+#define XK_Cyrillic_DE 0x06e4 /* U+0414 CYRILLIC CAPITAL LETTER DE */
+#define XK_Cyrillic_IE 0x06e5 /* U+0415 CYRILLIC CAPITAL LETTER IE */
+#define XK_Cyrillic_EF 0x06e6 /* U+0424 CYRILLIC CAPITAL LETTER EF */
+#define XK_Cyrillic_GHE 0x06e7 /* U+0413 CYRILLIC CAPITAL LETTER GHE */
+#define XK_Cyrillic_HA 0x06e8 /* U+0425 CYRILLIC CAPITAL LETTER HA */
+#define XK_Cyrillic_I 0x06e9 /* U+0418 CYRILLIC CAPITAL LETTER I */
+#define XK_Cyrillic_SHORTI 0x06ea /* U+0419 CYRILLIC CAPITAL LETTER SHORT I */
+#define XK_Cyrillic_KA 0x06eb /* U+041A CYRILLIC CAPITAL LETTER KA */
+#define XK_Cyrillic_EL 0x06ec /* U+041B CYRILLIC CAPITAL LETTER EL */
+#define XK_Cyrillic_EM 0x06ed /* U+041C CYRILLIC CAPITAL LETTER EM */
+#define XK_Cyrillic_EN 0x06ee /* U+041D CYRILLIC CAPITAL LETTER EN */
+#define XK_Cyrillic_O 0x06ef /* U+041E CYRILLIC CAPITAL LETTER O */
+#define XK_Cyrillic_PE 0x06f0 /* U+041F CYRILLIC CAPITAL LETTER PE */
+#define XK_Cyrillic_YA 0x06f1 /* U+042F CYRILLIC CAPITAL LETTER YA */
+#define XK_Cyrillic_ER 0x06f2 /* U+0420 CYRILLIC CAPITAL LETTER ER */
+#define XK_Cyrillic_ES 0x06f3 /* U+0421 CYRILLIC CAPITAL LETTER ES */
+#define XK_Cyrillic_TE 0x06f4 /* U+0422 CYRILLIC CAPITAL LETTER TE */
+#define XK_Cyrillic_U 0x06f5 /* U+0423 CYRILLIC CAPITAL LETTER U */
+#define XK_Cyrillic_ZHE 0x06f6 /* U+0416 CYRILLIC CAPITAL LETTER ZHE */
+#define XK_Cyrillic_VE 0x06f7 /* U+0412 CYRILLIC CAPITAL LETTER VE */
+#define XK_Cyrillic_SOFTSIGN 0x06f8 /* U+042C CYRILLIC CAPITAL LETTER SOFT SIGN */
+#define XK_Cyrillic_YERU 0x06f9 /* U+042B CYRILLIC CAPITAL LETTER YERU */
+#define XK_Cyrillic_ZE 0x06fa /* U+0417 CYRILLIC CAPITAL LETTER ZE */
+#define XK_Cyrillic_SHA 0x06fb /* U+0428 CYRILLIC CAPITAL LETTER SHA */
+#define XK_Cyrillic_E 0x06fc /* U+042D CYRILLIC CAPITAL LETTER E */
+#define XK_Cyrillic_SHCHA 0x06fd /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */
+#define XK_Cyrillic_CHE 0x06fe /* U+0427 CYRILLIC CAPITAL LETTER CHE */
+#define XK_Cyrillic_HARDSIGN 0x06ff /* U+042A CYRILLIC CAPITAL LETTER HARD SIGN */
+#endif /* XK_CYRILLIC */
+
+/*
+ * Greek
+ * (based on an early draft of, and not quite identical to, ISO/IEC 8859-7)
+ * Byte 3 = 7
+ */
+
+#ifdef XK_GREEK
+#define XK_Greek_ALPHAaccent 0x07a1 /* U+0386 GREEK CAPITAL LETTER ALPHA WITH TONOS */
+#define XK_Greek_EPSILONaccent 0x07a2 /* U+0388 GREEK CAPITAL LETTER EPSILON WITH TONOS */
+#define XK_Greek_ETAaccent 0x07a3 /* U+0389 GREEK CAPITAL LETTER ETA WITH TONOS */
+#define XK_Greek_IOTAaccent 0x07a4 /* U+038A GREEK CAPITAL LETTER IOTA WITH TONOS */
+#define XK_Greek_IOTAdieresis 0x07a5 /* U+03AA GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */
+#define XK_Greek_IOTAdiaeresis 0x07a5 /* old typo */
+#define XK_Greek_OMICRONaccent 0x07a7 /* U+038C GREEK CAPITAL LETTER OMICRON WITH TONOS */
+#define XK_Greek_UPSILONaccent 0x07a8 /* U+038E GREEK CAPITAL LETTER UPSILON WITH TONOS */
+#define XK_Greek_UPSILONdieresis 0x07a9 /* U+03AB GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */
+#define XK_Greek_OMEGAaccent 0x07ab /* U+038F GREEK CAPITAL LETTER OMEGA WITH TONOS */
+#define XK_Greek_accentdieresis 0x07ae /* U+0385 GREEK DIALYTIKA TONOS */
+#define XK_Greek_horizbar 0x07af /* U+2015 HORIZONTAL BAR */
+#define XK_Greek_alphaaccent 0x07b1 /* U+03AC GREEK SMALL LETTER ALPHA WITH TONOS */
+#define XK_Greek_epsilonaccent 0x07b2 /* U+03AD GREEK SMALL LETTER EPSILON WITH TONOS */
+#define XK_Greek_etaaccent 0x07b3 /* U+03AE GREEK SMALL LETTER ETA WITH TONOS */
+#define XK_Greek_iotaaccent 0x07b4 /* U+03AF GREEK SMALL LETTER IOTA WITH TONOS */
+#define XK_Greek_iotadieresis 0x07b5 /* U+03CA GREEK SMALL LETTER IOTA WITH DIALYTIKA */
+#define XK_Greek_iotaaccentdieresis 0x07b6 /* U+0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */
+#define XK_Greek_omicronaccent 0x07b7 /* U+03CC GREEK SMALL LETTER OMICRON WITH TONOS */
+#define XK_Greek_upsilonaccent 0x07b8 /* U+03CD GREEK SMALL LETTER UPSILON WITH TONOS */
+#define XK_Greek_upsilondieresis 0x07b9 /* U+03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA */
+#define XK_Greek_upsilonaccentdieresis 0x07ba /* U+03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */
+#define XK_Greek_omegaaccent 0x07bb /* U+03CE GREEK SMALL LETTER OMEGA WITH TONOS */
+#define XK_Greek_ALPHA 0x07c1 /* U+0391 GREEK CAPITAL LETTER ALPHA */
+#define XK_Greek_BETA 0x07c2 /* U+0392 GREEK CAPITAL LETTER BETA */
+#define XK_Greek_GAMMA 0x07c3 /* U+0393 GREEK CAPITAL LETTER GAMMA */
+#define XK_Greek_DELTA 0x07c4 /* U+0394 GREEK CAPITAL LETTER DELTA */
+#define XK_Greek_EPSILON 0x07c5 /* U+0395 GREEK CAPITAL LETTER EPSILON */
+#define XK_Greek_ZETA 0x07c6 /* U+0396 GREEK CAPITAL LETTER ZETA */
+#define XK_Greek_ETA 0x07c7 /* U+0397 GREEK CAPITAL LETTER ETA */
+#define XK_Greek_THETA 0x07c8 /* U+0398 GREEK CAPITAL LETTER THETA */
+#define XK_Greek_IOTA 0x07c9 /* U+0399 GREEK CAPITAL LETTER IOTA */
+#define XK_Greek_KAPPA 0x07ca /* U+039A GREEK CAPITAL LETTER KAPPA */
+#define XK_Greek_LAMDA 0x07cb /* U+039B GREEK CAPITAL LETTER LAMDA */
+#define XK_Greek_LAMBDA 0x07cb /* U+039B GREEK CAPITAL LETTER LAMDA */
+#define XK_Greek_MU 0x07cc /* U+039C GREEK CAPITAL LETTER MU */
+#define XK_Greek_NU 0x07cd /* U+039D GREEK CAPITAL LETTER NU */
+#define XK_Greek_XI 0x07ce /* U+039E GREEK CAPITAL LETTER XI */
+#define XK_Greek_OMICRON 0x07cf /* U+039F GREEK CAPITAL LETTER OMICRON */
+#define XK_Greek_PI 0x07d0 /* U+03A0 GREEK CAPITAL LETTER PI */
+#define XK_Greek_RHO 0x07d1 /* U+03A1 GREEK CAPITAL LETTER RHO */
+#define XK_Greek_SIGMA 0x07d2 /* U+03A3 GREEK CAPITAL LETTER SIGMA */
+#define XK_Greek_TAU 0x07d4 /* U+03A4 GREEK CAPITAL LETTER TAU */
+#define XK_Greek_UPSILON 0x07d5 /* U+03A5 GREEK CAPITAL LETTER UPSILON */
+#define XK_Greek_PHI 0x07d6 /* U+03A6 GREEK CAPITAL LETTER PHI */
+#define XK_Greek_CHI 0x07d7 /* U+03A7 GREEK CAPITAL LETTER CHI */
+#define XK_Greek_PSI 0x07d8 /* U+03A8 GREEK CAPITAL LETTER PSI */
+#define XK_Greek_OMEGA 0x07d9 /* U+03A9 GREEK CAPITAL LETTER OMEGA */
+#define XK_Greek_alpha 0x07e1 /* U+03B1 GREEK SMALL LETTER ALPHA */
+#define XK_Greek_beta 0x07e2 /* U+03B2 GREEK SMALL LETTER BETA */
+#define XK_Greek_gamma 0x07e3 /* U+03B3 GREEK SMALL LETTER GAMMA */
+#define XK_Greek_delta 0x07e4 /* U+03B4 GREEK SMALL LETTER DELTA */
+#define XK_Greek_epsilon 0x07e5 /* U+03B5 GREEK SMALL LETTER EPSILON */
+#define XK_Greek_zeta 0x07e6 /* U+03B6 GREEK SMALL LETTER ZETA */
+#define XK_Greek_eta 0x07e7 /* U+03B7 GREEK SMALL LETTER ETA */
+#define XK_Greek_theta 0x07e8 /* U+03B8 GREEK SMALL LETTER THETA */
+#define XK_Greek_iota 0x07e9 /* U+03B9 GREEK SMALL LETTER IOTA */
+#define XK_Greek_kappa 0x07ea /* U+03BA GREEK SMALL LETTER KAPPA */
+#define XK_Greek_lamda 0x07eb /* U+03BB GREEK SMALL LETTER LAMDA */
+#define XK_Greek_lambda 0x07eb /* U+03BB GREEK SMALL LETTER LAMDA */
+#define XK_Greek_mu 0x07ec /* U+03BC GREEK SMALL LETTER MU */
+#define XK_Greek_nu 0x07ed /* U+03BD GREEK SMALL LETTER NU */
+#define XK_Greek_xi 0x07ee /* U+03BE GREEK SMALL LETTER XI */
+#define XK_Greek_omicron 0x07ef /* U+03BF GREEK SMALL LETTER OMICRON */
+#define XK_Greek_pi 0x07f0 /* U+03C0 GREEK SMALL LETTER PI */
+#define XK_Greek_rho 0x07f1 /* U+03C1 GREEK SMALL LETTER RHO */
+#define XK_Greek_sigma 0x07f2 /* U+03C3 GREEK SMALL LETTER SIGMA */
+#define XK_Greek_finalsmallsigma 0x07f3 /* U+03C2 GREEK SMALL LETTER FINAL SIGMA */
+#define XK_Greek_tau 0x07f4 /* U+03C4 GREEK SMALL LETTER TAU */
+#define XK_Greek_upsilon 0x07f5 /* U+03C5 GREEK SMALL LETTER UPSILON */
+#define XK_Greek_phi 0x07f6 /* U+03C6 GREEK SMALL LETTER PHI */
+#define XK_Greek_chi 0x07f7 /* U+03C7 GREEK SMALL LETTER CHI */
+#define XK_Greek_psi 0x07f8 /* U+03C8 GREEK SMALL LETTER PSI */
+#define XK_Greek_omega 0x07f9 /* U+03C9 GREEK SMALL LETTER OMEGA */
+#define XK_Greek_switch 0xff7e /* Alias for mode_switch */
+#endif /* XK_GREEK */
+
+/*
+ * Technical
+ * (from the DEC VT330/VT420 Technical Character Set, http://vt100.net/charsets/technical.html)
+ * Byte 3 = 8
+ */
+
+#ifdef XK_TECHNICAL
+#define XK_leftradical 0x08a1 /* U+23B7 RADICAL SYMBOL BOTTOM */
+#define XK_topleftradical 0x08a2 /*(U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT)*/
+#define XK_horizconnector 0x08a3 /*(U+2500 BOX DRAWINGS LIGHT HORIZONTAL)*/
+#define XK_topintegral 0x08a4 /* U+2320 TOP HALF INTEGRAL */
+#define XK_botintegral 0x08a5 /* U+2321 BOTTOM HALF INTEGRAL */
+#define XK_vertconnector 0x08a6 /*(U+2502 BOX DRAWINGS LIGHT VERTICAL)*/
+#define XK_topleftsqbracket 0x08a7 /* U+23A1 LEFT SQUARE BRACKET UPPER CORNER */
+#define XK_botleftsqbracket 0x08a8 /* U+23A3 LEFT SQUARE BRACKET LOWER CORNER */
+#define XK_toprightsqbracket 0x08a9 /* U+23A4 RIGHT SQUARE BRACKET UPPER CORNER */
+#define XK_botrightsqbracket 0x08aa /* U+23A6 RIGHT SQUARE BRACKET LOWER CORNER */
+#define XK_topleftparens 0x08ab /* U+239B LEFT PARENTHESIS UPPER HOOK */
+#define XK_botleftparens 0x08ac /* U+239D LEFT PARENTHESIS LOWER HOOK */
+#define XK_toprightparens 0x08ad /* U+239E RIGHT PARENTHESIS UPPER HOOK */
+#define XK_botrightparens 0x08ae /* U+23A0 RIGHT PARENTHESIS LOWER HOOK */
+#define XK_leftmiddlecurlybrace 0x08af /* U+23A8 LEFT CURLY BRACKET MIDDLE PIECE */
+#define XK_rightmiddlecurlybrace 0x08b0 /* U+23AC RIGHT CURLY BRACKET MIDDLE PIECE */
+#define XK_topleftsummation 0x08b1
+#define XK_botleftsummation 0x08b2
+#define XK_topvertsummationconnector 0x08b3
+#define XK_botvertsummationconnector 0x08b4
+#define XK_toprightsummation 0x08b5
+#define XK_botrightsummation 0x08b6
+#define XK_rightmiddlesummation 0x08b7
+#define XK_lessthanequal 0x08bc /* U+2264 LESS-THAN OR EQUAL TO */
+#define XK_notequal 0x08bd /* U+2260 NOT EQUAL TO */
+#define XK_greaterthanequal 0x08be /* U+2265 GREATER-THAN OR EQUAL TO */
+#define XK_integral 0x08bf /* U+222B INTEGRAL */
+#define XK_therefore 0x08c0 /* U+2234 THEREFORE */
+#define XK_variation 0x08c1 /* U+221D PROPORTIONAL TO */
+#define XK_infinity 0x08c2 /* U+221E INFINITY */
+#define XK_nabla 0x08c5 /* U+2207 NABLA */
+#define XK_approximate 0x08c8 /* U+223C TILDE OPERATOR */
+#define XK_similarequal 0x08c9 /* U+2243 ASYMPTOTICALLY EQUAL TO */
+#define XK_ifonlyif 0x08cd /* U+21D4 LEFT RIGHT DOUBLE ARROW */
+#define XK_implies 0x08ce /* U+21D2 RIGHTWARDS DOUBLE ARROW */
+#define XK_identical 0x08cf /* U+2261 IDENTICAL TO */
+#define XK_radical 0x08d6 /* U+221A SQUARE ROOT */
+#define XK_includedin 0x08da /* U+2282 SUBSET OF */
+#define XK_includes 0x08db /* U+2283 SUPERSET OF */
+#define XK_intersection 0x08dc /* U+2229 INTERSECTION */
+#define XK_union 0x08dd /* U+222A UNION */
+#define XK_logicaland 0x08de /* U+2227 LOGICAL AND */
+#define XK_logicalor 0x08df /* U+2228 LOGICAL OR */
+#define XK_partialderivative 0x08ef /* U+2202 PARTIAL DIFFERENTIAL */
+#define XK_function 0x08f6 /* U+0192 LATIN SMALL LETTER F WITH HOOK */
+#define XK_leftarrow 0x08fb /* U+2190 LEFTWARDS ARROW */
+#define XK_uparrow 0x08fc /* U+2191 UPWARDS ARROW */
+#define XK_rightarrow 0x08fd /* U+2192 RIGHTWARDS ARROW */
+#define XK_downarrow 0x08fe /* U+2193 DOWNWARDS ARROW */
+#endif /* XK_TECHNICAL */
+
+/*
+ * Special
+ * (from the DEC VT100 Special Graphics Character Set)
+ * Byte 3 = 9
+ */
+
+#ifdef XK_SPECIAL
+#define XK_blank 0x09df
+#define XK_soliddiamond 0x09e0 /* U+25C6 BLACK DIAMOND */
+#define XK_checkerboard 0x09e1 /* U+2592 MEDIUM SHADE */
+#define XK_ht 0x09e2 /* U+2409 SYMBOL FOR HORIZONTAL TABULATION */
+#define XK_ff 0x09e3 /* U+240C SYMBOL FOR FORM FEED */
+#define XK_cr 0x09e4 /* U+240D SYMBOL FOR CARRIAGE RETURN */
+#define XK_lf 0x09e5 /* U+240A SYMBOL FOR LINE FEED */
+#define XK_nl 0x09e8 /* U+2424 SYMBOL FOR NEWLINE */
+#define XK_vt 0x09e9 /* U+240B SYMBOL FOR VERTICAL TABULATION */
+#define XK_lowrightcorner 0x09ea /* U+2518 BOX DRAWINGS LIGHT UP AND LEFT */
+#define XK_uprightcorner 0x09eb /* U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT */
+#define XK_upleftcorner 0x09ec /* U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT */
+#define XK_lowleftcorner 0x09ed /* U+2514 BOX DRAWINGS LIGHT UP AND RIGHT */
+#define XK_crossinglines 0x09ee /* U+253C BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */
+#define XK_horizlinescan1 0x09ef /* U+23BA HORIZONTAL SCAN LINE-1 */
+#define XK_horizlinescan3 0x09f0 /* U+23BB HORIZONTAL SCAN LINE-3 */
+#define XK_horizlinescan5 0x09f1 /* U+2500 BOX DRAWINGS LIGHT HORIZONTAL */
+#define XK_horizlinescan7 0x09f2 /* U+23BC HORIZONTAL SCAN LINE-7 */
+#define XK_horizlinescan9 0x09f3 /* U+23BD HORIZONTAL SCAN LINE-9 */
+#define XK_leftt 0x09f4 /* U+251C BOX DRAWINGS LIGHT VERTICAL AND RIGHT */
+#define XK_rightt 0x09f5 /* U+2524 BOX DRAWINGS LIGHT VERTICAL AND LEFT */
+#define XK_bott 0x09f6 /* U+2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL */
+#define XK_topt 0x09f7 /* U+252C BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */
+#define XK_vertbar 0x09f8 /* U+2502 BOX DRAWINGS LIGHT VERTICAL */
+#endif /* XK_SPECIAL */
+
+/*
+ * Publishing
+ * (these are probably from a long forgotten DEC Publishing
+ * font that once shipped with DECwrite)
+ * Byte 3 = 0x0a
+ */
+
+#ifdef XK_PUBLISHING
+#define XK_emspace 0x0aa1 /* U+2003 EM SPACE */
+#define XK_enspace 0x0aa2 /* U+2002 EN SPACE */
+#define XK_em3space 0x0aa3 /* U+2004 THREE-PER-EM SPACE */
+#define XK_em4space 0x0aa4 /* U+2005 FOUR-PER-EM SPACE */
+#define XK_digitspace 0x0aa5 /* U+2007 FIGURE SPACE */
+#define XK_punctspace 0x0aa6 /* U+2008 PUNCTUATION SPACE */
+#define XK_thinspace 0x0aa7 /* U+2009 THIN SPACE */
+#define XK_hairspace 0x0aa8 /* U+200A HAIR SPACE */
+#define XK_emdash 0x0aa9 /* U+2014 EM DASH */
+#define XK_endash 0x0aaa /* U+2013 EN DASH */
+#define XK_signifblank 0x0aac /*(U+2423 OPEN BOX)*/
+#define XK_ellipsis 0x0aae /* U+2026 HORIZONTAL ELLIPSIS */
+#define XK_doubbaselinedot 0x0aaf /* U+2025 TWO DOT LEADER */
+#define XK_onethird 0x0ab0 /* U+2153 VULGAR FRACTION ONE THIRD */
+#define XK_twothirds 0x0ab1 /* U+2154 VULGAR FRACTION TWO THIRDS */
+#define XK_onefifth 0x0ab2 /* U+2155 VULGAR FRACTION ONE FIFTH */
+#define XK_twofifths 0x0ab3 /* U+2156 VULGAR FRACTION TWO FIFTHS */
+#define XK_threefifths 0x0ab4 /* U+2157 VULGAR FRACTION THREE FIFTHS */
+#define XK_fourfifths 0x0ab5 /* U+2158 VULGAR FRACTION FOUR FIFTHS */
+#define XK_onesixth 0x0ab6 /* U+2159 VULGAR FRACTION ONE SIXTH */
+#define XK_fivesixths 0x0ab7 /* U+215A VULGAR FRACTION FIVE SIXTHS */
+#define XK_careof 0x0ab8 /* U+2105 CARE OF */
+#define XK_figdash 0x0abb /* U+2012 FIGURE DASH */
+#define XK_leftanglebracket 0x0abc /*(U+27E8 MATHEMATICAL LEFT ANGLE BRACKET)*/
+#define XK_decimalpoint 0x0abd /*(U+002E FULL STOP)*/
+#define XK_rightanglebracket 0x0abe /*(U+27E9 MATHEMATICAL RIGHT ANGLE BRACKET)*/
+#define XK_marker 0x0abf
+#define XK_oneeighth 0x0ac3 /* U+215B VULGAR FRACTION ONE EIGHTH */
+#define XK_threeeighths 0x0ac4 /* U+215C VULGAR FRACTION THREE EIGHTHS */
+#define XK_fiveeighths 0x0ac5 /* U+215D VULGAR FRACTION FIVE EIGHTHS */
+#define XK_seveneighths 0x0ac6 /* U+215E VULGAR FRACTION SEVEN EIGHTHS */
+#define XK_trademark 0x0ac9 /* U+2122 TRADE MARK SIGN */
+#define XK_signaturemark 0x0aca /*(U+2613 SALTIRE)*/
+#define XK_trademarkincircle 0x0acb
+#define XK_leftopentriangle 0x0acc /*(U+25C1 WHITE LEFT-POINTING TRIANGLE)*/
+#define XK_rightopentriangle 0x0acd /*(U+25B7 WHITE RIGHT-POINTING TRIANGLE)*/
+#define XK_emopencircle 0x0ace /*(U+25CB WHITE CIRCLE)*/
+#define XK_emopenrectangle 0x0acf /*(U+25AF WHITE VERTICAL RECTANGLE)*/
+#define XK_leftsinglequotemark 0x0ad0 /* U+2018 LEFT SINGLE QUOTATION MARK */
+#define XK_rightsinglequotemark 0x0ad1 /* U+2019 RIGHT SINGLE QUOTATION MARK */
+#define XK_leftdoublequotemark 0x0ad2 /* U+201C LEFT DOUBLE QUOTATION MARK */
+#define XK_rightdoublequotemark 0x0ad3 /* U+201D RIGHT DOUBLE QUOTATION MARK */
+#define XK_prescription 0x0ad4 /* U+211E PRESCRIPTION TAKE */
+#define XK_permille 0x0ad5 /* U+2030 PER MILLE SIGN */
+#define XK_minutes 0x0ad6 /* U+2032 PRIME */
+#define XK_seconds 0x0ad7 /* U+2033 DOUBLE PRIME */
+#define XK_latincross 0x0ad9 /* U+271D LATIN CROSS */
+#define XK_hexagram 0x0ada
+#define XK_filledrectbullet 0x0adb /*(U+25AC BLACK RECTANGLE)*/
+#define XK_filledlefttribullet 0x0adc /*(U+25C0 BLACK LEFT-POINTING TRIANGLE)*/
+#define XK_filledrighttribullet 0x0add /*(U+25B6 BLACK RIGHT-POINTING TRIANGLE)*/
+#define XK_emfilledcircle 0x0ade /*(U+25CF BLACK CIRCLE)*/
+#define XK_emfilledrect 0x0adf /*(U+25AE BLACK VERTICAL RECTANGLE)*/
+#define XK_enopencircbullet 0x0ae0 /*(U+25E6 WHITE BULLET)*/
+#define XK_enopensquarebullet 0x0ae1 /*(U+25AB WHITE SMALL SQUARE)*/
+#define XK_openrectbullet 0x0ae2 /*(U+25AD WHITE RECTANGLE)*/
+#define XK_opentribulletup 0x0ae3 /*(U+25B3 WHITE UP-POINTING TRIANGLE)*/
+#define XK_opentribulletdown 0x0ae4 /*(U+25BD WHITE DOWN-POINTING TRIANGLE)*/
+#define XK_openstar 0x0ae5 /*(U+2606 WHITE STAR)*/
+#define XK_enfilledcircbullet 0x0ae6 /*(U+2022 BULLET)*/
+#define XK_enfilledsqbullet 0x0ae7 /*(U+25AA BLACK SMALL SQUARE)*/
+#define XK_filledtribulletup 0x0ae8 /*(U+25B2 BLACK UP-POINTING TRIANGLE)*/
+#define XK_filledtribulletdown 0x0ae9 /*(U+25BC BLACK DOWN-POINTING TRIANGLE)*/
+#define XK_leftpointer 0x0aea /*(U+261C WHITE LEFT POINTING INDEX)*/
+#define XK_rightpointer 0x0aeb /*(U+261E WHITE RIGHT POINTING INDEX)*/
+#define XK_club 0x0aec /* U+2663 BLACK CLUB SUIT */
+#define XK_diamond 0x0aed /* U+2666 BLACK DIAMOND SUIT */
+#define XK_heart 0x0aee /* U+2665 BLACK HEART SUIT */
+#define XK_maltesecross 0x0af0 /* U+2720 MALTESE CROSS */
+#define XK_dagger 0x0af1 /* U+2020 DAGGER */
+#define XK_doubledagger 0x0af2 /* U+2021 DOUBLE DAGGER */
+#define XK_checkmark 0x0af3 /* U+2713 CHECK MARK */
+#define XK_ballotcross 0x0af4 /* U+2717 BALLOT X */
+#define XK_musicalsharp 0x0af5 /* U+266F MUSIC SHARP SIGN */
+#define XK_musicalflat 0x0af6 /* U+266D MUSIC FLAT SIGN */
+#define XK_malesymbol 0x0af7 /* U+2642 MALE SIGN */
+#define XK_femalesymbol 0x0af8 /* U+2640 FEMALE SIGN */
+#define XK_telephone 0x0af9 /* U+260E BLACK TELEPHONE */
+#define XK_telephonerecorder 0x0afa /* U+2315 TELEPHONE RECORDER */
+#define XK_phonographcopyright 0x0afb /* U+2117 SOUND RECORDING COPYRIGHT */
+#define XK_caret 0x0afc /* U+2038 CARET */
+#define XK_singlelowquotemark 0x0afd /* U+201A SINGLE LOW-9 QUOTATION MARK */
+#define XK_doublelowquotemark 0x0afe /* U+201E DOUBLE LOW-9 QUOTATION MARK */
+#define XK_cursor 0x0aff
+#endif /* XK_PUBLISHING */
+
+/*
+ * APL
+ * Byte 3 = 0x0b
+ */
+
+#ifdef XK_APL
+#define XK_leftcaret 0x0ba3 /*(U+003C LESS-THAN SIGN)*/
+#define XK_rightcaret 0x0ba6 /*(U+003E GREATER-THAN SIGN)*/
+#define XK_downcaret 0x0ba8 /*(U+2228 LOGICAL OR)*/
+#define XK_upcaret 0x0ba9 /*(U+2227 LOGICAL AND)*/
+#define XK_overbar 0x0bc0 /*(U+00AF MACRON)*/
+#define XK_downtack 0x0bc2 /* U+22A4 DOWN TACK */
+#define XK_upshoe 0x0bc3 /*(U+2229 INTERSECTION)*/
+#define XK_downstile 0x0bc4 /* U+230A LEFT FLOOR */
+#define XK_underbar 0x0bc6 /*(U+005F LOW LINE)*/
+#define XK_jot 0x0bca /* U+2218 RING OPERATOR */
+#define XK_quad 0x0bcc /* U+2395 APL FUNCTIONAL SYMBOL QUAD */
+#define XK_uptack 0x0bce /* U+22A5 UP TACK */
+#define XK_circle 0x0bcf /* U+25CB WHITE CIRCLE */
+#define XK_upstile 0x0bd3 /* U+2308 LEFT CEILING */
+#define XK_downshoe 0x0bd6 /*(U+222A UNION)*/
+#define XK_rightshoe 0x0bd8 /*(U+2283 SUPERSET OF)*/
+#define XK_leftshoe 0x0bda /*(U+2282 SUBSET OF)*/
+#define XK_lefttack 0x0bdc /* U+22A3 LEFT TACK */
+#define XK_righttack 0x0bfc /* U+22A2 RIGHT TACK */
+#endif /* XK_APL */
+
+/*
+ * Hebrew
+ * Byte 3 = 0x0c
+ */
+
+#ifdef XK_HEBREW
+#define XK_hebrew_doublelowline 0x0cdf /* U+2017 DOUBLE LOW LINE */
+#define XK_hebrew_aleph 0x0ce0 /* U+05D0 HEBREW LETTER ALEF */
+#define XK_hebrew_bet 0x0ce1 /* U+05D1 HEBREW LETTER BET */
+#define XK_hebrew_beth 0x0ce1 /* deprecated */
+#define XK_hebrew_gimel 0x0ce2 /* U+05D2 HEBREW LETTER GIMEL */
+#define XK_hebrew_gimmel 0x0ce2 /* deprecated */
+#define XK_hebrew_dalet 0x0ce3 /* U+05D3 HEBREW LETTER DALET */
+#define XK_hebrew_daleth 0x0ce3 /* deprecated */
+#define XK_hebrew_he 0x0ce4 /* U+05D4 HEBREW LETTER HE */
+#define XK_hebrew_waw 0x0ce5 /* U+05D5 HEBREW LETTER VAV */
+#define XK_hebrew_zain 0x0ce6 /* U+05D6 HEBREW LETTER ZAYIN */
+#define XK_hebrew_zayin 0x0ce6 /* deprecated */
+#define XK_hebrew_chet 0x0ce7 /* U+05D7 HEBREW LETTER HET */
+#define XK_hebrew_het 0x0ce7 /* deprecated */
+#define XK_hebrew_tet 0x0ce8 /* U+05D8 HEBREW LETTER TET */
+#define XK_hebrew_teth 0x0ce8 /* deprecated */
+#define XK_hebrew_yod 0x0ce9 /* U+05D9 HEBREW LETTER YOD */
+#define XK_hebrew_finalkaph 0x0cea /* U+05DA HEBREW LETTER FINAL KAF */
+#define XK_hebrew_kaph 0x0ceb /* U+05DB HEBREW LETTER KAF */
+#define XK_hebrew_lamed 0x0cec /* U+05DC HEBREW LETTER LAMED */
+#define XK_hebrew_finalmem 0x0ced /* U+05DD HEBREW LETTER FINAL MEM */
+#define XK_hebrew_mem 0x0cee /* U+05DE HEBREW LETTER MEM */
+#define XK_hebrew_finalnun 0x0cef /* U+05DF HEBREW LETTER FINAL NUN */
+#define XK_hebrew_nun 0x0cf0 /* U+05E0 HEBREW LETTER NUN */
+#define XK_hebrew_samech 0x0cf1 /* U+05E1 HEBREW LETTER SAMEKH */
+#define XK_hebrew_samekh 0x0cf1 /* deprecated */
+#define XK_hebrew_ayin 0x0cf2 /* U+05E2 HEBREW LETTER AYIN */
+#define XK_hebrew_finalpe 0x0cf3 /* U+05E3 HEBREW LETTER FINAL PE */
+#define XK_hebrew_pe 0x0cf4 /* U+05E4 HEBREW LETTER PE */
+#define XK_hebrew_finalzade 0x0cf5 /* U+05E5 HEBREW LETTER FINAL TSADI */
+#define XK_hebrew_finalzadi 0x0cf5 /* deprecated */
+#define XK_hebrew_zade 0x0cf6 /* U+05E6 HEBREW LETTER TSADI */
+#define XK_hebrew_zadi 0x0cf6 /* deprecated */
+#define XK_hebrew_qoph 0x0cf7 /* U+05E7 HEBREW LETTER QOF */
+#define XK_hebrew_kuf 0x0cf7 /* deprecated */
+#define XK_hebrew_resh 0x0cf8 /* U+05E8 HEBREW LETTER RESH */
+#define XK_hebrew_shin 0x0cf9 /* U+05E9 HEBREW LETTER SHIN */
+#define XK_hebrew_taw 0x0cfa /* U+05EA HEBREW LETTER TAV */
+#define XK_hebrew_taf 0x0cfa /* deprecated */
+#define XK_Hebrew_switch 0xff7e /* Alias for mode_switch */
+#endif /* XK_HEBREW */
+
+/*
+ * Thai
+ * Byte 3 = 0x0d
+ */
+
+#ifdef XK_THAI
+#define XK_Thai_kokai 0x0da1 /* U+0E01 THAI CHARACTER KO KAI */
+#define XK_Thai_khokhai 0x0da2 /* U+0E02 THAI CHARACTER KHO KHAI */
+#define XK_Thai_khokhuat 0x0da3 /* U+0E03 THAI CHARACTER KHO KHUAT */
+#define XK_Thai_khokhwai 0x0da4 /* U+0E04 THAI CHARACTER KHO KHWAI */
+#define XK_Thai_khokhon 0x0da5 /* U+0E05 THAI CHARACTER KHO KHON */
+#define XK_Thai_khorakhang 0x0da6 /* U+0E06 THAI CHARACTER KHO RAKHANG */
+#define XK_Thai_ngongu 0x0da7 /* U+0E07 THAI CHARACTER NGO NGU */
+#define XK_Thai_chochan 0x0da8 /* U+0E08 THAI CHARACTER CHO CHAN */
+#define XK_Thai_choching 0x0da9 /* U+0E09 THAI CHARACTER CHO CHING */
+#define XK_Thai_chochang 0x0daa /* U+0E0A THAI CHARACTER CHO CHANG */
+#define XK_Thai_soso 0x0dab /* U+0E0B THAI CHARACTER SO SO */
+#define XK_Thai_chochoe 0x0dac /* U+0E0C THAI CHARACTER CHO CHOE */
+#define XK_Thai_yoying 0x0dad /* U+0E0D THAI CHARACTER YO YING */
+#define XK_Thai_dochada 0x0dae /* U+0E0E THAI CHARACTER DO CHADA */
+#define XK_Thai_topatak 0x0daf /* U+0E0F THAI CHARACTER TO PATAK */
+#define XK_Thai_thothan 0x0db0 /* U+0E10 THAI CHARACTER THO THAN */
+#define XK_Thai_thonangmontho 0x0db1 /* U+0E11 THAI CHARACTER THO NANGMONTHO */
+#define XK_Thai_thophuthao 0x0db2 /* U+0E12 THAI CHARACTER THO PHUTHAO */
+#define XK_Thai_nonen 0x0db3 /* U+0E13 THAI CHARACTER NO NEN */
+#define XK_Thai_dodek 0x0db4 /* U+0E14 THAI CHARACTER DO DEK */
+#define XK_Thai_totao 0x0db5 /* U+0E15 THAI CHARACTER TO TAO */
+#define XK_Thai_thothung 0x0db6 /* U+0E16 THAI CHARACTER THO THUNG */
+#define XK_Thai_thothahan 0x0db7 /* U+0E17 THAI CHARACTER THO THAHAN */
+#define XK_Thai_thothong 0x0db8 /* U+0E18 THAI CHARACTER THO THONG */
+#define XK_Thai_nonu 0x0db9 /* U+0E19 THAI CHARACTER NO NU */
+#define XK_Thai_bobaimai 0x0dba /* U+0E1A THAI CHARACTER BO BAIMAI */
+#define XK_Thai_popla 0x0dbb /* U+0E1B THAI CHARACTER PO PLA */
+#define XK_Thai_phophung 0x0dbc /* U+0E1C THAI CHARACTER PHO PHUNG */
+#define XK_Thai_fofa 0x0dbd /* U+0E1D THAI CHARACTER FO FA */
+#define XK_Thai_phophan 0x0dbe /* U+0E1E THAI CHARACTER PHO PHAN */
+#define XK_Thai_fofan 0x0dbf /* U+0E1F THAI CHARACTER FO FAN */
+#define XK_Thai_phosamphao 0x0dc0 /* U+0E20 THAI CHARACTER PHO SAMPHAO */
+#define XK_Thai_moma 0x0dc1 /* U+0E21 THAI CHARACTER MO MA */
+#define XK_Thai_yoyak 0x0dc2 /* U+0E22 THAI CHARACTER YO YAK */
+#define XK_Thai_rorua 0x0dc3 /* U+0E23 THAI CHARACTER RO RUA */
+#define XK_Thai_ru 0x0dc4 /* U+0E24 THAI CHARACTER RU */
+#define XK_Thai_loling 0x0dc5 /* U+0E25 THAI CHARACTER LO LING */
+#define XK_Thai_lu 0x0dc6 /* U+0E26 THAI CHARACTER LU */
+#define XK_Thai_wowaen 0x0dc7 /* U+0E27 THAI CHARACTER WO WAEN */
+#define XK_Thai_sosala 0x0dc8 /* U+0E28 THAI CHARACTER SO SALA */
+#define XK_Thai_sorusi 0x0dc9 /* U+0E29 THAI CHARACTER SO RUSI */
+#define XK_Thai_sosua 0x0dca /* U+0E2A THAI CHARACTER SO SUA */
+#define XK_Thai_hohip 0x0dcb /* U+0E2B THAI CHARACTER HO HIP */
+#define XK_Thai_lochula 0x0dcc /* U+0E2C THAI CHARACTER LO CHULA */
+#define XK_Thai_oang 0x0dcd /* U+0E2D THAI CHARACTER O ANG */
+#define XK_Thai_honokhuk 0x0dce /* U+0E2E THAI CHARACTER HO NOKHUK */
+#define XK_Thai_paiyannoi 0x0dcf /* U+0E2F THAI CHARACTER PAIYANNOI */
+#define XK_Thai_saraa 0x0dd0 /* U+0E30 THAI CHARACTER SARA A */
+#define XK_Thai_maihanakat 0x0dd1 /* U+0E31 THAI CHARACTER MAI HAN-AKAT */
+#define XK_Thai_saraaa 0x0dd2 /* U+0E32 THAI CHARACTER SARA AA */
+#define XK_Thai_saraam 0x0dd3 /* U+0E33 THAI CHARACTER SARA AM */
+#define XK_Thai_sarai 0x0dd4 /* U+0E34 THAI CHARACTER SARA I */
+#define XK_Thai_saraii 0x0dd5 /* U+0E35 THAI CHARACTER SARA II */
+#define XK_Thai_saraue 0x0dd6 /* U+0E36 THAI CHARACTER SARA UE */
+#define XK_Thai_sarauee 0x0dd7 /* U+0E37 THAI CHARACTER SARA UEE */
+#define XK_Thai_sarau 0x0dd8 /* U+0E38 THAI CHARACTER SARA U */
+#define XK_Thai_sarauu 0x0dd9 /* U+0E39 THAI CHARACTER SARA UU */
+#define XK_Thai_phinthu 0x0dda /* U+0E3A THAI CHARACTER PHINTHU */
+#define XK_Thai_maihanakat_maitho 0x0dde
+#define XK_Thai_baht 0x0ddf /* U+0E3F THAI CURRENCY SYMBOL BAHT */
+#define XK_Thai_sarae 0x0de0 /* U+0E40 THAI CHARACTER SARA E */
+#define XK_Thai_saraae 0x0de1 /* U+0E41 THAI CHARACTER SARA AE */
+#define XK_Thai_sarao 0x0de2 /* U+0E42 THAI CHARACTER SARA O */
+#define XK_Thai_saraaimaimuan 0x0de3 /* U+0E43 THAI CHARACTER SARA AI MAIMUAN */
+#define XK_Thai_saraaimaimalai 0x0de4 /* U+0E44 THAI CHARACTER SARA AI MAIMALAI */
+#define XK_Thai_lakkhangyao 0x0de5 /* U+0E45 THAI CHARACTER LAKKHANGYAO */
+#define XK_Thai_maiyamok 0x0de6 /* U+0E46 THAI CHARACTER MAIYAMOK */
+#define XK_Thai_maitaikhu 0x0de7 /* U+0E47 THAI CHARACTER MAITAIKHU */
+#define XK_Thai_maiek 0x0de8 /* U+0E48 THAI CHARACTER MAI EK */
+#define XK_Thai_maitho 0x0de9 /* U+0E49 THAI CHARACTER MAI THO */
+#define XK_Thai_maitri 0x0dea /* U+0E4A THAI CHARACTER MAI TRI */
+#define XK_Thai_maichattawa 0x0deb /* U+0E4B THAI CHARACTER MAI CHATTAWA */
+#define XK_Thai_thanthakhat 0x0dec /* U+0E4C THAI CHARACTER THANTHAKHAT */
+#define XK_Thai_nikhahit 0x0ded /* U+0E4D THAI CHARACTER NIKHAHIT */
+#define XK_Thai_leksun 0x0df0 /* U+0E50 THAI DIGIT ZERO */
+#define XK_Thai_leknung 0x0df1 /* U+0E51 THAI DIGIT ONE */
+#define XK_Thai_leksong 0x0df2 /* U+0E52 THAI DIGIT TWO */
+#define XK_Thai_leksam 0x0df3 /* U+0E53 THAI DIGIT THREE */
+#define XK_Thai_leksi 0x0df4 /* U+0E54 THAI DIGIT FOUR */
+#define XK_Thai_lekha 0x0df5 /* U+0E55 THAI DIGIT FIVE */
+#define XK_Thai_lekhok 0x0df6 /* U+0E56 THAI DIGIT SIX */
+#define XK_Thai_lekchet 0x0df7 /* U+0E57 THAI DIGIT SEVEN */
+#define XK_Thai_lekpaet 0x0df8 /* U+0E58 THAI DIGIT EIGHT */
+#define XK_Thai_lekkao 0x0df9 /* U+0E59 THAI DIGIT NINE */
+#endif /* XK_THAI */
+
+/*
+ * Korean
+ * Byte 3 = 0x0e
+ */
+
+#ifdef XK_KOREAN
+
+#define XK_Hangul 0xff31 /* Hangul start/stop(toggle) */
+#define XK_Hangul_Start 0xff32 /* Hangul start */
+#define XK_Hangul_End 0xff33 /* Hangul end, English start */
+#define XK_Hangul_Hanja 0xff34 /* Start Hangul->Hanja Conversion */
+#define XK_Hangul_Jamo 0xff35 /* Hangul Jamo mode */
+#define XK_Hangul_Romaja 0xff36 /* Hangul Romaja mode */
+#define XK_Hangul_Codeinput 0xff37 /* Hangul code input mode */
+#define XK_Hangul_Jeonja 0xff38 /* Jeonja mode */
+#define XK_Hangul_Banja 0xff39 /* Banja mode */
+#define XK_Hangul_PreHanja 0xff3a /* Pre Hanja conversion */
+#define XK_Hangul_PostHanja 0xff3b /* Post Hanja conversion */
+#define XK_Hangul_SingleCandidate 0xff3c /* Single candidate */
+#define XK_Hangul_MultipleCandidate 0xff3d /* Multiple candidate */
+#define XK_Hangul_PreviousCandidate 0xff3e /* Previous candidate */
+#define XK_Hangul_Special 0xff3f /* Special symbols */
+#define XK_Hangul_switch 0xff7e /* Alias for mode_switch */
+
+/* Hangul Consonant Characters */
+#define XK_Hangul_Kiyeog 0x0ea1
+#define XK_Hangul_SsangKiyeog 0x0ea2
+#define XK_Hangul_KiyeogSios 0x0ea3
+#define XK_Hangul_Nieun 0x0ea4
+#define XK_Hangul_NieunJieuj 0x0ea5
+#define XK_Hangul_NieunHieuh 0x0ea6
+#define XK_Hangul_Dikeud 0x0ea7
+#define XK_Hangul_SsangDikeud 0x0ea8
+#define XK_Hangul_Rieul 0x0ea9
+#define XK_Hangul_RieulKiyeog 0x0eaa
+#define XK_Hangul_RieulMieum 0x0eab
+#define XK_Hangul_RieulPieub 0x0eac
+#define XK_Hangul_RieulSios 0x0ead
+#define XK_Hangul_RieulTieut 0x0eae
+#define XK_Hangul_RieulPhieuf 0x0eaf
+#define XK_Hangul_RieulHieuh 0x0eb0
+#define XK_Hangul_Mieum 0x0eb1
+#define XK_Hangul_Pieub 0x0eb2
+#define XK_Hangul_SsangPieub 0x0eb3
+#define XK_Hangul_PieubSios 0x0eb4
+#define XK_Hangul_Sios 0x0eb5
+#define XK_Hangul_SsangSios 0x0eb6
+#define XK_Hangul_Ieung 0x0eb7
+#define XK_Hangul_Jieuj 0x0eb8
+#define XK_Hangul_SsangJieuj 0x0eb9
+#define XK_Hangul_Cieuc 0x0eba
+#define XK_Hangul_Khieuq 0x0ebb
+#define XK_Hangul_Tieut 0x0ebc
+#define XK_Hangul_Phieuf 0x0ebd
+#define XK_Hangul_Hieuh 0x0ebe
+
+/* Hangul Vowel Characters */
+#define XK_Hangul_A 0x0ebf
+#define XK_Hangul_AE 0x0ec0
+#define XK_Hangul_YA 0x0ec1
+#define XK_Hangul_YAE 0x0ec2
+#define XK_Hangul_EO 0x0ec3
+#define XK_Hangul_E 0x0ec4
+#define XK_Hangul_YEO 0x0ec5
+#define XK_Hangul_YE 0x0ec6
+#define XK_Hangul_O 0x0ec7
+#define XK_Hangul_WA 0x0ec8
+#define XK_Hangul_WAE 0x0ec9
+#define XK_Hangul_OE 0x0eca
+#define XK_Hangul_YO 0x0ecb
+#define XK_Hangul_U 0x0ecc
+#define XK_Hangul_WEO 0x0ecd
+#define XK_Hangul_WE 0x0ece
+#define XK_Hangul_WI 0x0ecf
+#define XK_Hangul_YU 0x0ed0
+#define XK_Hangul_EU 0x0ed1
+#define XK_Hangul_YI 0x0ed2
+#define XK_Hangul_I 0x0ed3
+
+/* Hangul syllable-final (JongSeong) Characters */
+#define XK_Hangul_J_Kiyeog 0x0ed4
+#define XK_Hangul_J_SsangKiyeog 0x0ed5
+#define XK_Hangul_J_KiyeogSios 0x0ed6
+#define XK_Hangul_J_Nieun 0x0ed7
+#define XK_Hangul_J_NieunJieuj 0x0ed8
+#define XK_Hangul_J_NieunHieuh 0x0ed9
+#define XK_Hangul_J_Dikeud 0x0eda
+#define XK_Hangul_J_Rieul 0x0edb
+#define XK_Hangul_J_RieulKiyeog 0x0edc
+#define XK_Hangul_J_RieulMieum 0x0edd
+#define XK_Hangul_J_RieulPieub 0x0ede
+#define XK_Hangul_J_RieulSios 0x0edf
+#define XK_Hangul_J_RieulTieut 0x0ee0
+#define XK_Hangul_J_RieulPhieuf 0x0ee1
+#define XK_Hangul_J_RieulHieuh 0x0ee2
+#define XK_Hangul_J_Mieum 0x0ee3
+#define XK_Hangul_J_Pieub 0x0ee4
+#define XK_Hangul_J_PieubSios 0x0ee5
+#define XK_Hangul_J_Sios 0x0ee6
+#define XK_Hangul_J_SsangSios 0x0ee7
+#define XK_Hangul_J_Ieung 0x0ee8
+#define XK_Hangul_J_Jieuj 0x0ee9
+#define XK_Hangul_J_Cieuc 0x0eea
+#define XK_Hangul_J_Khieuq 0x0eeb
+#define XK_Hangul_J_Tieut 0x0eec
+#define XK_Hangul_J_Phieuf 0x0eed
+#define XK_Hangul_J_Hieuh 0x0eee
+
+/* Ancient Hangul Consonant Characters */
+#define XK_Hangul_RieulYeorinHieuh 0x0eef
+#define XK_Hangul_SunkyeongeumMieum 0x0ef0
+#define XK_Hangul_SunkyeongeumPieub 0x0ef1
+#define XK_Hangul_PanSios 0x0ef2
+#define XK_Hangul_KkogjiDalrinIeung 0x0ef3
+#define XK_Hangul_SunkyeongeumPhieuf 0x0ef4
+#define XK_Hangul_YeorinHieuh 0x0ef5
+
+/* Ancient Hangul Vowel Characters */
+#define XK_Hangul_AraeA 0x0ef6
+#define XK_Hangul_AraeAE 0x0ef7
+
+/* Ancient Hangul syllable-final (JongSeong) Characters */
+#define XK_Hangul_J_PanSios 0x0ef8
+#define XK_Hangul_J_KkogjiDalrinIeung 0x0ef9
+#define XK_Hangul_J_YeorinHieuh 0x0efa
+
+/* Korean currency symbol */
+#define XK_Korean_Won 0x0eff /*(U+20A9 WON SIGN)*/
+
+#endif /* XK_KOREAN */
+
+/*
+ * Armenian
+ */
+
+#ifdef XK_ARMENIAN
+#define XK_Armenian_ligature_ew 0x1000587 /* U+0587 ARMENIAN SMALL LIGATURE ECH YIWN */
+#define XK_Armenian_full_stop 0x1000589 /* U+0589 ARMENIAN FULL STOP */
+#define XK_Armenian_verjaket 0x1000589 /* U+0589 ARMENIAN FULL STOP */
+#define XK_Armenian_separation_mark 0x100055d /* U+055D ARMENIAN COMMA */
+#define XK_Armenian_but 0x100055d /* U+055D ARMENIAN COMMA */
+#define XK_Armenian_hyphen 0x100058a /* U+058A ARMENIAN HYPHEN */
+#define XK_Armenian_yentamna 0x100058a /* U+058A ARMENIAN HYPHEN */
+#define XK_Armenian_exclam 0x100055c /* U+055C ARMENIAN EXCLAMATION MARK */
+#define XK_Armenian_amanak 0x100055c /* U+055C ARMENIAN EXCLAMATION MARK */
+#define XK_Armenian_accent 0x100055b /* U+055B ARMENIAN EMPHASIS MARK */
+#define XK_Armenian_shesht 0x100055b /* U+055B ARMENIAN EMPHASIS MARK */
+#define XK_Armenian_question 0x100055e /* U+055E ARMENIAN QUESTION MARK */
+#define XK_Armenian_paruyk 0x100055e /* U+055E ARMENIAN QUESTION MARK */
+#define XK_Armenian_AYB 0x1000531 /* U+0531 ARMENIAN CAPITAL LETTER AYB */
+#define XK_Armenian_ayb 0x1000561 /* U+0561 ARMENIAN SMALL LETTER AYB */
+#define XK_Armenian_BEN 0x1000532 /* U+0532 ARMENIAN CAPITAL LETTER BEN */
+#define XK_Armenian_ben 0x1000562 /* U+0562 ARMENIAN SMALL LETTER BEN */
+#define XK_Armenian_GIM 0x1000533 /* U+0533 ARMENIAN CAPITAL LETTER GIM */
+#define XK_Armenian_gim 0x1000563 /* U+0563 ARMENIAN SMALL LETTER GIM */
+#define XK_Armenian_DA 0x1000534 /* U+0534 ARMENIAN CAPITAL LETTER DA */
+#define XK_Armenian_da 0x1000564 /* U+0564 ARMENIAN SMALL LETTER DA */
+#define XK_Armenian_YECH 0x1000535 /* U+0535 ARMENIAN CAPITAL LETTER ECH */
+#define XK_Armenian_yech 0x1000565 /* U+0565 ARMENIAN SMALL LETTER ECH */
+#define XK_Armenian_ZA 0x1000536 /* U+0536 ARMENIAN CAPITAL LETTER ZA */
+#define XK_Armenian_za 0x1000566 /* U+0566 ARMENIAN SMALL LETTER ZA */
+#define XK_Armenian_E 0x1000537 /* U+0537 ARMENIAN CAPITAL LETTER EH */
+#define XK_Armenian_e 0x1000567 /* U+0567 ARMENIAN SMALL LETTER EH */
+#define XK_Armenian_AT 0x1000538 /* U+0538 ARMENIAN CAPITAL LETTER ET */
+#define XK_Armenian_at 0x1000568 /* U+0568 ARMENIAN SMALL LETTER ET */
+#define XK_Armenian_TO 0x1000539 /* U+0539 ARMENIAN CAPITAL LETTER TO */
+#define XK_Armenian_to 0x1000569 /* U+0569 ARMENIAN SMALL LETTER TO */
+#define XK_Armenian_ZHE 0x100053a /* U+053A ARMENIAN CAPITAL LETTER ZHE */
+#define XK_Armenian_zhe 0x100056a /* U+056A ARMENIAN SMALL LETTER ZHE */
+#define XK_Armenian_INI 0x100053b /* U+053B ARMENIAN CAPITAL LETTER INI */
+#define XK_Armenian_ini 0x100056b /* U+056B ARMENIAN SMALL LETTER INI */
+#define XK_Armenian_LYUN 0x100053c /* U+053C ARMENIAN CAPITAL LETTER LIWN */
+#define XK_Armenian_lyun 0x100056c /* U+056C ARMENIAN SMALL LETTER LIWN */
+#define XK_Armenian_KHE 0x100053d /* U+053D ARMENIAN CAPITAL LETTER XEH */
+#define XK_Armenian_khe 0x100056d /* U+056D ARMENIAN SMALL LETTER XEH */
+#define XK_Armenian_TSA 0x100053e /* U+053E ARMENIAN CAPITAL LETTER CA */
+#define XK_Armenian_tsa 0x100056e /* U+056E ARMENIAN SMALL LETTER CA */
+#define XK_Armenian_KEN 0x100053f /* U+053F ARMENIAN CAPITAL LETTER KEN */
+#define XK_Armenian_ken 0x100056f /* U+056F ARMENIAN SMALL LETTER KEN */
+#define XK_Armenian_HO 0x1000540 /* U+0540 ARMENIAN CAPITAL LETTER HO */
+#define XK_Armenian_ho 0x1000570 /* U+0570 ARMENIAN SMALL LETTER HO */
+#define XK_Armenian_DZA 0x1000541 /* U+0541 ARMENIAN CAPITAL LETTER JA */
+#define XK_Armenian_dza 0x1000571 /* U+0571 ARMENIAN SMALL LETTER JA */
+#define XK_Armenian_GHAT 0x1000542 /* U+0542 ARMENIAN CAPITAL LETTER GHAD */
+#define XK_Armenian_ghat 0x1000572 /* U+0572 ARMENIAN SMALL LETTER GHAD */
+#define XK_Armenian_TCHE 0x1000543 /* U+0543 ARMENIAN CAPITAL LETTER CHEH */
+#define XK_Armenian_tche 0x1000573 /* U+0573 ARMENIAN SMALL LETTER CHEH */
+#define XK_Armenian_MEN 0x1000544 /* U+0544 ARMENIAN CAPITAL LETTER MEN */
+#define XK_Armenian_men 0x1000574 /* U+0574 ARMENIAN SMALL LETTER MEN */
+#define XK_Armenian_HI 0x1000545 /* U+0545 ARMENIAN CAPITAL LETTER YI */
+#define XK_Armenian_hi 0x1000575 /* U+0575 ARMENIAN SMALL LETTER YI */
+#define XK_Armenian_NU 0x1000546 /* U+0546 ARMENIAN CAPITAL LETTER NOW */
+#define XK_Armenian_nu 0x1000576 /* U+0576 ARMENIAN SMALL LETTER NOW */
+#define XK_Armenian_SHA 0x1000547 /* U+0547 ARMENIAN CAPITAL LETTER SHA */
+#define XK_Armenian_sha 0x1000577 /* U+0577 ARMENIAN SMALL LETTER SHA */
+#define XK_Armenian_VO 0x1000548 /* U+0548 ARMENIAN CAPITAL LETTER VO */
+#define XK_Armenian_vo 0x1000578 /* U+0578 ARMENIAN SMALL LETTER VO */
+#define XK_Armenian_CHA 0x1000549 /* U+0549 ARMENIAN CAPITAL LETTER CHA */
+#define XK_Armenian_cha 0x1000579 /* U+0579 ARMENIAN SMALL LETTER CHA */
+#define XK_Armenian_PE 0x100054a /* U+054A ARMENIAN CAPITAL LETTER PEH */
+#define XK_Armenian_pe 0x100057a /* U+057A ARMENIAN SMALL LETTER PEH */
+#define XK_Armenian_JE 0x100054b /* U+054B ARMENIAN CAPITAL LETTER JHEH */
+#define XK_Armenian_je 0x100057b /* U+057B ARMENIAN SMALL LETTER JHEH */
+#define XK_Armenian_RA 0x100054c /* U+054C ARMENIAN CAPITAL LETTER RA */
+#define XK_Armenian_ra 0x100057c /* U+057C ARMENIAN SMALL LETTER RA */
+#define XK_Armenian_SE 0x100054d /* U+054D ARMENIAN CAPITAL LETTER SEH */
+#define XK_Armenian_se 0x100057d /* U+057D ARMENIAN SMALL LETTER SEH */
+#define XK_Armenian_VEV 0x100054e /* U+054E ARMENIAN CAPITAL LETTER VEW */
+#define XK_Armenian_vev 0x100057e /* U+057E ARMENIAN SMALL LETTER VEW */
+#define XK_Armenian_TYUN 0x100054f /* U+054F ARMENIAN CAPITAL LETTER TIWN */
+#define XK_Armenian_tyun 0x100057f /* U+057F ARMENIAN SMALL LETTER TIWN */
+#define XK_Armenian_RE 0x1000550 /* U+0550 ARMENIAN CAPITAL LETTER REH */
+#define XK_Armenian_re 0x1000580 /* U+0580 ARMENIAN SMALL LETTER REH */
+#define XK_Armenian_TSO 0x1000551 /* U+0551 ARMENIAN CAPITAL LETTER CO */
+#define XK_Armenian_tso 0x1000581 /* U+0581 ARMENIAN SMALL LETTER CO */
+#define XK_Armenian_VYUN 0x1000552 /* U+0552 ARMENIAN CAPITAL LETTER YIWN */
+#define XK_Armenian_vyun 0x1000582 /* U+0582 ARMENIAN SMALL LETTER YIWN */
+#define XK_Armenian_PYUR 0x1000553 /* U+0553 ARMENIAN CAPITAL LETTER PIWR */
+#define XK_Armenian_pyur 0x1000583 /* U+0583 ARMENIAN SMALL LETTER PIWR */
+#define XK_Armenian_KE 0x1000554 /* U+0554 ARMENIAN CAPITAL LETTER KEH */
+#define XK_Armenian_ke 0x1000584 /* U+0584 ARMENIAN SMALL LETTER KEH */
+#define XK_Armenian_O 0x1000555 /* U+0555 ARMENIAN CAPITAL LETTER OH */
+#define XK_Armenian_o 0x1000585 /* U+0585 ARMENIAN SMALL LETTER OH */
+#define XK_Armenian_FE 0x1000556 /* U+0556 ARMENIAN CAPITAL LETTER FEH */
+#define XK_Armenian_fe 0x1000586 /* U+0586 ARMENIAN SMALL LETTER FEH */
+#define XK_Armenian_apostrophe 0x100055a /* U+055A ARMENIAN APOSTROPHE */
+#endif /* XK_ARMENIAN */
+
+/*
+ * Georgian
+ */
+
+#ifdef XK_GEORGIAN
+#define XK_Georgian_an 0x10010d0 /* U+10D0 GEORGIAN LETTER AN */
+#define XK_Georgian_ban 0x10010d1 /* U+10D1 GEORGIAN LETTER BAN */
+#define XK_Georgian_gan 0x10010d2 /* U+10D2 GEORGIAN LETTER GAN */
+#define XK_Georgian_don 0x10010d3 /* U+10D3 GEORGIAN LETTER DON */
+#define XK_Georgian_en 0x10010d4 /* U+10D4 GEORGIAN LETTER EN */
+#define XK_Georgian_vin 0x10010d5 /* U+10D5 GEORGIAN LETTER VIN */
+#define XK_Georgian_zen 0x10010d6 /* U+10D6 GEORGIAN LETTER ZEN */
+#define XK_Georgian_tan 0x10010d7 /* U+10D7 GEORGIAN LETTER TAN */
+#define XK_Georgian_in 0x10010d8 /* U+10D8 GEORGIAN LETTER IN */
+#define XK_Georgian_kan 0x10010d9 /* U+10D9 GEORGIAN LETTER KAN */
+#define XK_Georgian_las 0x10010da /* U+10DA GEORGIAN LETTER LAS */
+#define XK_Georgian_man 0x10010db /* U+10DB GEORGIAN LETTER MAN */
+#define XK_Georgian_nar 0x10010dc /* U+10DC GEORGIAN LETTER NAR */
+#define XK_Georgian_on 0x10010dd /* U+10DD GEORGIAN LETTER ON */
+#define XK_Georgian_par 0x10010de /* U+10DE GEORGIAN LETTER PAR */
+#define XK_Georgian_zhar 0x10010df /* U+10DF GEORGIAN LETTER ZHAR */
+#define XK_Georgian_rae 0x10010e0 /* U+10E0 GEORGIAN LETTER RAE */
+#define XK_Georgian_san 0x10010e1 /* U+10E1 GEORGIAN LETTER SAN */
+#define XK_Georgian_tar 0x10010e2 /* U+10E2 GEORGIAN LETTER TAR */
+#define XK_Georgian_un 0x10010e3 /* U+10E3 GEORGIAN LETTER UN */
+#define XK_Georgian_phar 0x10010e4 /* U+10E4 GEORGIAN LETTER PHAR */
+#define XK_Georgian_khar 0x10010e5 /* U+10E5 GEORGIAN LETTER KHAR */
+#define XK_Georgian_ghan 0x10010e6 /* U+10E6 GEORGIAN LETTER GHAN */
+#define XK_Georgian_qar 0x10010e7 /* U+10E7 GEORGIAN LETTER QAR */
+#define XK_Georgian_shin 0x10010e8 /* U+10E8 GEORGIAN LETTER SHIN */
+#define XK_Georgian_chin 0x10010e9 /* U+10E9 GEORGIAN LETTER CHIN */
+#define XK_Georgian_can 0x10010ea /* U+10EA GEORGIAN LETTER CAN */
+#define XK_Georgian_jil 0x10010eb /* U+10EB GEORGIAN LETTER JIL */
+#define XK_Georgian_cil 0x10010ec /* U+10EC GEORGIAN LETTER CIL */
+#define XK_Georgian_char 0x10010ed /* U+10ED GEORGIAN LETTER CHAR */
+#define XK_Georgian_xan 0x10010ee /* U+10EE GEORGIAN LETTER XAN */
+#define XK_Georgian_jhan 0x10010ef /* U+10EF GEORGIAN LETTER JHAN */
+#define XK_Georgian_hae 0x10010f0 /* U+10F0 GEORGIAN LETTER HAE */
+#define XK_Georgian_he 0x10010f1 /* U+10F1 GEORGIAN LETTER HE */
+#define XK_Georgian_hie 0x10010f2 /* U+10F2 GEORGIAN LETTER HIE */
+#define XK_Georgian_we 0x10010f3 /* U+10F3 GEORGIAN LETTER WE */
+#define XK_Georgian_har 0x10010f4 /* U+10F4 GEORGIAN LETTER HAR */
+#define XK_Georgian_hoe 0x10010f5 /* U+10F5 GEORGIAN LETTER HOE */
+#define XK_Georgian_fi 0x10010f6 /* U+10F6 GEORGIAN LETTER FI */
+#endif /* XK_GEORGIAN */
+
+/*
+ * Azeri (and other Turkic or Caucasian languages)
+ */
+
+#ifdef XK_CAUCASUS
+/* latin */
+#define XK_Xabovedot 0x1001e8a /* U+1E8A LATIN CAPITAL LETTER X WITH DOT ABOVE */
+#define XK_Ibreve 0x100012c /* U+012C LATIN CAPITAL LETTER I WITH BREVE */
+#define XK_Zstroke 0x10001b5 /* U+01B5 LATIN CAPITAL LETTER Z WITH STROKE */
+#define XK_Gcaron 0x10001e6 /* U+01E6 LATIN CAPITAL LETTER G WITH CARON */
+#define XK_Ocaron 0x10001d1 /* U+01D2 LATIN CAPITAL LETTER O WITH CARON */
+#define XK_Obarred 0x100019f /* U+019F LATIN CAPITAL LETTER O WITH MIDDLE TILDE */
+#define XK_xabovedot 0x1001e8b /* U+1E8B LATIN SMALL LETTER X WITH DOT ABOVE */
+#define XK_ibreve 0x100012d /* U+012D LATIN SMALL LETTER I WITH BREVE */
+#define XK_zstroke 0x10001b6 /* U+01B6 LATIN SMALL LETTER Z WITH STROKE */
+#define XK_gcaron 0x10001e7 /* U+01E7 LATIN SMALL LETTER G WITH CARON */
+#define XK_ocaron 0x10001d2 /* U+01D2 LATIN SMALL LETTER O WITH CARON */
+#define XK_obarred 0x1000275 /* U+0275 LATIN SMALL LETTER BARRED O */
+#define XK_SCHWA 0x100018f /* U+018F LATIN CAPITAL LETTER SCHWA */
+#define XK_schwa 0x1000259 /* U+0259 LATIN SMALL LETTER SCHWA */
+#define XK_EZH 0x10001b7 /* U+01B7 LATIN CAPITAL LETTER EZH */
+#define XK_ezh 0x1000292 /* U+0292 LATIN SMALL LETTER EZH */
+/* those are not really Caucasus */
+/* For Inupiak */
+#define XK_Lbelowdot 0x1001e36 /* U+1E36 LATIN CAPITAL LETTER L WITH DOT BELOW */
+#define XK_lbelowdot 0x1001e37 /* U+1E37 LATIN SMALL LETTER L WITH DOT BELOW */
+#endif /* XK_CAUCASUS */
+
+/*
+ * Vietnamese
+ */
+
+#ifdef XK_VIETNAMESE
+#define XK_Abelowdot 0x1001ea0 /* U+1EA0 LATIN CAPITAL LETTER A WITH DOT BELOW */
+#define XK_abelowdot 0x1001ea1 /* U+1EA1 LATIN SMALL LETTER A WITH DOT BELOW */
+#define XK_Ahook 0x1001ea2 /* U+1EA2 LATIN CAPITAL LETTER A WITH HOOK ABOVE */
+#define XK_ahook 0x1001ea3 /* U+1EA3 LATIN SMALL LETTER A WITH HOOK ABOVE */
+#define XK_Acircumflexacute 0x1001ea4 /* U+1EA4 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE */
+#define XK_acircumflexacute 0x1001ea5 /* U+1EA5 LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE */
+#define XK_Acircumflexgrave 0x1001ea6 /* U+1EA6 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE */
+#define XK_acircumflexgrave 0x1001ea7 /* U+1EA7 LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE */
+#define XK_Acircumflexhook 0x1001ea8 /* U+1EA8 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */
+#define XK_acircumflexhook 0x1001ea9 /* U+1EA9 LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */
+#define XK_Acircumflextilde 0x1001eaa /* U+1EAA LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE */
+#define XK_acircumflextilde 0x1001eab /* U+1EAB LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE */
+#define XK_Acircumflexbelowdot 0x1001eac /* U+1EAC LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW */
+#define XK_acircumflexbelowdot 0x1001ead /* U+1EAD LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW */
+#define XK_Abreveacute 0x1001eae /* U+1EAE LATIN CAPITAL LETTER A WITH BREVE AND ACUTE */
+#define XK_abreveacute 0x1001eaf /* U+1EAF LATIN SMALL LETTER A WITH BREVE AND ACUTE */
+#define XK_Abrevegrave 0x1001eb0 /* U+1EB0 LATIN CAPITAL LETTER A WITH BREVE AND GRAVE */
+#define XK_abrevegrave 0x1001eb1 /* U+1EB1 LATIN SMALL LETTER A WITH BREVE AND GRAVE */
+#define XK_Abrevehook 0x1001eb2 /* U+1EB2 LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE */
+#define XK_abrevehook 0x1001eb3 /* U+1EB3 LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE */
+#define XK_Abrevetilde 0x1001eb4 /* U+1EB4 LATIN CAPITAL LETTER A WITH BREVE AND TILDE */
+#define XK_abrevetilde 0x1001eb5 /* U+1EB5 LATIN SMALL LETTER A WITH BREVE AND TILDE */
+#define XK_Abrevebelowdot 0x1001eb6 /* U+1EB6 LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW */
+#define XK_abrevebelowdot 0x1001eb7 /* U+1EB7 LATIN SMALL LETTER A WITH BREVE AND DOT BELOW */
+#define XK_Ebelowdot 0x1001eb8 /* U+1EB8 LATIN CAPITAL LETTER E WITH DOT BELOW */
+#define XK_ebelowdot 0x1001eb9 /* U+1EB9 LATIN SMALL LETTER E WITH DOT BELOW */
+#define XK_Ehook 0x1001eba /* U+1EBA LATIN CAPITAL LETTER E WITH HOOK ABOVE */
+#define XK_ehook 0x1001ebb /* U+1EBB LATIN SMALL LETTER E WITH HOOK ABOVE */
+#define XK_Etilde 0x1001ebc /* U+1EBC LATIN CAPITAL LETTER E WITH TILDE */
+#define XK_etilde 0x1001ebd /* U+1EBD LATIN SMALL LETTER E WITH TILDE */
+#define XK_Ecircumflexacute 0x1001ebe /* U+1EBE LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE */
+#define XK_ecircumflexacute 0x1001ebf /* U+1EBF LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE */
+#define XK_Ecircumflexgrave 0x1001ec0 /* U+1EC0 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE */
+#define XK_ecircumflexgrave 0x1001ec1 /* U+1EC1 LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE */
+#define XK_Ecircumflexhook 0x1001ec2 /* U+1EC2 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */
+#define XK_ecircumflexhook 0x1001ec3 /* U+1EC3 LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */
+#define XK_Ecircumflextilde 0x1001ec4 /* U+1EC4 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE */
+#define XK_ecircumflextilde 0x1001ec5 /* U+1EC5 LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE */
+#define XK_Ecircumflexbelowdot 0x1001ec6 /* U+1EC6 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW */
+#define XK_ecircumflexbelowdot 0x1001ec7 /* U+1EC7 LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW */
+#define XK_Ihook 0x1001ec8 /* U+1EC8 LATIN CAPITAL LETTER I WITH HOOK ABOVE */
+#define XK_ihook 0x1001ec9 /* U+1EC9 LATIN SMALL LETTER I WITH HOOK ABOVE */
+#define XK_Ibelowdot 0x1001eca /* U+1ECA LATIN CAPITAL LETTER I WITH DOT BELOW */
+#define XK_ibelowdot 0x1001ecb /* U+1ECB LATIN SMALL LETTER I WITH DOT BELOW */
+#define XK_Obelowdot 0x1001ecc /* U+1ECC LATIN CAPITAL LETTER O WITH DOT BELOW */
+#define XK_obelowdot 0x1001ecd /* U+1ECD LATIN SMALL LETTER O WITH DOT BELOW */
+#define XK_Ohook 0x1001ece /* U+1ECE LATIN CAPITAL LETTER O WITH HOOK ABOVE */
+#define XK_ohook 0x1001ecf /* U+1ECF LATIN SMALL LETTER O WITH HOOK ABOVE */
+#define XK_Ocircumflexacute 0x1001ed0 /* U+1ED0 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE */
+#define XK_ocircumflexacute 0x1001ed1 /* U+1ED1 LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE */
+#define XK_Ocircumflexgrave 0x1001ed2 /* U+1ED2 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE */
+#define XK_ocircumflexgrave 0x1001ed3 /* U+1ED3 LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE */
+#define XK_Ocircumflexhook 0x1001ed4 /* U+1ED4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */
+#define XK_ocircumflexhook 0x1001ed5 /* U+1ED5 LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */
+#define XK_Ocircumflextilde 0x1001ed6 /* U+1ED6 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE */
+#define XK_ocircumflextilde 0x1001ed7 /* U+1ED7 LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE */
+#define XK_Ocircumflexbelowdot 0x1001ed8 /* U+1ED8 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW */
+#define XK_ocircumflexbelowdot 0x1001ed9 /* U+1ED9 LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW */
+#define XK_Ohornacute 0x1001eda /* U+1EDA LATIN CAPITAL LETTER O WITH HORN AND ACUTE */
+#define XK_ohornacute 0x1001edb /* U+1EDB LATIN SMALL LETTER O WITH HORN AND ACUTE */
+#define XK_Ohorngrave 0x1001edc /* U+1EDC LATIN CAPITAL LETTER O WITH HORN AND GRAVE */
+#define XK_ohorngrave 0x1001edd /* U+1EDD LATIN SMALL LETTER O WITH HORN AND GRAVE */
+#define XK_Ohornhook 0x1001ede /* U+1EDE LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE */
+#define XK_ohornhook 0x1001edf /* U+1EDF LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE */
+#define XK_Ohorntilde 0x1001ee0 /* U+1EE0 LATIN CAPITAL LETTER O WITH HORN AND TILDE */
+#define XK_ohorntilde 0x1001ee1 /* U+1EE1 LATIN SMALL LETTER O WITH HORN AND TILDE */
+#define XK_Ohornbelowdot 0x1001ee2 /* U+1EE2 LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW */
+#define XK_ohornbelowdot 0x1001ee3 /* U+1EE3 LATIN SMALL LETTER O WITH HORN AND DOT BELOW */
+#define XK_Ubelowdot 0x1001ee4 /* U+1EE4 LATIN CAPITAL LETTER U WITH DOT BELOW */
+#define XK_ubelowdot 0x1001ee5 /* U+1EE5 LATIN SMALL LETTER U WITH DOT BELOW */
+#define XK_Uhook 0x1001ee6 /* U+1EE6 LATIN CAPITAL LETTER U WITH HOOK ABOVE */
+#define XK_uhook 0x1001ee7 /* U+1EE7 LATIN SMALL LETTER U WITH HOOK ABOVE */
+#define XK_Uhornacute 0x1001ee8 /* U+1EE8 LATIN CAPITAL LETTER U WITH HORN AND ACUTE */
+#define XK_uhornacute 0x1001ee9 /* U+1EE9 LATIN SMALL LETTER U WITH HORN AND ACUTE */
+#define XK_Uhorngrave 0x1001eea /* U+1EEA LATIN CAPITAL LETTER U WITH HORN AND GRAVE */
+#define XK_uhorngrave 0x1001eeb /* U+1EEB LATIN SMALL LETTER U WITH HORN AND GRAVE */
+#define XK_Uhornhook 0x1001eec /* U+1EEC LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE */
+#define XK_uhornhook 0x1001eed /* U+1EED LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE */
+#define XK_Uhorntilde 0x1001eee /* U+1EEE LATIN CAPITAL LETTER U WITH HORN AND TILDE */
+#define XK_uhorntilde 0x1001eef /* U+1EEF LATIN SMALL LETTER U WITH HORN AND TILDE */
+#define XK_Uhornbelowdot 0x1001ef0 /* U+1EF0 LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW */
+#define XK_uhornbelowdot 0x1001ef1 /* U+1EF1 LATIN SMALL LETTER U WITH HORN AND DOT BELOW */
+#define XK_Ybelowdot 0x1001ef4 /* U+1EF4 LATIN CAPITAL LETTER Y WITH DOT BELOW */
+#define XK_ybelowdot 0x1001ef5 /* U+1EF5 LATIN SMALL LETTER Y WITH DOT BELOW */
+#define XK_Yhook 0x1001ef6 /* U+1EF6 LATIN CAPITAL LETTER Y WITH HOOK ABOVE */
+#define XK_yhook 0x1001ef7 /* U+1EF7 LATIN SMALL LETTER Y WITH HOOK ABOVE */
+#define XK_Ytilde 0x1001ef8 /* U+1EF8 LATIN CAPITAL LETTER Y WITH TILDE */
+#define XK_ytilde 0x1001ef9 /* U+1EF9 LATIN SMALL LETTER Y WITH TILDE */
+#define XK_Ohorn 0x10001a0 /* U+01A0 LATIN CAPITAL LETTER O WITH HORN */
+#define XK_ohorn 0x10001a1 /* U+01A1 LATIN SMALL LETTER O WITH HORN */
+#define XK_Uhorn 0x10001af /* U+01AF LATIN CAPITAL LETTER U WITH HORN */
+#define XK_uhorn 0x10001b0 /* U+01B0 LATIN SMALL LETTER U WITH HORN */
+
+#endif /* XK_VIETNAMESE */
+
+#ifdef XK_CURRENCY
+#define XK_EcuSign 0x10020a0 /* U+20A0 EURO-CURRENCY SIGN */
+#define XK_ColonSign 0x10020a1 /* U+20A1 COLON SIGN */
+#define XK_CruzeiroSign 0x10020a2 /* U+20A2 CRUZEIRO SIGN */
+#define XK_FFrancSign 0x10020a3 /* U+20A3 FRENCH FRANC SIGN */
+#define XK_LiraSign 0x10020a4 /* U+20A4 LIRA SIGN */
+#define XK_MillSign 0x10020a5 /* U+20A5 MILL SIGN */
+#define XK_NairaSign 0x10020a6 /* U+20A6 NAIRA SIGN */
+#define XK_PesetaSign 0x10020a7 /* U+20A7 PESETA SIGN */
+#define XK_RupeeSign 0x10020a8 /* U+20A8 RUPEE SIGN */
+#define XK_WonSign 0x10020a9 /* U+20A9 WON SIGN */
+#define XK_NewSheqelSign 0x10020aa /* U+20AA NEW SHEQEL SIGN */
+#define XK_DongSign 0x10020ab /* U+20AB DONG SIGN */
+#define XK_EuroSign 0x20ac /* U+20AC EURO SIGN */
+#endif /* XK_CURRENCY */
+
+#ifdef XK_MATHEMATICAL
+/* one, two and three are defined above. */
+#define XK_zerosuperior 0x1002070 /* U+2070 SUPERSCRIPT ZERO */
+#define XK_foursuperior 0x1002074 /* U+2074 SUPERSCRIPT FOUR */
+#define XK_fivesuperior 0x1002075 /* U+2075 SUPERSCRIPT FIVE */
+#define XK_sixsuperior 0x1002076 /* U+2076 SUPERSCRIPT SIX */
+#define XK_sevensuperior 0x1002077 /* U+2077 SUPERSCRIPT SEVEN */
+#define XK_eightsuperior 0x1002078 /* U+2078 SUPERSCRIPT EIGHT */
+#define XK_ninesuperior 0x1002079 /* U+2079 SUPERSCRIPT NINE */
+#define XK_zerosubscript 0x1002080 /* U+2080 SUBSCRIPT ZERO */
+#define XK_onesubscript 0x1002081 /* U+2081 SUBSCRIPT ONE */
+#define XK_twosubscript 0x1002082 /* U+2082 SUBSCRIPT TWO */
+#define XK_threesubscript 0x1002083 /* U+2083 SUBSCRIPT THREE */
+#define XK_foursubscript 0x1002084 /* U+2084 SUBSCRIPT FOUR */
+#define XK_fivesubscript 0x1002085 /* U+2085 SUBSCRIPT FIVE */
+#define XK_sixsubscript 0x1002086 /* U+2086 SUBSCRIPT SIX */
+#define XK_sevensubscript 0x1002087 /* U+2087 SUBSCRIPT SEVEN */
+#define XK_eightsubscript 0x1002088 /* U+2088 SUBSCRIPT EIGHT */
+#define XK_ninesubscript 0x1002089 /* U+2089 SUBSCRIPT NINE */
+#define XK_partdifferential 0x1002202 /* U+2202 PARTIAL DIFFERENTIAL */
+#define XK_emptyset 0x1002205 /* U+2205 NULL SET */
+#define XK_elementof 0x1002208 /* U+2208 ELEMENT OF */
+#define XK_notelementof 0x1002209 /* U+2209 NOT AN ELEMENT OF */
+#define XK_containsas 0x100220B /* U+220B CONTAINS AS MEMBER */
+#define XK_squareroot 0x100221A /* U+221A SQUARE ROOT */
+#define XK_cuberoot 0x100221B /* U+221B CUBE ROOT */
+#define XK_fourthroot 0x100221C /* U+221C FOURTH ROOT */
+#define XK_dintegral 0x100222C /* U+222C DOUBLE INTEGRAL */
+#define XK_tintegral 0x100222D /* U+222D TRIPLE INTEGRAL */
+#define XK_because 0x1002235 /* U+2235 BECAUSE */
+#define XK_approxeq 0x1002248 /* U+2245 ALMOST EQUAL TO */
+#define XK_notapproxeq 0x1002247 /* U+2247 NOT ALMOST EQUAL TO */
+#define XK_notidentical 0x1002262 /* U+2262 NOT IDENTICAL TO */
+#define XK_stricteq 0x1002263 /* U+2263 STRICTLY EQUIVALENT TO */
+#endif /* XK_MATHEMATICAL */
+
+#ifdef XK_BRAILLE
+#define XK_braille_dot_1 0xfff1
+#define XK_braille_dot_2 0xfff2
+#define XK_braille_dot_3 0xfff3
+#define XK_braille_dot_4 0xfff4
+#define XK_braille_dot_5 0xfff5
+#define XK_braille_dot_6 0xfff6
+#define XK_braille_dot_7 0xfff7
+#define XK_braille_dot_8 0xfff8
+#define XK_braille_dot_9 0xfff9
+#define XK_braille_dot_10 0xfffa
+#define XK_braille_blank 0x1002800 /* U+2800 BRAILLE PATTERN BLANK */
+#define XK_braille_dots_1 0x1002801 /* U+2801 BRAILLE PATTERN DOTS-1 */
+#define XK_braille_dots_2 0x1002802 /* U+2802 BRAILLE PATTERN DOTS-2 */
+#define XK_braille_dots_12 0x1002803 /* U+2803 BRAILLE PATTERN DOTS-12 */
+#define XK_braille_dots_3 0x1002804 /* U+2804 BRAILLE PATTERN DOTS-3 */
+#define XK_braille_dots_13 0x1002805 /* U+2805 BRAILLE PATTERN DOTS-13 */
+#define XK_braille_dots_23 0x1002806 /* U+2806 BRAILLE PATTERN DOTS-23 */
+#define XK_braille_dots_123 0x1002807 /* U+2807 BRAILLE PATTERN DOTS-123 */
+#define XK_braille_dots_4 0x1002808 /* U+2808 BRAILLE PATTERN DOTS-4 */
+#define XK_braille_dots_14 0x1002809 /* U+2809 BRAILLE PATTERN DOTS-14 */
+#define XK_braille_dots_24 0x100280a /* U+280a BRAILLE PATTERN DOTS-24 */
+#define XK_braille_dots_124 0x100280b /* U+280b BRAILLE PATTERN DOTS-124 */
+#define XK_braille_dots_34 0x100280c /* U+280c BRAILLE PATTERN DOTS-34 */
+#define XK_braille_dots_134 0x100280d /* U+280d BRAILLE PATTERN DOTS-134 */
+#define XK_braille_dots_234 0x100280e /* U+280e BRAILLE PATTERN DOTS-234 */
+#define XK_braille_dots_1234 0x100280f /* U+280f BRAILLE PATTERN DOTS-1234 */
+#define XK_braille_dots_5 0x1002810 /* U+2810 BRAILLE PATTERN DOTS-5 */
+#define XK_braille_dots_15 0x1002811 /* U+2811 BRAILLE PATTERN DOTS-15 */
+#define XK_braille_dots_25 0x1002812 /* U+2812 BRAILLE PATTERN DOTS-25 */
+#define XK_braille_dots_125 0x1002813 /* U+2813 BRAILLE PATTERN DOTS-125 */
+#define XK_braille_dots_35 0x1002814 /* U+2814 BRAILLE PATTERN DOTS-35 */
+#define XK_braille_dots_135 0x1002815 /* U+2815 BRAILLE PATTERN DOTS-135 */
+#define XK_braille_dots_235 0x1002816 /* U+2816 BRAILLE PATTERN DOTS-235 */
+#define XK_braille_dots_1235 0x1002817 /* U+2817 BRAILLE PATTERN DOTS-1235 */
+#define XK_braille_dots_45 0x1002818 /* U+2818 BRAILLE PATTERN DOTS-45 */
+#define XK_braille_dots_145 0x1002819 /* U+2819 BRAILLE PATTERN DOTS-145 */
+#define XK_braille_dots_245 0x100281a /* U+281a BRAILLE PATTERN DOTS-245 */
+#define XK_braille_dots_1245 0x100281b /* U+281b BRAILLE PATTERN DOTS-1245 */
+#define XK_braille_dots_345 0x100281c /* U+281c BRAILLE PATTERN DOTS-345 */
+#define XK_braille_dots_1345 0x100281d /* U+281d BRAILLE PATTERN DOTS-1345 */
+#define XK_braille_dots_2345 0x100281e /* U+281e BRAILLE PATTERN DOTS-2345 */
+#define XK_braille_dots_12345 0x100281f /* U+281f BRAILLE PATTERN DOTS-12345 */
+#define XK_braille_dots_6 0x1002820 /* U+2820 BRAILLE PATTERN DOTS-6 */
+#define XK_braille_dots_16 0x1002821 /* U+2821 BRAILLE PATTERN DOTS-16 */
+#define XK_braille_dots_26 0x1002822 /* U+2822 BRAILLE PATTERN DOTS-26 */
+#define XK_braille_dots_126 0x1002823 /* U+2823 BRAILLE PATTERN DOTS-126 */
+#define XK_braille_dots_36 0x1002824 /* U+2824 BRAILLE PATTERN DOTS-36 */
+#define XK_braille_dots_136 0x1002825 /* U+2825 BRAILLE PATTERN DOTS-136 */
+#define XK_braille_dots_236 0x1002826 /* U+2826 BRAILLE PATTERN DOTS-236 */
+#define XK_braille_dots_1236 0x1002827 /* U+2827 BRAILLE PATTERN DOTS-1236 */
+#define XK_braille_dots_46 0x1002828 /* U+2828 BRAILLE PATTERN DOTS-46 */
+#define XK_braille_dots_146 0x1002829 /* U+2829 BRAILLE PATTERN DOTS-146 */
+#define XK_braille_dots_246 0x100282a /* U+282a BRAILLE PATTERN DOTS-246 */
+#define XK_braille_dots_1246 0x100282b /* U+282b BRAILLE PATTERN DOTS-1246 */
+#define XK_braille_dots_346 0x100282c /* U+282c BRAILLE PATTERN DOTS-346 */
+#define XK_braille_dots_1346 0x100282d /* U+282d BRAILLE PATTERN DOTS-1346 */
+#define XK_braille_dots_2346 0x100282e /* U+282e BRAILLE PATTERN DOTS-2346 */
+#define XK_braille_dots_12346 0x100282f /* U+282f BRAILLE PATTERN DOTS-12346 */
+#define XK_braille_dots_56 0x1002830 /* U+2830 BRAILLE PATTERN DOTS-56 */
+#define XK_braille_dots_156 0x1002831 /* U+2831 BRAILLE PATTERN DOTS-156 */
+#define XK_braille_dots_256 0x1002832 /* U+2832 BRAILLE PATTERN DOTS-256 */
+#define XK_braille_dots_1256 0x1002833 /* U+2833 BRAILLE PATTERN DOTS-1256 */
+#define XK_braille_dots_356 0x1002834 /* U+2834 BRAILLE PATTERN DOTS-356 */
+#define XK_braille_dots_1356 0x1002835 /* U+2835 BRAILLE PATTERN DOTS-1356 */
+#define XK_braille_dots_2356 0x1002836 /* U+2836 BRAILLE PATTERN DOTS-2356 */
+#define XK_braille_dots_12356 0x1002837 /* U+2837 BRAILLE PATTERN DOTS-12356 */
+#define XK_braille_dots_456 0x1002838 /* U+2838 BRAILLE PATTERN DOTS-456 */
+#define XK_braille_dots_1456 0x1002839 /* U+2839 BRAILLE PATTERN DOTS-1456 */
+#define XK_braille_dots_2456 0x100283a /* U+283a BRAILLE PATTERN DOTS-2456 */
+#define XK_braille_dots_12456 0x100283b /* U+283b BRAILLE PATTERN DOTS-12456 */
+#define XK_braille_dots_3456 0x100283c /* U+283c BRAILLE PATTERN DOTS-3456 */
+#define XK_braille_dots_13456 0x100283d /* U+283d BRAILLE PATTERN DOTS-13456 */
+#define XK_braille_dots_23456 0x100283e /* U+283e BRAILLE PATTERN DOTS-23456 */
+#define XK_braille_dots_123456 0x100283f /* U+283f BRAILLE PATTERN DOTS-123456 */
+#define XK_braille_dots_7 0x1002840 /* U+2840 BRAILLE PATTERN DOTS-7 */
+#define XK_braille_dots_17 0x1002841 /* U+2841 BRAILLE PATTERN DOTS-17 */
+#define XK_braille_dots_27 0x1002842 /* U+2842 BRAILLE PATTERN DOTS-27 */
+#define XK_braille_dots_127 0x1002843 /* U+2843 BRAILLE PATTERN DOTS-127 */
+#define XK_braille_dots_37 0x1002844 /* U+2844 BRAILLE PATTERN DOTS-37 */
+#define XK_braille_dots_137 0x1002845 /* U+2845 BRAILLE PATTERN DOTS-137 */
+#define XK_braille_dots_237 0x1002846 /* U+2846 BRAILLE PATTERN DOTS-237 */
+#define XK_braille_dots_1237 0x1002847 /* U+2847 BRAILLE PATTERN DOTS-1237 */
+#define XK_braille_dots_47 0x1002848 /* U+2848 BRAILLE PATTERN DOTS-47 */
+#define XK_braille_dots_147 0x1002849 /* U+2849 BRAILLE PATTERN DOTS-147 */
+#define XK_braille_dots_247 0x100284a /* U+284a BRAILLE PATTERN DOTS-247 */
+#define XK_braille_dots_1247 0x100284b /* U+284b BRAILLE PATTERN DOTS-1247 */
+#define XK_braille_dots_347 0x100284c /* U+284c BRAILLE PATTERN DOTS-347 */
+#define XK_braille_dots_1347 0x100284d /* U+284d BRAILLE PATTERN DOTS-1347 */
+#define XK_braille_dots_2347 0x100284e /* U+284e BRAILLE PATTERN DOTS-2347 */
+#define XK_braille_dots_12347 0x100284f /* U+284f BRAILLE PATTERN DOTS-12347 */
+#define XK_braille_dots_57 0x1002850 /* U+2850 BRAILLE PATTERN DOTS-57 */
+#define XK_braille_dots_157 0x1002851 /* U+2851 BRAILLE PATTERN DOTS-157 */
+#define XK_braille_dots_257 0x1002852 /* U+2852 BRAILLE PATTERN DOTS-257 */
+#define XK_braille_dots_1257 0x1002853 /* U+2853 BRAILLE PATTERN DOTS-1257 */
+#define XK_braille_dots_357 0x1002854 /* U+2854 BRAILLE PATTERN DOTS-357 */
+#define XK_braille_dots_1357 0x1002855 /* U+2855 BRAILLE PATTERN DOTS-1357 */
+#define XK_braille_dots_2357 0x1002856 /* U+2856 BRAILLE PATTERN DOTS-2357 */
+#define XK_braille_dots_12357 0x1002857 /* U+2857 BRAILLE PATTERN DOTS-12357 */
+#define XK_braille_dots_457 0x1002858 /* U+2858 BRAILLE PATTERN DOTS-457 */
+#define XK_braille_dots_1457 0x1002859 /* U+2859 BRAILLE PATTERN DOTS-1457 */
+#define XK_braille_dots_2457 0x100285a /* U+285a BRAILLE PATTERN DOTS-2457 */
+#define XK_braille_dots_12457 0x100285b /* U+285b BRAILLE PATTERN DOTS-12457 */
+#define XK_braille_dots_3457 0x100285c /* U+285c BRAILLE PATTERN DOTS-3457 */
+#define XK_braille_dots_13457 0x100285d /* U+285d BRAILLE PATTERN DOTS-13457 */
+#define XK_braille_dots_23457 0x100285e /* U+285e BRAILLE PATTERN DOTS-23457 */
+#define XK_braille_dots_123457 0x100285f /* U+285f BRAILLE PATTERN DOTS-123457 */
+#define XK_braille_dots_67 0x1002860 /* U+2860 BRAILLE PATTERN DOTS-67 */
+#define XK_braille_dots_167 0x1002861 /* U+2861 BRAILLE PATTERN DOTS-167 */
+#define XK_braille_dots_267 0x1002862 /* U+2862 BRAILLE PATTERN DOTS-267 */
+#define XK_braille_dots_1267 0x1002863 /* U+2863 BRAILLE PATTERN DOTS-1267 */
+#define XK_braille_dots_367 0x1002864 /* U+2864 BRAILLE PATTERN DOTS-367 */
+#define XK_braille_dots_1367 0x1002865 /* U+2865 BRAILLE PATTERN DOTS-1367 */
+#define XK_braille_dots_2367 0x1002866 /* U+2866 BRAILLE PATTERN DOTS-2367 */
+#define XK_braille_dots_12367 0x1002867 /* U+2867 BRAILLE PATTERN DOTS-12367 */
+#define XK_braille_dots_467 0x1002868 /* U+2868 BRAILLE PATTERN DOTS-467 */
+#define XK_braille_dots_1467 0x1002869 /* U+2869 BRAILLE PATTERN DOTS-1467 */
+#define XK_braille_dots_2467 0x100286a /* U+286a BRAILLE PATTERN DOTS-2467 */
+#define XK_braille_dots_12467 0x100286b /* U+286b BRAILLE PATTERN DOTS-12467 */
+#define XK_braille_dots_3467 0x100286c /* U+286c BRAILLE PATTERN DOTS-3467 */
+#define XK_braille_dots_13467 0x100286d /* U+286d BRAILLE PATTERN DOTS-13467 */
+#define XK_braille_dots_23467 0x100286e /* U+286e BRAILLE PATTERN DOTS-23467 */
+#define XK_braille_dots_123467 0x100286f /* U+286f BRAILLE PATTERN DOTS-123467 */
+#define XK_braille_dots_567 0x1002870 /* U+2870 BRAILLE PATTERN DOTS-567 */
+#define XK_braille_dots_1567 0x1002871 /* U+2871 BRAILLE PATTERN DOTS-1567 */
+#define XK_braille_dots_2567 0x1002872 /* U+2872 BRAILLE PATTERN DOTS-2567 */
+#define XK_braille_dots_12567 0x1002873 /* U+2873 BRAILLE PATTERN DOTS-12567 */
+#define XK_braille_dots_3567 0x1002874 /* U+2874 BRAILLE PATTERN DOTS-3567 */
+#define XK_braille_dots_13567 0x1002875 /* U+2875 BRAILLE PATTERN DOTS-13567 */
+#define XK_braille_dots_23567 0x1002876 /* U+2876 BRAILLE PATTERN DOTS-23567 */
+#define XK_braille_dots_123567 0x1002877 /* U+2877 BRAILLE PATTERN DOTS-123567 */
+#define XK_braille_dots_4567 0x1002878 /* U+2878 BRAILLE PATTERN DOTS-4567 */
+#define XK_braille_dots_14567 0x1002879 /* U+2879 BRAILLE PATTERN DOTS-14567 */
+#define XK_braille_dots_24567 0x100287a /* U+287a BRAILLE PATTERN DOTS-24567 */
+#define XK_braille_dots_124567 0x100287b /* U+287b BRAILLE PATTERN DOTS-124567 */
+#define XK_braille_dots_34567 0x100287c /* U+287c BRAILLE PATTERN DOTS-34567 */
+#define XK_braille_dots_134567 0x100287d /* U+287d BRAILLE PATTERN DOTS-134567 */
+#define XK_braille_dots_234567 0x100287e /* U+287e BRAILLE PATTERN DOTS-234567 */
+#define XK_braille_dots_1234567 0x100287f /* U+287f BRAILLE PATTERN DOTS-1234567 */
+#define XK_braille_dots_8 0x1002880 /* U+2880 BRAILLE PATTERN DOTS-8 */
+#define XK_braille_dots_18 0x1002881 /* U+2881 BRAILLE PATTERN DOTS-18 */
+#define XK_braille_dots_28 0x1002882 /* U+2882 BRAILLE PATTERN DOTS-28 */
+#define XK_braille_dots_128 0x1002883 /* U+2883 BRAILLE PATTERN DOTS-128 */
+#define XK_braille_dots_38 0x1002884 /* U+2884 BRAILLE PATTERN DOTS-38 */
+#define XK_braille_dots_138 0x1002885 /* U+2885 BRAILLE PATTERN DOTS-138 */
+#define XK_braille_dots_238 0x1002886 /* U+2886 BRAILLE PATTERN DOTS-238 */
+#define XK_braille_dots_1238 0x1002887 /* U+2887 BRAILLE PATTERN DOTS-1238 */
+#define XK_braille_dots_48 0x1002888 /* U+2888 BRAILLE PATTERN DOTS-48 */
+#define XK_braille_dots_148 0x1002889 /* U+2889 BRAILLE PATTERN DOTS-148 */
+#define XK_braille_dots_248 0x100288a /* U+288a BRAILLE PATTERN DOTS-248 */
+#define XK_braille_dots_1248 0x100288b /* U+288b BRAILLE PATTERN DOTS-1248 */
+#define XK_braille_dots_348 0x100288c /* U+288c BRAILLE PATTERN DOTS-348 */
+#define XK_braille_dots_1348 0x100288d /* U+288d BRAILLE PATTERN DOTS-1348 */
+#define XK_braille_dots_2348 0x100288e /* U+288e BRAILLE PATTERN DOTS-2348 */
+#define XK_braille_dots_12348 0x100288f /* U+288f BRAILLE PATTERN DOTS-12348 */
+#define XK_braille_dots_58 0x1002890 /* U+2890 BRAILLE PATTERN DOTS-58 */
+#define XK_braille_dots_158 0x1002891 /* U+2891 BRAILLE PATTERN DOTS-158 */
+#define XK_braille_dots_258 0x1002892 /* U+2892 BRAILLE PATTERN DOTS-258 */
+#define XK_braille_dots_1258 0x1002893 /* U+2893 BRAILLE PATTERN DOTS-1258 */
+#define XK_braille_dots_358 0x1002894 /* U+2894 BRAILLE PATTERN DOTS-358 */
+#define XK_braille_dots_1358 0x1002895 /* U+2895 BRAILLE PATTERN DOTS-1358 */
+#define XK_braille_dots_2358 0x1002896 /* U+2896 BRAILLE PATTERN DOTS-2358 */
+#define XK_braille_dots_12358 0x1002897 /* U+2897 BRAILLE PATTERN DOTS-12358 */
+#define XK_braille_dots_458 0x1002898 /* U+2898 BRAILLE PATTERN DOTS-458 */
+#define XK_braille_dots_1458 0x1002899 /* U+2899 BRAILLE PATTERN DOTS-1458 */
+#define XK_braille_dots_2458 0x100289a /* U+289a BRAILLE PATTERN DOTS-2458 */
+#define XK_braille_dots_12458 0x100289b /* U+289b BRAILLE PATTERN DOTS-12458 */
+#define XK_braille_dots_3458 0x100289c /* U+289c BRAILLE PATTERN DOTS-3458 */
+#define XK_braille_dots_13458 0x100289d /* U+289d BRAILLE PATTERN DOTS-13458 */
+#define XK_braille_dots_23458 0x100289e /* U+289e BRAILLE PATTERN DOTS-23458 */
+#define XK_braille_dots_123458 0x100289f /* U+289f BRAILLE PATTERN DOTS-123458 */
+#define XK_braille_dots_68 0x10028a0 /* U+28a0 BRAILLE PATTERN DOTS-68 */
+#define XK_braille_dots_168 0x10028a1 /* U+28a1 BRAILLE PATTERN DOTS-168 */
+#define XK_braille_dots_268 0x10028a2 /* U+28a2 BRAILLE PATTERN DOTS-268 */
+#define XK_braille_dots_1268 0x10028a3 /* U+28a3 BRAILLE PATTERN DOTS-1268 */
+#define XK_braille_dots_368 0x10028a4 /* U+28a4 BRAILLE PATTERN DOTS-368 */
+#define XK_braille_dots_1368 0x10028a5 /* U+28a5 BRAILLE PATTERN DOTS-1368 */
+#define XK_braille_dots_2368 0x10028a6 /* U+28a6 BRAILLE PATTERN DOTS-2368 */
+#define XK_braille_dots_12368 0x10028a7 /* U+28a7 BRAILLE PATTERN DOTS-12368 */
+#define XK_braille_dots_468 0x10028a8 /* U+28a8 BRAILLE PATTERN DOTS-468 */
+#define XK_braille_dots_1468 0x10028a9 /* U+28a9 BRAILLE PATTERN DOTS-1468 */
+#define XK_braille_dots_2468 0x10028aa /* U+28aa BRAILLE PATTERN DOTS-2468 */
+#define XK_braille_dots_12468 0x10028ab /* U+28ab BRAILLE PATTERN DOTS-12468 */
+#define XK_braille_dots_3468 0x10028ac /* U+28ac BRAILLE PATTERN DOTS-3468 */
+#define XK_braille_dots_13468 0x10028ad /* U+28ad BRAILLE PATTERN DOTS-13468 */
+#define XK_braille_dots_23468 0x10028ae /* U+28ae BRAILLE PATTERN DOTS-23468 */
+#define XK_braille_dots_123468 0x10028af /* U+28af BRAILLE PATTERN DOTS-123468 */
+#define XK_braille_dots_568 0x10028b0 /* U+28b0 BRAILLE PATTERN DOTS-568 */
+#define XK_braille_dots_1568 0x10028b1 /* U+28b1 BRAILLE PATTERN DOTS-1568 */
+#define XK_braille_dots_2568 0x10028b2 /* U+28b2 BRAILLE PATTERN DOTS-2568 */
+#define XK_braille_dots_12568 0x10028b3 /* U+28b3 BRAILLE PATTERN DOTS-12568 */
+#define XK_braille_dots_3568 0x10028b4 /* U+28b4 BRAILLE PATTERN DOTS-3568 */
+#define XK_braille_dots_13568 0x10028b5 /* U+28b5 BRAILLE PATTERN DOTS-13568 */
+#define XK_braille_dots_23568 0x10028b6 /* U+28b6 BRAILLE PATTERN DOTS-23568 */
+#define XK_braille_dots_123568 0x10028b7 /* U+28b7 BRAILLE PATTERN DOTS-123568 */
+#define XK_braille_dots_4568 0x10028b8 /* U+28b8 BRAILLE PATTERN DOTS-4568 */
+#define XK_braille_dots_14568 0x10028b9 /* U+28b9 BRAILLE PATTERN DOTS-14568 */
+#define XK_braille_dots_24568 0x10028ba /* U+28ba BRAILLE PATTERN DOTS-24568 */
+#define XK_braille_dots_124568 0x10028bb /* U+28bb BRAILLE PATTERN DOTS-124568 */
+#define XK_braille_dots_34568 0x10028bc /* U+28bc BRAILLE PATTERN DOTS-34568 */
+#define XK_braille_dots_134568 0x10028bd /* U+28bd BRAILLE PATTERN DOTS-134568 */
+#define XK_braille_dots_234568 0x10028be /* U+28be BRAILLE PATTERN DOTS-234568 */
+#define XK_braille_dots_1234568 0x10028bf /* U+28bf BRAILLE PATTERN DOTS-1234568 */
+#define XK_braille_dots_78 0x10028c0 /* U+28c0 BRAILLE PATTERN DOTS-78 */
+#define XK_braille_dots_178 0x10028c1 /* U+28c1 BRAILLE PATTERN DOTS-178 */
+#define XK_braille_dots_278 0x10028c2 /* U+28c2 BRAILLE PATTERN DOTS-278 */
+#define XK_braille_dots_1278 0x10028c3 /* U+28c3 BRAILLE PATTERN DOTS-1278 */
+#define XK_braille_dots_378 0x10028c4 /* U+28c4 BRAILLE PATTERN DOTS-378 */
+#define XK_braille_dots_1378 0x10028c5 /* U+28c5 BRAILLE PATTERN DOTS-1378 */
+#define XK_braille_dots_2378 0x10028c6 /* U+28c6 BRAILLE PATTERN DOTS-2378 */
+#define XK_braille_dots_12378 0x10028c7 /* U+28c7 BRAILLE PATTERN DOTS-12378 */
+#define XK_braille_dots_478 0x10028c8 /* U+28c8 BRAILLE PATTERN DOTS-478 */
+#define XK_braille_dots_1478 0x10028c9 /* U+28c9 BRAILLE PATTERN DOTS-1478 */
+#define XK_braille_dots_2478 0x10028ca /* U+28ca BRAILLE PATTERN DOTS-2478 */
+#define XK_braille_dots_12478 0x10028cb /* U+28cb BRAILLE PATTERN DOTS-12478 */
+#define XK_braille_dots_3478 0x10028cc /* U+28cc BRAILLE PATTERN DOTS-3478 */
+#define XK_braille_dots_13478 0x10028cd /* U+28cd BRAILLE PATTERN DOTS-13478 */
+#define XK_braille_dots_23478 0x10028ce /* U+28ce BRAILLE PATTERN DOTS-23478 */
+#define XK_braille_dots_123478 0x10028cf /* U+28cf BRAILLE PATTERN DOTS-123478 */
+#define XK_braille_dots_578 0x10028d0 /* U+28d0 BRAILLE PATTERN DOTS-578 */
+#define XK_braille_dots_1578 0x10028d1 /* U+28d1 BRAILLE PATTERN DOTS-1578 */
+#define XK_braille_dots_2578 0x10028d2 /* U+28d2 BRAILLE PATTERN DOTS-2578 */
+#define XK_braille_dots_12578 0x10028d3 /* U+28d3 BRAILLE PATTERN DOTS-12578 */
+#define XK_braille_dots_3578 0x10028d4 /* U+28d4 BRAILLE PATTERN DOTS-3578 */
+#define XK_braille_dots_13578 0x10028d5 /* U+28d5 BRAILLE PATTERN DOTS-13578 */
+#define XK_braille_dots_23578 0x10028d6 /* U+28d6 BRAILLE PATTERN DOTS-23578 */
+#define XK_braille_dots_123578 0x10028d7 /* U+28d7 BRAILLE PATTERN DOTS-123578 */
+#define XK_braille_dots_4578 0x10028d8 /* U+28d8 BRAILLE PATTERN DOTS-4578 */
+#define XK_braille_dots_14578 0x10028d9 /* U+28d9 BRAILLE PATTERN DOTS-14578 */
+#define XK_braille_dots_24578 0x10028da /* U+28da BRAILLE PATTERN DOTS-24578 */
+#define XK_braille_dots_124578 0x10028db /* U+28db BRAILLE PATTERN DOTS-124578 */
+#define XK_braille_dots_34578 0x10028dc /* U+28dc BRAILLE PATTERN DOTS-34578 */
+#define XK_braille_dots_134578 0x10028dd /* U+28dd BRAILLE PATTERN DOTS-134578 */
+#define XK_braille_dots_234578 0x10028de /* U+28de BRAILLE PATTERN DOTS-234578 */
+#define XK_braille_dots_1234578 0x10028df /* U+28df BRAILLE PATTERN DOTS-1234578 */
+#define XK_braille_dots_678 0x10028e0 /* U+28e0 BRAILLE PATTERN DOTS-678 */
+#define XK_braille_dots_1678 0x10028e1 /* U+28e1 BRAILLE PATTERN DOTS-1678 */
+#define XK_braille_dots_2678 0x10028e2 /* U+28e2 BRAILLE PATTERN DOTS-2678 */
+#define XK_braille_dots_12678 0x10028e3 /* U+28e3 BRAILLE PATTERN DOTS-12678 */
+#define XK_braille_dots_3678 0x10028e4 /* U+28e4 BRAILLE PATTERN DOTS-3678 */
+#define XK_braille_dots_13678 0x10028e5 /* U+28e5 BRAILLE PATTERN DOTS-13678 */
+#define XK_braille_dots_23678 0x10028e6 /* U+28e6 BRAILLE PATTERN DOTS-23678 */
+#define XK_braille_dots_123678 0x10028e7 /* U+28e7 BRAILLE PATTERN DOTS-123678 */
+#define XK_braille_dots_4678 0x10028e8 /* U+28e8 BRAILLE PATTERN DOTS-4678 */
+#define XK_braille_dots_14678 0x10028e9 /* U+28e9 BRAILLE PATTERN DOTS-14678 */
+#define XK_braille_dots_24678 0x10028ea /* U+28ea BRAILLE PATTERN DOTS-24678 */
+#define XK_braille_dots_124678 0x10028eb /* U+28eb BRAILLE PATTERN DOTS-124678 */
+#define XK_braille_dots_34678 0x10028ec /* U+28ec BRAILLE PATTERN DOTS-34678 */
+#define XK_braille_dots_134678 0x10028ed /* U+28ed BRAILLE PATTERN DOTS-134678 */
+#define XK_braille_dots_234678 0x10028ee /* U+28ee BRAILLE PATTERN DOTS-234678 */
+#define XK_braille_dots_1234678 0x10028ef /* U+28ef BRAILLE PATTERN DOTS-1234678 */
+#define XK_braille_dots_5678 0x10028f0 /* U+28f0 BRAILLE PATTERN DOTS-5678 */
+#define XK_braille_dots_15678 0x10028f1 /* U+28f1 BRAILLE PATTERN DOTS-15678 */
+#define XK_braille_dots_25678 0x10028f2 /* U+28f2 BRAILLE PATTERN DOTS-25678 */
+#define XK_braille_dots_125678 0x10028f3 /* U+28f3 BRAILLE PATTERN DOTS-125678 */
+#define XK_braille_dots_35678 0x10028f4 /* U+28f4 BRAILLE PATTERN DOTS-35678 */
+#define XK_braille_dots_135678 0x10028f5 /* U+28f5 BRAILLE PATTERN DOTS-135678 */
+#define XK_braille_dots_235678 0x10028f6 /* U+28f6 BRAILLE PATTERN DOTS-235678 */
+#define XK_braille_dots_1235678 0x10028f7 /* U+28f7 BRAILLE PATTERN DOTS-1235678 */
+#define XK_braille_dots_45678 0x10028f8 /* U+28f8 BRAILLE PATTERN DOTS-45678 */
+#define XK_braille_dots_145678 0x10028f9 /* U+28f9 BRAILLE PATTERN DOTS-145678 */
+#define XK_braille_dots_245678 0x10028fa /* U+28fa BRAILLE PATTERN DOTS-245678 */
+#define XK_braille_dots_1245678 0x10028fb /* U+28fb BRAILLE PATTERN DOTS-1245678 */
+#define XK_braille_dots_345678 0x10028fc /* U+28fc BRAILLE PATTERN DOTS-345678 */
+#define XK_braille_dots_1345678 0x10028fd /* U+28fd BRAILLE PATTERN DOTS-1345678 */
+#define XK_braille_dots_2345678 0x10028fe /* U+28fe BRAILLE PATTERN DOTS-2345678 */
+#define XK_braille_dots_12345678 0x10028ff /* U+28ff BRAILLE PATTERN DOTS-12345678 */
+#endif /* XK_BRAILLE */
+
+/*
+ * Sinhala (http://unicode.org/charts/PDF/U0D80.pdf)
+ * http://www.nongnu.org/sinhala/doc/transliteration/sinhala-transliteration_6.html
+ */
+
+#ifdef XK_SINHALA
+#define XK_Sinh_ng 0x1000d82 /* U+0D82 SINHALA ANUSVARAYA */
+#define XK_Sinh_h2 0x1000d83 /* U+0D83 SINHALA VISARGAYA */
+#define XK_Sinh_a 0x1000d85 /* U+0D85 SINHALA AYANNA */
+#define XK_Sinh_aa 0x1000d86 /* U+0D86 SINHALA AAYANNA */
+#define XK_Sinh_ae 0x1000d87 /* U+0D87 SINHALA AEYANNA */
+#define XK_Sinh_aee 0x1000d88 /* U+0D88 SINHALA AEEYANNA */
+#define XK_Sinh_i 0x1000d89 /* U+0D89 SINHALA IYANNA */
+#define XK_Sinh_ii 0x1000d8a /* U+0D8A SINHALA IIYANNA */
+#define XK_Sinh_u 0x1000d8b /* U+0D8B SINHALA UYANNA */
+#define XK_Sinh_uu 0x1000d8c /* U+0D8C SINHALA UUYANNA */
+#define XK_Sinh_ri 0x1000d8d /* U+0D8D SINHALA IRUYANNA */
+#define XK_Sinh_rii 0x1000d8e /* U+0D8E SINHALA IRUUYANNA */
+#define XK_Sinh_lu 0x1000d8f /* U+0D8F SINHALA ILUYANNA */
+#define XK_Sinh_luu 0x1000d90 /* U+0D90 SINHALA ILUUYANNA */
+#define XK_Sinh_e 0x1000d91 /* U+0D91 SINHALA EYANNA */
+#define XK_Sinh_ee 0x1000d92 /* U+0D92 SINHALA EEYANNA */
+#define XK_Sinh_ai 0x1000d93 /* U+0D93 SINHALA AIYANNA */
+#define XK_Sinh_o 0x1000d94 /* U+0D94 SINHALA OYANNA */
+#define XK_Sinh_oo 0x1000d95 /* U+0D95 SINHALA OOYANNA */
+#define XK_Sinh_au 0x1000d96 /* U+0D96 SINHALA AUYANNA */
+#define XK_Sinh_ka 0x1000d9a /* U+0D9A SINHALA KAYANNA */
+#define XK_Sinh_kha 0x1000d9b /* U+0D9B SINHALA MAHA. KAYANNA */
+#define XK_Sinh_ga 0x1000d9c /* U+0D9C SINHALA GAYANNA */
+#define XK_Sinh_gha 0x1000d9d /* U+0D9D SINHALA MAHA. GAYANNA */
+#define XK_Sinh_ng2 0x1000d9e /* U+0D9E SINHALA KANTAJA NAASIKYAYA */
+#define XK_Sinh_nga 0x1000d9f /* U+0D9F SINHALA SANYAKA GAYANNA */
+#define XK_Sinh_ca 0x1000da0 /* U+0DA0 SINHALA CAYANNA */
+#define XK_Sinh_cha 0x1000da1 /* U+0DA1 SINHALA MAHA. CAYANNA */
+#define XK_Sinh_ja 0x1000da2 /* U+0DA2 SINHALA JAYANNA */
+#define XK_Sinh_jha 0x1000da3 /* U+0DA3 SINHALA MAHA. JAYANNA */
+#define XK_Sinh_nya 0x1000da4 /* U+0DA4 SINHALA TAALUJA NAASIKYAYA */
+#define XK_Sinh_jnya 0x1000da5 /* U+0DA5 SINHALA TAALUJA SANYOOGA NAASIKYAYA */
+#define XK_Sinh_nja 0x1000da6 /* U+0DA6 SINHALA SANYAKA JAYANNA */
+#define XK_Sinh_tta 0x1000da7 /* U+0DA7 SINHALA TTAYANNA */
+#define XK_Sinh_ttha 0x1000da8 /* U+0DA8 SINHALA MAHA. TTAYANNA */
+#define XK_Sinh_dda 0x1000da9 /* U+0DA9 SINHALA DDAYANNA */
+#define XK_Sinh_ddha 0x1000daa /* U+0DAA SINHALA MAHA. DDAYANNA */
+#define XK_Sinh_nna 0x1000dab /* U+0DAB SINHALA MUURDHAJA NAYANNA */
+#define XK_Sinh_ndda 0x1000dac /* U+0DAC SINHALA SANYAKA DDAYANNA */
+#define XK_Sinh_tha 0x1000dad /* U+0DAD SINHALA TAYANNA */
+#define XK_Sinh_thha 0x1000dae /* U+0DAE SINHALA MAHA. TAYANNA */
+#define XK_Sinh_dha 0x1000daf /* U+0DAF SINHALA DAYANNA */
+#define XK_Sinh_dhha 0x1000db0 /* U+0DB0 SINHALA MAHA. DAYANNA */
+#define XK_Sinh_na 0x1000db1 /* U+0DB1 SINHALA DANTAJA NAYANNA */
+#define XK_Sinh_ndha 0x1000db3 /* U+0DB3 SINHALA SANYAKA DAYANNA */
+#define XK_Sinh_pa 0x1000db4 /* U+0DB4 SINHALA PAYANNA */
+#define XK_Sinh_pha 0x1000db5 /* U+0DB5 SINHALA MAHA. PAYANNA */
+#define XK_Sinh_ba 0x1000db6 /* U+0DB6 SINHALA BAYANNA */
+#define XK_Sinh_bha 0x1000db7 /* U+0DB7 SINHALA MAHA. BAYANNA */
+#define XK_Sinh_ma 0x1000db8 /* U+0DB8 SINHALA MAYANNA */
+#define XK_Sinh_mba 0x1000db9 /* U+0DB9 SINHALA AMBA BAYANNA */
+#define XK_Sinh_ya 0x1000dba /* U+0DBA SINHALA YAYANNA */
+#define XK_Sinh_ra 0x1000dbb /* U+0DBB SINHALA RAYANNA */
+#define XK_Sinh_la 0x1000dbd /* U+0DBD SINHALA DANTAJA LAYANNA */
+#define XK_Sinh_va 0x1000dc0 /* U+0DC0 SINHALA VAYANNA */
+#define XK_Sinh_sha 0x1000dc1 /* U+0DC1 SINHALA TAALUJA SAYANNA */
+#define XK_Sinh_ssha 0x1000dc2 /* U+0DC2 SINHALA MUURDHAJA SAYANNA */
+#define XK_Sinh_sa 0x1000dc3 /* U+0DC3 SINHALA DANTAJA SAYANNA */
+#define XK_Sinh_ha 0x1000dc4 /* U+0DC4 SINHALA HAYANNA */
+#define XK_Sinh_lla 0x1000dc5 /* U+0DC5 SINHALA MUURDHAJA LAYANNA */
+#define XK_Sinh_fa 0x1000dc6 /* U+0DC6 SINHALA FAYANNA */
+#define XK_Sinh_al 0x1000dca /* U+0DCA SINHALA AL-LAKUNA */
+#define XK_Sinh_aa2 0x1000dcf /* U+0DCF SINHALA AELA-PILLA */
+#define XK_Sinh_ae2 0x1000dd0 /* U+0DD0 SINHALA AEDA-PILLA */
+#define XK_Sinh_aee2 0x1000dd1 /* U+0DD1 SINHALA DIGA AEDA-PILLA */
+#define XK_Sinh_i2 0x1000dd2 /* U+0DD2 SINHALA IS-PILLA */
+#define XK_Sinh_ii2 0x1000dd3 /* U+0DD3 SINHALA DIGA IS-PILLA */
+#define XK_Sinh_u2 0x1000dd4 /* U+0DD4 SINHALA PAA-PILLA */
+#define XK_Sinh_uu2 0x1000dd6 /* U+0DD6 SINHALA DIGA PAA-PILLA */
+#define XK_Sinh_ru2 0x1000dd8 /* U+0DD8 SINHALA GAETTA-PILLA */
+#define XK_Sinh_e2 0x1000dd9 /* U+0DD9 SINHALA KOMBUVA */
+#define XK_Sinh_ee2 0x1000dda /* U+0DDA SINHALA DIGA KOMBUVA */
+#define XK_Sinh_ai2 0x1000ddb /* U+0DDB SINHALA KOMBU DEKA */
+#define XK_Sinh_o2 0x1000ddc /* U+0DDC SINHALA KOMBUVA HAA AELA-PILLA*/
+#define XK_Sinh_oo2 0x1000ddd /* U+0DDD SINHALA KOMBUVA HAA DIGA AELA-PILLA*/
+#define XK_Sinh_au2 0x1000dde /* U+0DDE SINHALA KOMBUVA HAA GAYANUKITTA */
+#define XK_Sinh_lu2 0x1000ddf /* U+0DDF SINHALA GAYANUKITTA */
+#define XK_Sinh_ruu2 0x1000df2 /* U+0DF2 SINHALA DIGA GAETTA-PILLA */
+#define XK_Sinh_luu2 0x1000df3 /* U+0DF3 SINHALA DIGA GAYANUKITTA */
+#define XK_Sinh_kunddaliya 0x1000df4 /* U+0DF4 SINHALA KUNDDALIYA */
+#endif /* XK_SINHALA */
diff --git a/missing b/missing
new file mode 100755
index 0000000..28055d2
--- /dev/null
+++ b/missing
@@ -0,0 +1,376 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2009-04-28.21; # UTC
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
+# 2008, 2009 Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 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 <http://www.gnu.org/licenses/>.
+
+# 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
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+ configure_ac=configure.ac
+else
+ configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+ # Try to run requested program, and just exit if it succeeds.
+ run=
+ shift
+ "$@" && exit 0
+ # Exit code 63 means version mismatch. This often happens
+ # when the user try to use an ancient version of a tool on
+ # a file that requires a minimum version. In this case we
+ # we should proceed has if the program had been absent, or
+ # if --run hadn't been passed.
+ if test $? = 63; then
+ run=:
+ msg="probably too old"
+ fi
+ ;;
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+ --run try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+ aclocal touch file \`aclocal.m4'
+ autoconf touch file \`configure'
+ autoheader touch file \`config.h.in'
+ autom4te touch the output file, or create a stub one
+ automake touch all \`Makefile.in' files
+ bison create \`y.tab.[ch]', if possible, from existing .[ch]
+ flex create \`lex.yy.c', if possible, from existing .c
+ help2man touch the output file
+ lex create \`lex.yy.c', if possible, from existing .c
+ makeinfo touch the output file
+ tar try tar, gnutar, gtar, then tar without non-portable flags
+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
+\`g' are ignored when checking the name.
+
+Send bug reports to <bug-automake@gnu.org>."
+ 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
+
+# normalize program name to check for.
+program=`echo "$1" | sed '
+ s/^gnu-//; t
+ s/^gnu//; t
+ s/^g//; t'`
+
+# Now exit if we have it, but it failed. Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program). This is about non-GNU programs, so use $1 not
+# $program.
+case $1 in
+ lex*|yacc*)
+ # Not GNU programs, they don't have --version.
+ ;;
+
+ tar*)
+ if test -n "$run"; then
+ echo 1>&2 "ERROR: \`tar' requires --run"
+ exit 1
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+ exit 1
+ fi
+ ;;
+
+ *)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+ # Could not run --version or --help. This is probably someone
+ # running `$TOOL --version' or `$TOOL --help' to check whether
+ # $TOOL exists and not knowing $TOOL uses missing.
+ exit 1
+ fi
+ ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $program in
+ aclocal*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`acinclude.m4' or \`${configure_ac}'. You might want
+ to install the \`Automake' and \`Perl' packages. Grab them from
+ any GNU archive site."
+ touch aclocal.m4
+ ;;
+
+ autoconf*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`${configure_ac}'. You might want to install the
+ \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
+ archive site."
+ touch configure
+ ;;
+
+ autoheader*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`acconfig.h' or \`${configure_ac}'. You might want
+ to install the \`Autoconf' and \`GNU m4' packages. Grab them
+ from any GNU archive site."
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+ test -z "$files" && files="config.h"
+ touch_files=
+ for f in $files; do
+ case $f in
+ *:*) touch_files="$touch_files "`echo "$f" |
+ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+ *) touch_files="$touch_files $f.in";;
+ esac
+ done
+ touch $touch_files
+ ;;
+
+ automake*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+ You might want to install the \`Automake' and \`Perl' packages.
+ Grab them from any GNU archive site."
+ find . -type f -name Makefile.am -print |
+ sed 's/\.am$/.in/' |
+ while read f; do touch "$f"; done
+ ;;
+
+ autom4te*)
+ echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+ You might have modified some files without having the
+ proper tools for further handling them.
+ You can get \`$1' as part of \`Autoconf' from any GNU
+ archive site."
+
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -f "$file"; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo "#! /bin/sh"
+ echo "# Created by GNU Automake missing as a replacement of"
+ echo "# $ $@"
+ echo "exit 0"
+ chmod +x $file
+ exit 1
+ fi
+ ;;
+
+ bison*|yacc*)
+ echo 1>&2 "\
+WARNING: \`$1' $msg. You should only need it if
+ you modified a \`.y' file. You may need the \`Bison' package
+ in order for those modifications to take effect. You can get
+ \`Bison' from any GNU archive site."
+ rm -f y.tab.c y.tab.h
+ if test $# -ne 1; then
+ eval LASTARG="\${$#}"
+ case $LASTARG in
+ *.y)
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" y.tab.c
+ fi
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" y.tab.h
+ fi
+ ;;
+ esac
+ fi
+ if test ! -f y.tab.h; then
+ echo >y.tab.h
+ fi
+ if test ! -f y.tab.c; then
+ echo 'main() { return 0; }' >y.tab.c
+ fi
+ ;;
+
+ lex*|flex*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a \`.l' file. You may need the \`Flex' package
+ in order for those modifications to take effect. You can get
+ \`Flex' from any GNU archive site."
+ rm -f lex.yy.c
+ if test $# -ne 1; then
+ eval LASTARG="\${$#}"
+ case $LASTARG in
+ *.l)
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" lex.yy.c
+ fi
+ ;;
+ esac
+ fi
+ if test ! -f lex.yy.c; then
+ echo 'main() { return 0; }' >lex.yy.c
+ fi
+ ;;
+
+ help2man*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a dependency of a manual page. You may need the
+ \`Help2man' package in order for those modifications to take
+ effect. You can get \`Help2man' from any GNU archive site."
+
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -f "$file"; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo ".ab help2man is required to generate this page"
+ exit $?
+ fi
+ ;;
+
+ makeinfo*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a \`.texi' or \`.texinfo' file, or any other file
+ indirectly affecting the aspect of the manual. The spurious
+ call might also be the consequence of using a buggy \`make' (AIX,
+ DU, IRIX). You might want to install the \`Texinfo' package or
+ the \`GNU make' package. Grab either from any GNU archive site."
+ # The file to touch is that specified with -o ...
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -z "$file"; then
+ # ... or it is the one specified with @setfilename ...
+ infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+ file=`sed -n '
+ /^@setfilename/{
+ s/.* \([^ ]*\) *$/\1/
+ p
+ q
+ }' $infile`
+ # ... or it is derived from the source name (dir/f.texi becomes f.info)
+ test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+ fi
+ # If the file does not exist, the user really needs makeinfo;
+ # let's fail without touching anything.
+ test -f $file || exit 1
+ touch $file
+ ;;
+
+ tar*)
+ shift
+
+ # We have already tried tar in the generic part.
+ # Look for gnutar/gtar before invocation to avoid ugly error
+ # messages.
+ if (gnutar --version > /dev/null 2>&1); then
+ gnutar "$@" && exit 0
+ fi
+ if (gtar --version > /dev/null 2>&1); then
+ gtar "$@" && exit 0
+ fi
+ firstarg="$1"
+ if shift; then
+ case $firstarg in
+ *o*)
+ firstarg=`echo "$firstarg" | sed s/o//`
+ tar "$firstarg" "$@" && exit 0
+ ;;
+ esac
+ case $firstarg in
+ *h*)
+ firstarg=`echo "$firstarg" | sed s/h//`
+ tar "$firstarg" "$@" && exit 0
+ ;;
+ esac
+ fi
+
+ echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+ You may want to install GNU tar or Free paxutils, or check the
+ command line arguments."
+ exit 1
+ ;;
+
+ *)
+ echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+ You might have modified some files without having the
+ proper tools for further handling them. Check the \`README' file,
+ it often tells you about the needed prerequisites for installing
+ this package. You may also peek at any GNU archive site, in case
+ some other package would contain this missing \`$1' program."
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# 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:
diff --git a/specs/Makefile.am b/specs/Makefile.am
new file mode 100644
index 0000000..c7c4fe5
--- /dev/null
+++ b/specs/Makefile.am
@@ -0,0 +1,21 @@
+SUBDIRS = SIAddresses
+
+if ENABLE_SPECS
+
+# Main DocBook/XML files (DOCTYPE book)
+docbook = x11protocol.xml
+
+# Included chapters, appendix, images
+chapters = \
+ encoding.xml \
+ glossary.xml \
+ keysyms.xml \
+ sect1-9.xml
+
+# The location where the DocBook/XML files and their generated formats are installed
+shelfdir = $(docdir)
+
+# Generate DocBook/XML output formats with or without stylesheets
+include $(top_srcdir)/docbook.am
+
+endif ENABLE_SPECS
diff --git a/specs/Makefile.in b/specs/Makefile.in
new file mode 100644
index 0000000..5a850d8
--- /dev/null
+++ b/specs/Makefile.in
@@ -0,0 +1,742 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@
+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@
+DIST_COMMON = $(am__dist_shelf_DATA_DIST) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(top_srcdir)/docbook.am
+@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
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/do-not-use-config.h \
+ $(top_builddir)/Xfuncproto.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-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 uninstall-recursive
+am__dist_shelf_DATA_DIST = x11protocol.xml encoding.xml glossary.xml \
+ keysyms.xml sect1-9.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__installdirs = "$(DESTDIR)$(shelfdir)" "$(DESTDIR)$(shelfdir)"
+DATA = $(dist_shelf_DATA) $(shelf_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+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@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BASE_CFLAGS = @BASE_CFLAGS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHANGELOG_CMD = @CHANGELOG_CMD@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CWARNFLAGS = @CWARNFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
+DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FILE_MAN_DIR = @FILE_MAN_DIR@
+FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
+FOP = @FOP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_CMD = @INSTALL_CMD@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIB_MAN_DIR = @LIB_MAN_DIR@
+LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MAN_SUBSTS = @MAN_SUBSTS@
+MISC_MAN_DIR = @MISC_MAN_DIR@
+MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRICT_CFLAGS = @STRICT_CFLAGS@
+STRIP = @STRIP@
+STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@
+USE_FDS_BITS = @USE_FDS_BITS@
+VERSION = @VERSION@
+XMLTO = @XMLTO@
+XORG_MAN_PAGE = @XORG_MAN_PAGE@
+XORG_SGML_PATH = @XORG_SGML_PATH@
+XSLTPROC = @XSLTPROC@
+XSL_STYLESHEET = @XSL_STYLESHEET@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+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@
+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 = SIAddresses
+
+# Main DocBook/XML files (DOCTYPE book)
+@ENABLE_SPECS_TRUE@docbook = x11protocol.xml
+
+# Included chapters, appendix, images
+@ENABLE_SPECS_TRUE@chapters = \
+@ENABLE_SPECS_TRUE@ encoding.xml \
+@ENABLE_SPECS_TRUE@ glossary.xml \
+@ENABLE_SPECS_TRUE@ keysyms.xml \
+@ENABLE_SPECS_TRUE@ sect1-9.xml
+
+
+# The location where the DocBook/XML files and their generated formats are installed
+@ENABLE_SPECS_TRUE@shelfdir = $(docdir)
+
+# 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-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign specs/Makefile
+.PRECIOUS: 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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-dist_shelfDATA: $(dist_shelf_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(shelfdir)" || $(MKDIR_P) "$(DESTDIR)$(shelfdir)"
+ @list='$(dist_shelf_DATA)'; test -n "$(shelfdir)" || list=; \
+ 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|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(shelfdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(shelfdir)" && rm -f $$files
+install-shelfDATA: $(shelf_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(shelfdir)" || $(MKDIR_P) "$(DESTDIR)$(shelfdir)"
+ @list='$(shelf_DATA)'; test -n "$(shelfdir)" || list=; \
+ 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|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(shelfdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(shelfdir)" && rm -f $$files
+
+# 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.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; 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"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ 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; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ 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
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ 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"
+
+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 \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ 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)$(shelfdir)" "$(DESTDIR)$(shelfdir)"; 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:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+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 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-dist_shelfDATA install-shelfDATA
+
+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
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-dist_shelfDATA uninstall-shelfDATA
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic ctags \
+ ctags-recursive distclean distclean-generic distclean-tags \
+ 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 installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
+ uninstall-dist_shelfDATA uninstall-shelfDATA
+
+@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:
diff --git a/specs/SIAddresses/IPv6.txt b/specs/SIAddresses/IPv6.txt
new file mode 100644
index 0000000..4b69a99
--- /dev/null
+++ b/specs/SIAddresses/IPv6.txt
@@ -0,0 +1,11 @@
+ServerInterpreted address definition for type "IPv6":
+
+The X.org Architecture Task Force reserves the ServerInterpreted
+address type of "IPv6" for use with IPv6 literal address formats.
+The syntax for the value will be defined as specified in RFC 3513
+and the IETF RFC to be published based on the current draft at
+http://www.ietf.org/internet-drafts/draft-ietf-ipv6-scoping-arch-00.txt
+This address type specification will be formally issued once the
+IETF IPv6 Working Group issues the corresponding RFC.
+
+Version 0.9, March 2004
diff --git a/specs/SIAddresses/Makefile.am b/specs/SIAddresses/Makefile.am
new file mode 100644
index 0000000..662776a
--- /dev/null
+++ b/specs/SIAddresses/Makefile.am
@@ -0,0 +1,6 @@
+dist_noinst_DATA = \
+ hostname.txt \
+ IPv6.txt \
+ localuser.txt \
+ README
+
diff --git a/specs/SIAddresses/Makefile.in b/specs/SIAddresses/Makefile.in
new file mode 100644
index 0000000..d1e9454
--- /dev/null
+++ b/specs/SIAddresses/Makefile.in
@@ -0,0 +1,369 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@
+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/SIAddresses
+DIST_COMMON = README $(dist_noinst_DATA) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/do-not-use-config.h \
+ $(top_builddir)/Xfuncproto.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+DATA = $(dist_noinst_DATA)
+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@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BASE_CFLAGS = @BASE_CFLAGS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHANGELOG_CMD = @CHANGELOG_CMD@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CWARNFLAGS = @CWARNFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
+DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FILE_MAN_DIR = @FILE_MAN_DIR@
+FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
+FOP = @FOP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_CMD = @INSTALL_CMD@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIB_MAN_DIR = @LIB_MAN_DIR@
+LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MAN_SUBSTS = @MAN_SUBSTS@
+MISC_MAN_DIR = @MISC_MAN_DIR@
+MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRICT_CFLAGS = @STRICT_CFLAGS@
+STRIP = @STRIP@
+STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@
+USE_FDS_BITS = @USE_FDS_BITS@
+VERSION = @VERSION@
+XMLTO = @XMLTO@
+XORG_MAN_PAGE = @XORG_MAN_PAGE@
+XORG_SGML_PATH = @XORG_SGML_PATH@
+XSLTPROC = @XSLTPROC@
+XSL_STYLESHEET = @XSL_STYLESHEET@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+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@
+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@
+dist_noinst_DATA = \
+ hostname.txt \
+ IPv6.txt \
+ localuser.txt \
+ README
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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/SIAddresses/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign specs/SIAddresses/Makefile
+.PRECIOUS: 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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+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:
+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:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+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 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-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
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+ distclean-generic 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-generic pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+# 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:
diff --git a/specs/SIAddresses/README b/specs/SIAddresses/README
new file mode 100644
index 0000000..8858529
--- /dev/null
+++ b/specs/SIAddresses/README
@@ -0,0 +1,4 @@
+This directory contains the specifications of address types for the
+ServerInterpreted address family used in the ChangeHost and ListHosts
+requests in the X11 Protocol. See Chapter 9 of the X11 Protocol spec
+for more information.
diff --git a/specs/SIAddresses/hostname.txt b/specs/SIAddresses/hostname.txt
new file mode 100644
index 0000000..64023d7
--- /dev/null
+++ b/specs/SIAddresses/hostname.txt
@@ -0,0 +1,11 @@
+ServerInterpreted address definition for type "hostname":
+
+A ServerInterpreted address with type "hostname" shall have a value
+representing a hostname as defined in IETF RFC 2396. Due to Mobile IP
+and dynamic DNS, the name service should be consulted at connection
+authentication time. Clients supporting Internationalized Domain
+Names must convert to ASCII Compatible Encoding as specified in the
+relevant IETF RFC's before use in the X11 protocol. Note that this
+definition of hostname does not allow use of literal IP addresses.
+
+Version 1.0, March 2004
diff --git a/specs/SIAddresses/localuser.txt b/specs/SIAddresses/localuser.txt
new file mode 100644
index 0000000..e67ff01
--- /dev/null
+++ b/specs/SIAddresses/localuser.txt
@@ -0,0 +1,20 @@
+Server-interpreted Authentication Types "localuser" and "localgroup":
+
+On systems which can determine in a secure fashion the credentials of a client
+process, the "localuser" and "localgroup" authentication methods provide access
+based on those credentials. The format of the values provided is platform
+specific. For POSIX & UNIX platforms, if the value starts with the character
+'#', the rest of the string shall be treated as a decimal uid or gid, otherwise
+the string is defined as a user name or group name.
+
+Systems offering this MUST not simply trust a user supplied value (such as an
+environment variable or IDENT protocol response). It is expected many systems
+will only support this for clients running on the same host using a local IPC
+transport.
+
+Examples:
+ xhost +SI:localuser:alanc
+ xhost +SI:localuser:#1234
+ xhost +SI:localgroup:wheel
+ xhost +SI:localgroup:#0
+
diff --git a/specs/encoding.xml b/specs/encoding.xml
new file mode 100644
index 0000000..0c6ef02
--- /dev/null
+++ b/specs/encoding.xml
@@ -0,0 +1,3268 @@
+<appendix id="protocol_encoding">
+<title>Protocol Encoding</title>
+<!--
+ The sections in this appendix correspond to their
+ number counterparts in the protocol document.
+-->
+<sect1 id='Syntactic_Conventions_b'>
+<title>Syntactic Conventions</title>
+
+<para>
+All numbers are in decimal,
+unless prefixed with #x, in which case they are in hexadecimal (base 16).
+</para>
+
+<para>
+The general syntax used to describe requests, replies, errors, events, and
+compound types is:
+</para>
+
+<literallayout class="monospaced">
+ <emphasis role='bold'>NameofThing</emphasis>
+ encode-form
+ ...
+ encode-form
+</literallayout>
+
+<para>
+Each encode-form describes a single component.
+</para>
+<para>
+For components described in the protocol as:
+</para>
+<literallayout class="monospaced">
+ name: TYPE
+</literallayout>
+
+<para>
+the encode-form is:
+</para>
+
+<literallayout class="monospaced">
+ N TYPE name
+</literallayout>
+
+<para>
+N is the number of bytes occupied in the data stream,
+and TYPE is the interpretation of those bytes.
+For example,
+</para>
+
+<literallayout class="monospaced">
+ depth: CARD8
+</literallayout>
+
+<para>
+becomes:
+</para>
+
+<literallayout class="monospaced">
+ 1 CARD8 depth
+</literallayout>
+
+<para>
+For components with a static numeric value the encode-form is:
+</para>
+
+<literallayout class="monospaced">
+ N value name
+</literallayout>
+
+<para>
+The value is always interpreted as an N-byte unsigned integer.
+For example,
+the first two bytes of a
+<emphasis role='bold'>Window</emphasis>
+error are always zero (indicating an
+error in general) and three (indicating the
+<emphasis role='bold'>Window</emphasis>
+error in particular):
+</para>
+
+<literallayout class="monospaced">
+ 1 0 Error
+ 1 3 code
+</literallayout>
+
+<para>
+For components described in the protocol as:
+</para>
+
+<para>
+name:
+{ <emphasis role='bold'>Name1</emphasis>,...,
+<emphasis role='bold'>NameI</emphasis>}
+</para>
+
+<para>
+the encode-form is:
+</para>
+
+<literallayout class="monospaced">
+ N name
+ value1 Name1
+ ...
+ valueI NameI
+</literallayout>
+
+<para>
+The value is always interpreted as an N-byte unsigned integer.
+Note that the size of N is sometimes larger than that strictly required
+to encode the values.
+For example:
+</para>
+
+<para>
+class:
+{ <emphasis role='bold'>InputOutput</emphasis>,
+<emphasis role='bold'>InputOnly</emphasis>,
+<emphasis role='bold'>CopyFromParent</emphasis> }
+</para>
+
+<para>
+becomes:
+</para>
+
+<literallayout class="monospaced">
+2 class
+ 0 CopyFromParent
+ 1 InputOutput
+ 2 InputOnly
+</literallayout>
+
+<para>
+For components described in the protocol as:
+</para>
+
+<para>
+NAME: TYPE or
+<emphasis role='bold'>Alternative1 ...or</emphasis>
+<emphasis role='bold'>AlternativeI</emphasis>
+</para>
+
+<para>
+the encode-form is:
+</para>
+
+<literallayout class="monospaced">
+N TYPE NAME
+ value1 Alternative1
+ ...
+ valueI AlternativeI
+</literallayout>
+
+<para>
+The alternative values are guaranteed not to conflict with the encoding
+of TYPE.
+For example:
+</para>
+
+<para>
+destination: WINDOW or
+<emphasis role='bold'>PointerWindow</emphasis>
+or
+<emphasis role='bold'>InputFocus</emphasis>
+</para>
+
+<para>
+becomes:
+</para>
+
+<literallayout class="monospaced">
+4 WINDOW destination
+ 0 PointerWindow
+ 1 InputFocus
+</literallayout>
+
+<para>
+For components described in the protocol as:
+</para>
+
+<literallayout class="monospaced">
+ value-mask: BITMASK
+</literallayout>
+
+<para>
+the encode-form is:
+</para>
+
+<literallayout class="monospaced">
+N BITMASK value-mask
+ mask1 mask-name1
+ ...
+ maskI mask-nameI
+</literallayout>
+
+<para>
+The individual bits in the mask are specified and named,
+and N is 2 or 4.
+The most-significant bit in a BITMASK is reserved for use in defining
+chained (multiword) bitmasks, as extensions augment existing core requests.
+The precise interpretation of this bit is not yet defined here,
+although a probable mechanism is that a 1-bit indicates that another N bytes
+of bitmask follows, with bits within the overall mask still interpreted
+from least-significant to most-significant with an N-byte unit,
+with N-byte units
+interpreted in stream order, and with the overall mask being byte-swapped
+in individual N-byte units.
+</para>
+
+<para>
+For LISTofVALUE encodings, the request is followed by a section of the form:
+</para>
+
+<literallayout class="monospaced">
+ VALUEs
+ encode-form
+ ...
+ encode-form
+</literallayout>
+
+<para>
+listing an encode-form for each VALUE.
+The NAME in each encode-form keys to the corresponding BITMASK bit.
+The encoding of a VALUE always occupies four bytes,
+but the number of bytes specified in the encoding-form indicates how
+many of the least-significant bytes are actually used;
+the remaining bytes are unused and their values do not matter.
+</para>
+
+<para>
+In various cases, the number of bytes occupied by a component will be
+specified
+by a lowercase single-letter variable name instead of a specific numeric
+value, and often some other component will have its value specified as a
+simple numeric expression involving these variables.
+Components specified with such expressions are always interpreted
+as unsigned integers.
+The scope of such variables is always just the enclosing request, reply,
+error, event, or compound type structure.
+For example:
+</para>
+
+<literallayout class="monospaced">
+2 3+n request length
+4n LISTofPOINT points
+</literallayout>
+
+<para>
+For unused bytes (the values of the bytes are undefined and do no matter),
+the encode-form is:
+</para>
+
+<literallayout class="monospaced">
+ N unused
+</literallayout>
+
+<para>
+<!-- .LP -->
+If the number of unused bytes is variable, the encode-form typically is:
+</para>
+
+<literallayout class="monospaced">
+ p unused, p=pad(E)
+</literallayout>
+
+<para>
+where E is some expression,
+<phrase id="encoding:pad">
+<indexterm zone="encoding:pad" significance="preferred"><primary>Padding</primary></indexterm>
+and pad(E) is the number of bytes needed to round E up to a multiple of four.
+</phrase>
+</para>
+
+<literallayout class="monospaced">
+ pad(E) = (4 - (E mod 4)) mod 4
+</literallayout>
+</sect1>
+
+<sect1 id='Encoding::Common_Types'>
+<title>Common Types</title>
+<indexterm zone="Encoding::Common_Types"><primary>Types</primary><secondary>encoding</secondary></indexterm>
+
+<variablelist>
+ <varlistentry>
+ <term>LISTofFOO</term>
+ <listitem>
+ <para>
+In this document the LISTof notation strictly means some number of repetitions
+of the FOO encoding;
+the actual length of the list is encoded elsewhere.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>SETofFOO</term>
+ <listitem>
+ <para>
+A set is always represented by a bitmask, with a 1-bit indicating presence in
+the set.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<informaltable frame='none'>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+BITMASK: CARD32
+ </entry>
+ </row>
+ <row>
+ <entry>
+WINDOW: CARD32
+ </entry>
+ </row>
+ <row>
+ <entry>
+PIXMAP: CARD32
+ </entry>
+ </row>
+ <row>
+ <entry>
+CURSOR: CARD32
+ </entry>
+ </row>
+ <row>
+ <entry>
+FONT: CARD32
+ </entry>
+ </row>
+ <row>
+ <entry>
+GCONTEXT: CARD32
+ </entry>
+ </row>
+ <row>
+ <entry>
+COLORMAP: CARD32
+ </entry>
+ </row>
+ <row>
+ <entry>
+DRAWABLE: CARD32
+ </entry>
+ </row>
+ <row>
+ <entry>
+FONTABLE: CARD32
+ </entry>
+ </row>
+ <row>
+ <entry>
+ATOM: CARD32
+ </entry>
+ </row>
+ <row>
+ <entry>
+VISUALID: CARD32
+ </entry>
+ </row>
+ <row>
+ <entry>
+BYTE: 8-bit value
+ </entry>
+ </row>
+ <row>
+ <entry>
+INT8: 8-bit signed integer
+ </entry>
+ </row>
+ <row>
+ <entry>
+INT16: 16-bit signed integer
+ </entry>
+ </row>
+ <row>
+ <entry>
+INT32: 32-bit signed integer
+ </entry>
+ </row>
+ <row>
+ <entry>
+CARD8: 8-bit unsigned integer
+ </entry>
+ </row>
+ <row>
+ <entry>
+CARD16: 16-bit unsigned integer
+ </entry>
+ </row>
+ <row>
+ <entry>
+CARD32: 32-bit unsigned integer
+ </entry>
+ </row>
+ <row>
+ <entry>
+TIMESTAMP: CARD32
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+
+<literallayout class="monospaced">
+BITGRAVITY
+ 0 Forget
+ 1 NorthWest
+ 2 North
+ 3 NorthEast
+ 4 West
+ 5 Center
+ 6 East
+ 7 SouthWest
+ 8 South
+ 9 SouthEast
+ 10 Static
+
+WINGRAVITY
+ 0 Unmap
+ 1 NorthWest
+ 2 North
+ 3 NorthEast
+ 4 West
+ 5 Center
+ 6 East
+ 7 SouthWest
+ 8 South
+ 9 SouthEast
+ 10 Static
+
+BOOL
+ 0 False
+ 1 True
+
+SETofEVENT
+ #x00000001 KeyPress
+ #x00000002 KeyRelease
+ #x00000004 ButtonPress
+ #x00000008 ButtonRelease
+ #x00000010 EnterWindow
+ #x00000020 LeaveWindow
+ #x00000040 PointerMotion
+ #x00000080 PointerMotionHint
+ #x00000100 Button1Motion
+ #x00000200 Button2Motion
+ #x00000400 Button3Motion
+ #x00000800 Button4Motion
+ #x00001000 Button5Motion
+ #x00002000 ButtonMotion
+ #x00004000 KeymapState
+ #x00008000 Exposure
+ #x00010000 VisibilityChange
+ #x00020000 StructureNotify
+ #x00040000 ResizeRedirect
+ #x00080000 SubstructureNotify
+ #x00100000 SubstructureRedirect
+ #x00200000 FocusChange
+ #x00400000 PropertyChange
+ #x00800000 ColormapChange
+ #x01000000 OwnerGrabButton
+ #xFE000000 unused but must be zero
+
+SETofPOINTEREVENT
+ encodings are the same as for SETofEVENT, except with
+ #xFFFF8003 unused but must be zero
+
+SETofDEVICEEVENT
+ encodings are the same as for SETofEVENT, except with
+ #xFFFFC0B0 unused but must be zero
+
+KEYSYM: CARD32
+KEYCODE: CARD8
+BUTTON: CARD8
+
+SETofKEYBUTMASK
+ #x0001 Shift
+ #x0002 Lock
+ #x0004 Control
+ #x0008 Mod1
+ #x0010 Mod2
+ #x0020 Mod3
+ #x0040 Mod4
+ #x0080 Mod5
+ #x0100 Button1
+ #x0200 Button2
+ #x0400 Button3
+ #x0800 Button4
+ #x1000 Button5
+ #xE000 unused but must be zero
+
+SETofKEYMASK
+ encodings are the same as for SETofKEYBUTMASK, except with
+ #xFF00 unused but must be zero
+STRING8: LISTofCARD8
+STRING16: LISTofCHAR2B
+
+CHAR2B
+ 1 CARD8 byte1
+ 1 CARD8 byte2
+
+POINT
+ 2 INT16 x
+ 2 INT16 y
+
+RECTANGLE
+ 2 INT16 x
+ 2 INT16 y
+ 2 CARD16 width
+ 2 CARD16 height
+
+ARC
+ 2 INT16 x
+ 2 INT16 y
+ 2 CARD16 width
+ 2 CARD16 height
+ 2 INT16 angle1
+ 2 INT16 angle2
+
+HOST
+ 1 family
+ 0 Internet
+ 1 DECnet
+ 2 Chaos
+ 5 ServerInterpreted
+ 6 InternetV6
+ 1 unused
+ 2 n length of address
+ n LISTofBYTE address
+ p unused, p=pad(n)
+
+STR
+ 1 n length of name in bytes
+ n STRING8 name
+
+</literallayout>
+</sect1>
+
+<sect1 id='Encoding::Errors'>
+<title>Errors</title>
+<indexterm zone="Encoding::Errors"><primary>Error report</primary><secondary>encoding</secondary></indexterm>
+
+<literallayout class="monospaced">
+<emphasis role='bold'>Request</emphasis>
+ 1 0 Error
+ 1 1 code
+ 2 CARD16 sequence number
+ 4 unused
+ 2 CARD16 minor opcode
+ 1 CARD8 major opcode
+ 21 unused
+
+<emphasis role='bold'>Value</emphasis>
+ 1 0 Error
+ 1 2 code
+ 2 CARD16 sequence number
+ 4 &lt;32-bits&gt; bad value
+ 2 CARD16 minor opcode
+ 1 CARD8 major opcode
+ 21 unused
+
+<emphasis role='bold'>Window</emphasis>
+ 1 0 Error
+ 1 3 code
+ 2 CARD16 sequence number
+ 4 CARD32 bad resource id
+ 2 CARD16 minor opcode
+ 1 CARD8 major opcode
+ 21 unused
+
+<emphasis role='bold'>Pixmap</emphasis>
+ 1 0 Error
+ 1 4 code
+ 2 CARD16 sequence number
+ 4 CARD32 bad resource id
+ 2 CARD16 minor opcode
+ 1 CARD8 major opcode
+ 21 unused
+
+<emphasis role='bold'>Atom</emphasis>
+ 1 0 Error
+ 1 5 code
+ 2 CARD16 sequence number
+ 4 CARD32 bad atom id
+ 2 CARD16 minor opcode
+ 1 CARD8 major opcode
+ 21 unused
+
+<emphasis role='bold'>Cursor</emphasis>
+ 1 0 Error
+ 1 6 code
+ 2 CARD16 sequence number
+ 4 CARD32 bad resource id
+ 2 CARD16 minor opcode
+ 1 CARD8 major opcode
+ 21 unused
+
+<emphasis role='bold'>Font</emphasis>
+ 1 0 Error
+ 1 7 code
+ 2 CARD16 sequence number
+ 4 CARD32 bad resource id
+ 2 CARD16 minor opcode
+ 1 CARD8 major opcode
+ 21 unused
+
+<emphasis role='bold'>Match</emphasis>
+ 1 0 Error
+ 1 8 code
+ 2 CARD16 sequence number
+ 4 unused
+ 2 CARD16 minor opcode
+ 1 CARD8 major opcode
+ 21 unused
+
+<emphasis role='bold'>Drawable</emphasis>
+ 1 0 Error
+ 1 9 code
+ 2 CARD16 sequence number
+ 4 CARD32 bad resource id
+ 2 CARD16 minor opcode
+ 1 CARD8 major opcode
+ 21 unused
+
+<emphasis role='bold'>Access</emphasis>
+ 1 0 Error
+ 1 10 code
+ 2 CARD16 sequence number
+ 4 unused
+ 2 CARD16 minor opcode
+ 1 CARD8 major opcode
+ 21 unused
+
+<emphasis role='bold'>Alloc</emphasis>
+ 1 0 Error
+ 1 11 code
+ 2 CARD16 sequence number
+ 4 unused
+ 2 CARD16 minor opcode
+ 1 CARD8 major opcode
+ 21 unused
+
+<emphasis role='bold'>Colormap</emphasis>
+ 1 0 Error
+ 1 12 code
+ 2 CARD16 sequence number
+ 4 CARD32 bad resource id
+ 2 CARD16 minor opcode
+ 1 CARD8 major opcode
+ 21 unused
+
+<emphasis role='bold'>GContext</emphasis>
+ 1 0 Error
+ 1 13 code
+ 2 CARD16 sequence number
+ 4 CARD32 bad resource id
+ 2 CARD16 minor opcode
+ 1 CARD8 major opcode
+ 21 unused
+
+<emphasis role='bold'>IDChoice</emphasis>
+ 1 0 Error
+ 1 14 code
+ 2 CARD16 sequence number
+ 4 CARD32 bad resource id
+ 2 CARD16 minor opcode
+ 1 CARD8 major opcode
+ 21 unused
+
+<emphasis role='bold'>Name</emphasis>
+ 1 0 Error
+ 1 15 code
+ 2 CARD16 sequence number
+ 4 unused
+ 2 CARD16 minor opcode
+ 1 CARD8 major opcode
+ 21 unused
+
+<emphasis role='bold'>Length</emphasis>
+ 1 0 Error
+ 1 16 code
+ 2 CARD16 sequence number
+ 4 unused
+ 2 CARD16 minor opcode
+ 1 CARD8 major opcode
+ 21 unused
+
+<emphasis role='bold'>Implementation</emphasis>
+ 1 0 Error
+ 1 17 code
+ 2 CARD16 sequence number
+ 4 unused
+ 2 CARD16 minor opcode
+ 1 CARD8 major opcode
+ 21 unused
+</literallayout>
+</sect1>
+
+<sect1 id='Encoding::Keyboards'>
+<title>Keyboards</title>
+
+<para>
+KEYCODE values are always greater than 7 (and less than 256).
+</para>
+
+<para>
+KEYSYM values with the bit #x10000000 set are reserved as vendor-specific.
+</para>
+
+<para>
+The names and encodings of the standard KEYSYM values are contained in
+<link linkend="keysym_encoding">Appendix A, Keysym Encoding</link>.
+</para>
+</sect1>
+
+<sect1 id='Encoding::Pointers'>
+<title>Pointers</title>
+
+<para>
+BUTTON values are numbered starting with one.
+</para>
+
+</sect1>
+<sect1 id='Encoding::Predefined_Atoms'>
+<title>Predefined Atoms</title>
+<indexterm zone="Encoding::Predefined_Atoms"><primary>Atom</primary><secondary>predefined</secondary></indexterm>
+
+<literallayout class="monospaced">
+PRIMARY 1 WM_NORMAL_HINTS 40
+SECONDARY 2 WM_SIZE_HINTS 41
+ARC 3 WM_ZOOM_HINTS 42
+ATOM 4 MIN_SPACE 43
+BITMAP 5 NORM_SPACE 44
+CARDINAL 6 MAX_SPACE 45
+COLORMAP 7 END_SPACE 46
+CURSOR 8 SUPERSCRIPT_X 47
+CUT_BUFFER0 9 SUPERSCRIPT_Y 48
+CUT_BUFFER1 10 SUBSCRIPT_X 49
+CUT_BUFFER2 11 SUBSCRIPT_Y 50
+CUT_BUFFER3 12 UNDERLINE_POSITION 51
+CUT_BUFFER4 13 UNDERLINE_THICKNESS 52
+CUT_BUFFER5 14 STRIKEOUT_ASCENT 53
+CUT_BUFFER6 15 STRIKEOUT_DESCENT 54
+CUT_BUFFER7 16 ITALIC_ANGLE 55
+DRAWABLE 17 X_HEIGHT 56
+FONT 18 QUAD_WIDTH 57
+INTEGER 19 WEIGHT 58
+PIXMAP 20 POINT_SIZE 59
+POINT 21 RESOLUTION 60
+RECTANGLE 22 COPYRIGHT 61
+RESOURCE_MANAGER 23 NOTICE 62
+RGB_COLOR_MAP 24 FONT_NAME 63
+RGB_BEST_MAP 25 FAMILY_NAME 64
+RGB_BLUE_MAP 26 FULL_NAME 65
+RGB_DEFAULT_MAP 27 CAP_HEIGHT 66
+RGB_GRAY_MAP 28 WM_CLASS 67
+RGB_GREEN_MAP 29 WM_TRANSIENT_FOR 68
+RGB_RED_MAP 30
+STRING 31
+VISUALID 32
+WINDOW 33
+WM_COMMAND 34
+WM_HINTS 35
+WM_CLIENT_MACHINE 36
+WM_ICON_NAME 37
+WM_ICON_SIZE 38
+WM_NAME 39
+</literallayout>
+</sect1>
+
+<sect1 id='Encoding::Connection_Setup'>
+<title>Connection Setup</title>
+
+<para>
+For TCP connections,
+displays on a given host are numbered starting from 0,
+and the server for display N listens and accepts connections on port 6000 + N.
+For DECnet connections,
+displays on a given host are numbered starting from 0,
+and the server for display N listens and accepts connections on the object
+name obtained by concatenating "X$X" with the decimal representation of N,
+for example, X$X0 and X$X1.
+</para>
+
+<para>
+Information sent by the client at connection setup:
+</para>
+
+<literallayout class="monospaced">
+ 1 byte-order
+ #x42 MSB first
+ #x6C LSB first
+ 1 unused
+ 2 CARD16 protocol-major-version
+ 2 CARD16 protocol-minor-version
+ 2 n length of authorization-protocol-name
+ 2 d length of authorization-protocol-data
+ 2 unused
+ n STRING8 authorization-protocol-name
+ p unused, p=pad(n)
+ d STRING8 authorization-protocol-data
+ q unused, q=pad(d)
+</literallayout>
+
+<para>
+Except where explicitly noted in the protocol,
+all 16-bit and 32-bit quantities sent by the client must be transmitted
+with the specified byte order,
+and all 16-bit and 32-bit quantities returned by the server will be transmitted
+with this byte order.
+</para>
+
+<para>
+Information received by the client if the connection is refused:
+</para>
+
+<literallayout class="monospaced">
+ 1 0 Failed
+ 1 n length of reason in bytes
+ 2 CARD16 protocol-major-version
+ 2 CARD16 protocol-minor-version
+ 2 (n+p)/4 length in 4-byte units of "additional data"
+ n STRING8 reason
+ p unused, p=pad(n)
+</literallayout>
+
+<para>
+Information received by the client if further authentication is required:
+</para>
+
+<literallayout class="monospaced">
+ 1 2 Authenticate
+ 5 unused
+ 2 (n+p)/4 length in 4-byte units of "additional data"
+ n STRING8 reason
+ p unused, p=pad(n)
+</literallayout>
+
+<para>
+Information received by the client if the connection is accepted:
+</para>
+
+<literallayout class="monospaced">
+ 1 1 Success
+ 1 unused
+ 2 CARD16 protocol-major-version
+ 2 CARD16 protocol-minor-version
+ 2 8+2n+(v+p+m)/4 length in 4-byte units of
+ "additional data"
+ 4 CARD32 release-number
+ 4 CARD32 resource-id-base
+ 4 CARD32 resource-id-mask
+ 4 CARD32 motion-buffer-size
+ 2 v length of vendor
+ 2 CARD16 maximum-request-length
+ 1 CARD8 number of SCREENs in roots
+ 1 n number for FORMATs in
+ pixmap-formats
+ 1 image-byte-order
+ 0 LSBFirst
+ 1 MSBFirst
+ 1 bitmap-format-bit-order
+ 0 LeastSignificant
+ 1 MostSignificant
+ 1 CARD8 bitmap-format-scanline-unit
+ 1 CARD8 bitmap-format-scanline-pad
+ 1 KEYCODE min-keycode
+ 1 KEYCODE max-keycode
+ 4 unused
+ v STRING8 vendor
+ p unused, p=pad(v)
+ 8n LISTofFORMAT pixmap-formats
+ m LISTofSCREEN roots (m is always a multiple of 4)
+</literallayout>
+
+<literallayout class="monospaced">
+FORMAT
+ 1 CARD8 depth
+ 1 CARD8 bits-per-pixel
+ 1 CARD8 scanline-pad
+ 5 unused
+</literallayout>
+
+<literallayout class="monospaced">
+SCREEN
+ 4 WINDOW root
+ 4 COLORMAP default-colormap
+ 4 CARD32 white-pixel
+ 4 CARD32 black-pixel
+ 4 SETofEVENT current-input-masks
+ 2 CARD16 width-in-pixels
+ 2 CARD16 height-in-pixels
+ 2 CARD16 width-in-millimeters
+ 2 CARD16 height-in-millimeters
+ 2 CARD16 min-installed-maps
+ 2 CARD16 max-installed-maps
+ 4 VISUALID root-visual
+ 1 backing-stores
+ 0 Never
+ 1 WhenMapped
+ 2 Always
+ 1 BOOL save-unders
+ 1 CARD8 root-depth
+ 1 CARD8 number of DEPTHs in allowed-depths
+ n LISTofDEPTH allowed-depths (n is always a
+ multiple of 4)
+</literallayout>
+
+<literallayout class="monospaced">
+DEPTH
+ 1 CARD8 depth
+ 1 unused
+ 2 n number of VISUALTYPES in visuals
+ 4 unused
+ 24n LISTofVISUALTYPE visuals
+</literallayout>
+
+<literallayout class="monospaced">
+VISUALTYPE
+ 4 VISUALID visual-id
+ 1 class
+ 0 StaticGray
+ 1 GrayScale
+ 2 StaticColor
+ 3 PseudoColor
+ 4 TrueColor
+ 5 DirectColor
+ 1 CARD8 bits-per-rgb-value
+ 2 CARD16 colormap-entries
+ 4 CARD32 red-mask
+ 4 CARD32 green-mask
+ 4 CARD32 blue-mask
+ 4 unused
+</literallayout>
+</sect1>
+
+<sect1 id='Encoding::Requests'>
+<title>Requests</title>
+<indexterm zone="Encoding::Requests"><primary>Request</primary><secondary>encoding</secondary></indexterm>
+
+<literallayout class="monospaced">
+<link linkend="requests:CreateWindow"><emphasis role='bold'>CreateWindow</emphasis></link>
+ 1 1 opcode
+ 1 CARD8 depth
+ 2 8+n request length
+ 4 WINDOW wid
+ 4 WINDOW parent
+ 2 INT16 x
+ 2 INT16 y
+ 2 CARD16 width
+ 2 CARD16 height
+ 2 CARD16 border-width
+ 2 class
+ 0 CopyFromParent
+ 1 InputOutput
+ 2 InputOnly
+ 4 VISUALID visual
+ 0 CopyFromParent
+ 4 BITMASK value-mask (has n bits set to 1)
+ #x00000001 background-pixmap
+ #x00000002 background-pixel
+ #x00000004 border-pixmap
+ #x00000008 border-pixel
+ #x00000010 bit-gravity
+ #x00000020 win-gravity
+ #x00000040 backing-store
+ #x00000080 backing-planes
+ #x00000100 backing-pixel
+ #x00000200 override-redirect
+ #x00000400 save-under
+ #x00000800 event-mask
+ #x00001000 do-not-propagate-mask
+ #x00002000 colormap
+ #x00004000 cursor
+ 4n LISTofVALUE value-list
+
+ VALUEs
+ 4 PIXMAP background-pixmap
+ 0 None
+ 1 ParentRelative
+ 4 CARD32 background-pixel
+ 4 PIXMAP border-pixmap
+ 0 CopyFromParent
+ 4 CARD32 border-pixel
+ 1 BITGRAVITY bit-gravity
+ 1 WINGRAVITY win-gravity
+ 1 backing-store
+ 0 NotUseful
+ 1 WhenMapped
+ 2 Always
+ 4 CARD32 backing-planes
+ 4 CARD32 backing-pixel
+ 1 BOOL override-redirect
+ 1 BOOL save-under
+ 4 SETofEVENT event-mask
+ 4 SETofDEVICEEVENT do-not-propagate-mask
+ 4 COLORMAP colormap
+ 0 CopyFromParent
+ 4 CURSOR cursor
+ 0 None
+
+<link linkend="requests:ChangeWindowAttributes"><emphasis role='bold'>ChangeWindowAttributes</emphasis></link>
+ 1 2 opcode
+ 1 unused
+ 2 3+n request length
+ 4 WINDOW window
+ 4 BITMASK value-mask (has n bits set to 1)
+ encodings are the same as for CreateWindow
+ 4n LISTofVALUE value-list
+ encodings are the same as for CreateWindow
+
+<link linkend="requests:GetWindowAttributes"><emphasis role='bold'>GetWindowAttributes</emphasis></link>
+ 1 3 opcode
+ 1 unused
+ 2 2 request length
+ 4 WINDOW window
+
+▶
+ 1 1 Reply
+ 1 backing-store
+ 0 NotUseful
+ 1 WhenMapped
+ 2 Always
+ 2 CARD16 sequence number
+ 4 3 reply length
+ 4 VISUALID visual
+ 2 class
+ 1 InputOutput
+ 2 InputOnly
+ 1 BITGRAVITY bit-gravity
+ 1 WINGRAVITY win-gravity
+ 4 CARD32 backing-planes
+ 4 CARD32 backing-pixel
+ 1 BOOL save-under
+ 1 BOOL map-is-installed
+ 1 map-state
+ 0 Unmapped
+ 1 Unviewable
+ 2 Viewable
+ 1 BOOL override-redirect
+ 4 COLORMAP colormap
+ 0 None
+ 4 SETofEVENT all-event-masks
+ 4 SETofEVENT your-event-mask
+ 2 SETofDEVICEEVENT do-not-propagate-mask
+ 2 unused
+
+<link linkend="requests:DestroyWindow"><emphasis role='bold'>DestroyWindow</emphasis></link>
+ 1 4 opcode
+ 1 unused
+ 2 2 request length
+ 4 WINDOW window
+
+<link linkend="requests:DestroySubwindows"><emphasis role='bold'>DestroySubwindows</emphasis></link>
+ 1 5 opcode
+ 1 unused
+ 2 2 request length
+ 4 WINDOW window
+
+<link linkend="requests:ChangeSaveSet"><emphasis role='bold'>ChangeSaveSet</emphasis></link>
+ 1 6 opcode
+ 1 mode
+ 0 Insert
+ 1 Delete
+ 2 2 request length
+ 4 WINDOW window
+
+<link linkend="requests:ReparentWindow"><emphasis role='bold'>ReparentWindow</emphasis></link>
+ 1 7 opcode
+ 1 unused
+ 2 4 request length
+ 4 WINDOW window
+ 4 WINDOW parent
+ 2 INT16 x
+ 2 INT16 y
+
+<link linkend="requests:MapWindow"><emphasis role='bold'>MapWindow</emphasis></link>
+ 1 8 opcode
+ 1 unused
+ 2 2 request length
+ 4 WINDOW window
+
+<link linkend="requests:MapSubwindows"><emphasis role='bold'>MapSubwindows</emphasis></link>
+ 1 9 opcode
+ 1 unused
+ 2 2 request length
+ 4 WINDOW window
+
+<link linkend="requests:UnmapWindow"><emphasis role='bold'>UnmapWindow</emphasis></link>
+ 1 10 opcode
+ 1 unused
+ 2 2 request length
+ 4 WINDOW window
+
+<link linkend="requests:UnmapSubwindows"><emphasis role='bold'>UnmapSubwindows</emphasis></link>
+ 1 11 opcode
+ 1 unused
+ 2 2 request length
+ 4 WINDOW window
+
+<link linkend="requests:ConfigureWindow"><emphasis role='bold'>ConfigureWindow</emphasis></link>
+ 1 12 opcode
+ 1 unused
+ 2 3+n request length
+ 4 WINDOW window
+ 2 BITMASK value-mask (has n bits set to 1)
+ #x0001 x
+ #x0002 y
+ #x0004 width
+ #x0008 height
+ #x0010 border-width
+ #x0020 sibling
+ #x0040 stack-mode
+ 2 unused
+ 4n LISTofVALUE value-list
+
+ VALUEs
+ 2 INT16 x
+ 2 INT16 y
+ 2 CARD16 width
+ 2 CARD16 height
+ 2 CARD16 border-width
+ 4 WINDOW sibling
+ 1 stack-mode
+ 0 Above
+ 1 Below
+ 2 TopIf
+ 3 BottomIf
+ 4 Opposite
+
+<link linkend="requests:CirculateWindow"><emphasis role='bold'>CirculateWindow</emphasis></link>
+ 1 13 opcode
+ 1 direction
+ 0 RaiseLowest
+ 1 LowerHighest
+ 2 2 request length
+ 4 WINDOW window
+
+<link linkend="requests:GetGeometry"><emphasis role='bold'>GetGeometry</emphasis></link>
+ 1 14 opcode
+ 1 unused
+ 2 2 request length
+ 4 DRAWABLE drawable
+
+▶
+ 1 1 Reply
+ 1 CARD8 depth
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 WINDOW root
+ 2 INT16 x
+ 2 INT16 y
+ 2 CARD16 width
+ 2 CARD16 height
+ 2 CARD16 border-width
+ 10 unused
+
+<link linkend="requests:QueryTree"><emphasis role='bold'>QueryTree</emphasis></link>
+ 1 15 opcode
+ 1 unused
+ 2 2 request length
+ 4 WINDOW window
+
+▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 n reply length
+ 4 WINDOW root
+ 4 WINDOW parent
+ 0 None
+ 2 n number of WINDOWs in children
+ 14 unused
+ 4n LISTofWINDOW children
+
+<link linkend="requests:InternAtom"><emphasis role='bold'>InternAtom</emphasis></link>
+ 1 16 opcode
+ 1 BOOL only-if-exists
+ 2 2+(n+p)/4 request length
+ 2 n length of name
+ 2 unused
+ n STRING8 name
+ p unused, p=pad(n)
+
+▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 ATOM atom
+ 0 None
+ 20 unused
+
+<link linkend="requests:GetAtomName"><emphasis role='bold'>GetAtomName</emphasis></link>
+ 1 17 opcode
+ 1 unused
+ 2 2 request length
+ 4 ATOM atom
+
+▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 (n+p)/4 reply length
+ 2 n length of name
+ 22 unused
+ n STRING8 name
+ p unused, p=pad(n)
+
+<link linkend="requests:ChangeProperty"><emphasis role='bold'>ChangeProperty</emphasis></link>
+ 1 18 opcode
+ 1 mode
+ 0 Replace
+ 1 Prepend
+ 2 Append
+ 2 6+(n+p)/4 request length
+ 4 WINDOW window
+ 4 ATOM property
+ 4 ATOM type
+ 1 CARD8 format
+ 3 unused
+ 4 CARD32 length of data in format units
+ (= n for format = 8)
+ (= n/2 for format = 16)
+ (= n/4 for format = 32)
+ n LISTofBYTE data
+ (n is a multiple of 2 for format = 16)
+ (n is a multiple of 4 for format = 32)
+ p unused, p=pad(n)
+
+
+<link linkend="requests:DeleteProperty"><emphasis role='bold'>DeleteProperty</emphasis></link>
+ 1 19 opcode
+ 1 unused
+ 2 3 request length
+ 4 WINDOW window
+ 4 ATOM property
+
+<link linkend="requests:GetProperty"><emphasis role='bold'>GetProperty</emphasis></link>
+ 1 20 opcode
+ 1 BOOL delete
+ 2 6 request length
+ 4 WINDOW window
+ 4 ATOM property
+ 4 ATOM type
+ 0 AnyPropertyType
+ 4 CARD32 long-offset
+ 4 CARD32 long-length
+
+▶
+ 1 1 Reply
+ 1 CARD8 format
+ 2 CARD16 sequence number
+ 4 (n+p)/4 reply length
+ 4 ATOM type
+ 0 None
+ 4 CARD32 bytes-after
+ 4 CARD32 length of value in format units
+ (= 0 for format = 0)
+ (= n for format = 8)
+ (= n/2 for format = 16)
+ (= n/4 for format = 32)
+ 12 unused
+ n LISTofBYTE value
+ (n is zero for format = 0)
+ (n is a multiple of 2 for format = 16)
+ (n is a multiple of 4 for format = 32)
+ p unused, p=pad(n)
+
+<link linkend="requests:ListProperties"><emphasis role='bold'>ListProperties</emphasis></link>
+ 1 21 opcode
+ 1 unused
+ 2 2 request length
+ 4 WINDOW window
+
+▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 n reply length
+ 2 n number of ATOMs in atoms
+ 22 unused
+ 4n LISTofATOM atoms
+
+<link linkend="requests:SetSelectionOwner"><emphasis role='bold'>SetSelectionOwner</emphasis></link>
+ 1 22 opcode
+ 1 unused
+ 2 4 request length
+ 4 WINDOW owner
+ 0 None
+ 4 ATOM selection
+ 4 TIMESTAMP time
+ 0 CurrentTime
+
+<link linkend="requests:GetSelectionOwner"><emphasis role='bold'>GetSelectionOwner</emphasis></link>
+ 1 23 opcode
+ 1 unused
+ 2 2 request length
+ 4 ATOM selection
+
+▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 WINDOW owner
+ 0 None
+ 20 unused
+
+<link linkend="requests:ConvertSelection"><emphasis role='bold'>ConvertSelection</emphasis></link>
+ 1 24 opcode
+ 1 unused
+ 2 6 request length
+ 4 WINDOW requestor
+ 4 ATOM selection
+ 4 ATOM target
+ 4 ATOM property
+ 0 None
+ 4 TIMESTAMP time
+ 0 CurrentTime
+
+<link linkend="requests:SendEvent"><emphasis role='bold'>SendEvent</emphasis></link>
+ 1 25 opcode
+ 1 BOOL propagate
+ 2 11 requestlength
+ 4 WINDOW destination
+ 0 PointerWindow
+ 1 InputFocus
+ 4 SETofEVENT event-mask
+ 32 event
+ standard event format (see <link linkend='Events'>the Events section</link>)
+
+<link linkend="requests:GrabPointer"><emphasis role='bold'>GrabPointer</emphasis></link>
+ 1 26 opcode
+ 1 BOOL owner-events
+ 2 6 request length
+ 4 WINDOW grab-window
+ 2 SETofPOINTEREVENT event-mask
+ 1 pointer-mode
+ 0 Synchronous
+ 1 Asynchronous
+ 1 keyboard-mode
+ 0 Synchronous
+ 1 Asynchronous
+ 4 WINDOW confine-to
+ 0 None
+ 4 CURSOR cursor
+ 0 None
+ 4 TIMESTAMP time
+ 0 CurrentTime
+
+▶
+ 1 1 Reply
+ 1 status
+ 0 Success
+ 1 AlreadyGrabbed
+ 2 InvalidTime
+ 3 NotViewable
+ 4 Frozen
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 24 unused
+
+<link linkend="requests:UngrabPointer"><emphasis role='bold'>UngrabPointer</emphasis></link>
+ 1 27 opcode
+ 1 unused
+ 2 2 request length
+ 4 TIMESTAMP time
+ 0 CurrentTime
+
+<link linkend="requests:GrabButton"><emphasis role='bold'>GrabButton</emphasis></link>
+ 1 28 opcode
+ 1 BOOL owner-events
+ 2 6 request length
+ 4 WINDOW grab-window
+ 2 SETofPOINTEREVENT event-mask
+ 1 pointer-mode
+ 0 Synchronous
+ 1 Asynchronous
+ 1 keyboard-mode
+ 0 Synchronous
+ 1 Asynchronous
+ 4 WINDOW confine-to
+ 0 None
+ 4 CURSOR cursor
+ 0 None
+ 1 BUTTON button
+ 0 AnyButton
+ 1 unused
+ 2 SETofKEYMASK modifiers
+ #x8000 AnyModifier
+
+<link linkend="requests:UngrabButton"><emphasis role='bold'>UngrabButton</emphasis></link>
+ 1 29 opcode
+ 1 BUTTON button
+ 0 AnyButton
+ 2 3 request length
+ 4 WINDOW grab-window
+ 2 SETofKEYMASK modifiers
+ #x8000 AnyModifier
+ 2 unused
+
+<link linkend="requests:ChangeActivePointerGrab"><emphasis role='bold'>ChangeActivePointerGrab</emphasis></link>
+ 1 30 opcode
+ 1 unused
+ 2 4 request length
+ 4 CURSOR cursor
+ 0 None
+ 4 TIMESTAMP time
+ 0 CurrentTime
+ 2 SETofPOINTEREVENT event-mask
+ 2 unused
+
+<link linkend="requests:GrabKeyboard"><emphasis role='bold'>GrabKeyboard</emphasis></link>
+ 1 31 opcode
+ 1 BOOL owner-events
+ 2 4 request length
+ 4 WINDOW grab-window
+ 4 TIMESTAMP time
+ 0 CurrentTime
+ 1 pointer-mode
+ 0 Synchronous
+ 1 Asynchronous
+ 1 keyboard-mode
+ 0 Synchronous
+ 1 Asynchronous
+ 2 unused
+
+▶
+ 1 1 Reply
+ 1 status
+ 0 Success
+ 1 AlreadyGrabbed
+ 2 InvalidTime
+ 3 NotViewable
+ 4 Frozen
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 24 unused
+
+<link linkend="requests:UngrabKeyboard"><emphasis role='bold'>UngrabKeyboard</emphasis></link>
+ 1 32 opcode
+ 1 unused
+ 2 2 request length
+ 4 TIMESTAMP time
+ 0 CurrentTime
+
+<link linkend="requests:GrabKey"><emphasis role='bold'>GrabKey</emphasis></link>
+ 1 33 opcode
+ 1 BOOL owner-events
+ 2 4 request length
+ 4 WINDOW grab-window
+ 2 SETofKEYMASK modifiers
+ #x8000 AnyModifier
+ 1 KEYCODE key
+ 0 AnyKey
+ 1 pointer-mode
+ 0 Synchronous
+ 1 Asynchronous
+ 1 keyboard-mode
+ 0 Synchronous
+ 1 Asynchronous
+ 3 unused
+
+<link linkend="requests:UngrabKey"><emphasis role='bold'>UngrabKey</emphasis></link>
+ 1 34 opcode
+ 1 KEYCODE key
+ 0 AnyKey
+ 2 3 request length
+ 4 WINDOW grab-window
+ 2 SETofKEYMASK modifiers
+ #x8000 AnyModifier
+ 2 unused
+
+<link linkend="requests:AllowEvents"><emphasis role='bold'>AllowEvents</emphasis></link>
+ 1 35 opcode
+ 1 mode
+ 0 AsyncPointer
+ 1 SyncPointer
+ 2 ReplayPointer
+ 3 AsyncKeyboard
+ 4 SyncKeyboard
+ 5 ReplayKeyboard
+ 6 AsyncBoth
+ 7 SyncBoth
+ 2 2 request length
+ 4 TIMESTAMP time
+ 0 CurrentTime
+
+<link linkend="requests:GrabServer"><emphasis role='bold'>GrabServer</emphasis></link>
+ 1 36 opcode
+ 1 unused
+ 2 1 request length
+
+<link linkend="requests:UngrabServer"><emphasis role='bold'>UngrabServer</emphasis></link>
+ 1 37 opcode
+ 1 unused
+ 2 1 request length
+
+<link linkend="requests:QueryPointer"><emphasis role='bold'>QueryPointer</emphasis></link>
+ 1 38 opcode
+ 1 unused
+ 2 2 request length
+ 4 WINDOW window
+
+▶
+ 1 1 Reply
+ 1 BOOL same-screen
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 WINDOW root
+ 4 WINDOW child
+ 0 None
+ 2 INT16 root-x
+ 2 INT16 root-y
+ 2 INT16 win-x
+ 2 INT16 win-y
+ 2 SETofKEYBUTMASK mask
+ 6 unused
+
+<link linkend="requests:GetMotionEvents"><emphasis role='bold'>GetMotionEvents</emphasis></link>
+ 1 39 opcode
+ 1 unused
+ 2 4 request length
+ 4 WINDOW window
+ 4 TIMESTAMP start
+ 0 CurrentTime
+ 4 TIMESTAMP stop
+ 0 CurrentTime
+
+▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 2n reply length
+ 4 n number of TIMECOORDs in events
+ 20 unused
+ 8n LISTofTIMECOORD events
+
+ TIMECOORD
+ 4 TIMESTAMP time
+ 2 INT16 x
+ 2 INT16 y
+
+<link linkend="requests:TranslateCoordinates"><emphasis role='bold'>TranslateCoordinates</emphasis></link>
+ 1 40 opcode
+ 1 unused
+ 2 4 request length
+ 4 WINDOW src-window
+ 4 WINDOW dst-window
+ 2 INT16 src-x
+ 2 INT16 src-y
+▶
+ 1 1 Reply
+ 1 BOOL same-screen
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 WINDOW child
+ 0 None
+ 2 INT16 dst-x
+ 2 INT16 dst-y
+ 16 unused
+
+<link linkend="requests:WarpPointer"><emphasis role='bold'>WarpPointer</emphasis></link>
+ 1 41 opcode
+ 1 unused
+ 2 6 request length
+ 4 WINDOW src-window
+ 0 None
+ 4 WINDOW dst-window
+ 0 None
+ 2 INT16 src-x
+ 2 INT16 src-y
+ 2 CARD16 src-width
+ 2 CARD16 src-height
+ 2 INT16 dst-x
+ 2 INT16 dst-y
+
+<link linkend="requests:SetInputFocus"><emphasis role='bold'>SetInputFocus</emphasis></link>
+ 1 42 opcode
+ 1 revert-to
+ 0 None
+ 1 PointerRoot
+ 2 Parent
+ 2 3 request length
+ 4 WINDOW focus
+ 0 None
+ 1 PointerRoot
+ 4 TIMESTAMP time
+ 0 CurrentTime
+
+<link linkend="requests:GetInputFocus"><emphasis role='bold'>GetInputFocus</emphasis></link>
+ 1 43 opcode
+ 1 unused
+ 2 1 request length
+
+▶
+ 1 1 Reply
+ 1 revert-to
+ 0 None
+ 1 PointerRoot
+ 2 Parent
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 WINDOW focus
+ 0 None
+ 1 PointerRoot
+ 20 unused
+
+<link linkend="requests:QueryKeymap"><emphasis role='bold'>QueryKeymap</emphasis></link>
+ 1 44 opcode
+ 1 unused
+ 2 1 request length
+
+▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 2 reply length
+ 32 LISTofCARD8 keys
+
+<link linkend="requests:OpenFont"><emphasis role='bold'>OpenFont</emphasis></link>
+ 1 45 opcode
+ 1 unused
+ 2 3+(n+p)/4 request length
+ 4 FONT fid
+ 2 n length of name
+ 2 unused
+ n STRING8 name
+ p unused, p=pad(n)
+
+<link linkend="requests:CloseFont"><emphasis role='bold'>CloseFont</emphasis></link>
+ 1 46 opcode
+ 1 unused
+ 2 2 request length
+ 4 FONT font
+
+<link linkend="requests:QueryFont"><emphasis role='bold'>QueryFont</emphasis></link>
+ 1 47 opcode
+ 1 unused
+ 2 2 request length
+ 4 FONTABLE font
+
+▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 7+2n+3m reply length
+ 12 CHARINFO min-bounds
+ 4 unused
+ 12 CHARINFO max-bounds
+ 4 unused
+ 2 CARD16 min-char-or-byte2
+ 2 CARD16 max-char-or-byte2
+ 2 CARD16 default-char
+ 2 n number of FONTPROPs in properties
+ 1 draw-direction
+ 0 LeftToRight
+ 1 RightToLeft
+ 1 CARD8 min-byte1
+ 1 CARD8 max-byte1
+ 1 BOOL all-chars-exist
+ 2 INT16 font-ascent
+ 2 INT16 font-descent
+ 4 m number of CHARINFOs in char-infos
+ 8n LISTofFONTPROP properties
+ 12m LISTofCHARINFO char-infos
+
+ FONTPROP
+ 4 ATOM name
+ 4 &lt;32-bits&gt; value
+
+ CHARINFO
+ 2 INT16 left-side-bearing
+ 2 INT16 right-side-bearing
+ 2 INT16 character-width
+ 2 INT16 ascent
+ 2 INT16 descent
+ 2 CARD16 attributes
+
+<link linkend="requests:QueryTextExtents"><emphasis role='bold'>QueryTextExtents</emphasis></link>
+ 1 48 opcode
+ 1 BOOL odd length, True if p = 2
+ 2 2+(2n+p)/4 request length
+ 4 FONTABLE font
+ 2n STRING16 string
+ p unused, p=pad(2n)
+
+▶
+ 1 1 Reply
+ 1 draw-direction
+ 0 LeftToRight
+ 1 RightToLeft
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 2 INT16 font-ascent
+ 2 INT16 font-descent
+ 2 INT16 overall-ascent
+ 2 INT16 overall-descent
+ 4 INT32 overall-width
+ 4 INT32 overall-left
+ 4 INT32 overall-right
+ 4 unused
+
+<link linkend="requests:ListFonts"><emphasis role='bold'>ListFonts</emphasis></link>
+ 1 49 opcode
+ 1 unused
+ 2 2+(n+p)/4 request length
+ 2 CARD16 max-names
+ 2 n length of pattern
+ n STRING8 pattern
+ p unused, p=pad(n)
+
+▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 (n+p)/4 reply length
+ 2 CARD16 number of STRs in names
+ 22 unused
+ n LISTofSTR names
+ p unused, p=pad(n)
+
+<link linkend="requests:ListFontsWithInfo"><emphasis role='bold'>ListFontsWithInfo</emphasis></link>
+ 1 50 opcode
+ 1 unused
+ 2 2+(n+p)/4 request length
+ 2 CARD16 max-names
+ 2 n length of pattern
+ n STRING8 pattern
+ p unused, p=pad(n)
+
+▶ (except for last in series)
+ 1 1 Reply
+ 1 n length of name in bytes
+ 2 CARD16 sequence number
+ 4 7+2m+(n+p)/4 reply length
+ 12 CHARINFO min-bounds
+ 4 unused
+ 12 CHARINFO max-bounds
+ 4 unused
+ 2 CARD16 min-char-or-byte2
+ 2 CARD16 max-char-or-byte2
+ 2 CARD16 default-char
+ 2 m number of FONTPROPs in properties
+ 1 draw-direction
+ 0 LeftToRight
+ 1 RightToLeft
+ 1 CARD8 min-byte1
+ 1 CARD8 max-byte1
+ 1 BOOL all-chars-exist
+ 2 INT16 font-ascent
+ 2 INT16 font-descent
+ 4 CARD32 replies-hint
+ 8m LISTofFONTPROP properties
+ n STRING8 name
+ p unused, p=pad(n)
+
+ FONTPROP
+ encodings are the same as for QueryFont
+
+ CHARINFO
+ encodings are the same as for QueryFont
+
+▶ (last in series)
+ 1 1 Reply
+ 1 0 last-reply indicator
+ 2 CARD16 sequence number
+ 4 7 reply length
+ 52 unused
+
+<link linkend="requests:SetFontPath"><emphasis role='bold'>SetFontPath</emphasis></link>
+ 1 51 opcode
+ 1 unused
+ 2 2+(n+p)/4 request length
+ 2 CARD16 number of STRs in path
+ 2 unused
+ n LISTofSTR path
+ p unused, p=pad(n)
+
+<link linkend="requests:GetFontPath"><emphasis role='bold'>GetFontPath</emphasis></link>
+ 1 52 opcode
+ 1 unused
+ 2 1 request list
+
+▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 (n+p)/4 reply length
+ 2 CARD16 number of STRs in path
+ 22 unused
+ n LISTofSTR path
+ p unused, p=pad(n)
+
+<link linkend="requests:CreatePixmap"><emphasis role='bold'>CreatePixmap</emphasis></link>
+ 1 53 opcode
+ 1 CARD8 depth
+ 2 4 request length
+ 4 PIXMAP pid
+ 4 DRAWABLE drawable
+ 2 CARD16 width
+ 2 CARD16 height
+
+<link linkend="requests:FreePixmap"><emphasis role='bold'>FreePixmap</emphasis></link>
+ 1 54 opcode
+ 1 unused
+ 2 2 request length
+ 4 PIXMAP pixmap
+
+<link linkend="requests:CreateGC"><emphasis role='bold'>CreateGC</emphasis></link>
+ 1 55 opcode
+ 1 unused
+ 2 4+n request length
+ 4 GCONTEXT cid
+ 4 DRAWABLE drawable
+ 4 BITMASK value-mask (has n bits set to 1)
+ #x00000001 function
+ #x00000002 plane-mask
+ #x00000004 foreground
+ #x00000008 background
+ #x00000010 line-width
+ #x00000020 line-style
+ #x00000040 cap-style
+ #x00000080 join-style
+ #x00000100 fill-style
+ #x00000200 fill-rule
+ #x00000400 tile
+ #x00000800 stipple
+ #x00001000 tile-stipple-x-origin
+ #x00002000 tile-stipple-y-origin
+ #x00004000 font
+ #x00008000 subwindow-mode
+ #x00010000 graphics-exposures
+ #x00020000 clip-x-origin
+ #x00040000 clip-y-origin
+ #x00080000 clip-mask
+ #x00100000 dash-offset
+ #x00200000 dashes
+ #x00400000 arc-mode
+ 4n LISTofVALUE value-list
+
+ VALUEs
+ 1 function
+ 0 Clear
+ 1 And
+ 2 AndReverse
+ 3 Copy
+ 4 AndInverted
+ 5 NoOp
+ 6 Xor
+ 7 Or
+ 8 Nor
+ 9 Equiv
+ 10 Invert
+ 11 OrReverse
+ 12 CopyInverted
+ 13 OrInverted
+ 14 Nand
+ 15 Set
+ 4 CARD32 plane-mask
+ 4 CARD32 foreground
+ 4 CARD32 background
+ 2 CARD16 line-width
+ 1 line-style
+ 0 Solid
+ 1 OnOffDash
+ 2 DoubleDash
+ 1 cap-style
+ 0 NotLast
+ 1 Butt
+ 2 Round
+ 3 Projecting
+ 1 join-style
+ 0 Miter
+ 1 Round
+ 2 Bevel
+ 1 fill-style
+ 0 Solid
+ 1 Tiled
+ 2 Stippled
+ 3 OpaqueStippled
+ 1 fill-rule
+ 0 EvenOdd
+ 1 Winding
+ 4 PIXMAP tile
+ 4 PIXMAP stipple
+ 2 INT16 tile-stipple-x-origin
+ 2 INT16 tile-stipple-y-origin
+ 4 FONT font
+ 1 subwindow-mode
+ 0 ClipByChildren
+ 1 IncludeInferiors
+ 1 BOOL graphics-exposures
+ 2 INT16 clip-x-origin
+ 2 INT16 clip-y-origin
+ 4 PIXMAP clip-mask
+ 0 None
+ 2 CARD16 dash-offset
+ 1 CARD8 dashes
+ 1 arc-mode
+ 0 Chord
+ 1 PieSlice
+
+<link linkend="requests:ChangeGC"><emphasis role='bold'>ChangeGC</emphasis></link>
+ 1 56 opcode
+ 1 unused
+ 2 3+n request length
+ 4 GCONTEXT gc
+ 4 BITMASK value-mask (has n bits set to 1)
+ encodings are the same as for CreateGC
+ 4n LISTofVALUE value-list
+ encodings are the same as for CreateGC
+
+<link linkend="requests:CopyGC"><emphasis role='bold'>CopyGC</emphasis></link>
+ 1 57 opcode
+ 1 unused
+ 2 4 request length
+ 4 GCONTEXT src-gc
+ 4 GCONTEXT dst-gc
+ 4 BITMASK value-mask
+ encodings are the same as for CreateGC
+
+<link linkend="requests:SetDashes"><emphasis role='bold'>SetDashes</emphasis></link>
+ 1 58 opcode
+ 1 unused
+ 2 3+(n+p)/4 request length
+ 4 GCONTEXT gc
+ 2 CARD16 dash-offset
+ 2 n length of dashes
+ n LISTofCARD8 dashes
+ p unused, p=pad(n)
+
+<link linkend="requests:SetClipRectangles"><emphasis role='bold'>SetClipRectangles</emphasis></link>
+ 1 59 opcode
+ 1 ordering
+ 0 UnSorted
+ 1 YSorted
+ 2 YXSorted
+ 3 YXBanded
+ 2 3+2n request length
+ 4 GCONTEXT gc
+ 2 INT16 clip-x-origin
+ 2 INT16 clip-y-origin
+ 8n LISTofRECTANGLE rectangles
+
+<link linkend="requests:FreeGC"><emphasis role='bold'>FreeGC</emphasis></link>
+ 1 60 opcode
+ 1 unused
+ 2 2 request length
+ 4 GCONTEXT gc
+
+<link linkend="requests:ClearArea"><emphasis role='bold'>ClearArea</emphasis></link>
+ 1 61 opcode
+ 1 BOOL exposures
+ 2 4 request length
+ 4 WINDOW window
+ 2 INT16 x
+ 2 INT16 y
+ 2 CARD16 width
+ 2 CARD16 height
+
+<link linkend="requests:CopyArea"><emphasis role='bold'>CopyArea</emphasis></link>
+ 1 62 opcode
+ 1 unused
+ 2 7 request length
+ 4 DRAWABLE src-drawable
+ 4 DRAWABLE dst-drawable
+ 4 GCONTEXT gc
+ 2 INT16 src-x
+ 2 INT16 src-y
+ 2 INT16 dst-x
+ 2 INT16 dst-y
+ 2 CARD16 width
+ 2 CARD16 height
+
+<link linkend="requests:CopyPlane"><emphasis role='bold'>CopyPlane</emphasis></link>
+ 1 63 opcode
+ 1 unused
+ 2 8 request length
+ 4 DRAWABLE src-drawable
+ 4 DRAWABLE dst-drawable
+ 4 GCONTEXT gc
+ 2 INT16 src-x
+ 2 INT16 src-y
+ 2 INT16 dst-x
+ 2 INT16 dst-y
+ 2 CARD16 width
+ 2 CARD16 height
+ 4 CARD32 bit-plane
+
+<link linkend="requests:PolyPoint"><emphasis role='bold'>PolyPoint</emphasis></link>
+ 1 64 opcode
+ 1 coordinate-mode
+ 0 Origin
+ 1 Previous
+ 2 3+n request length
+ 4 DRAWABLE drawable
+ 4 GCONTEXT gc
+ 4n LISTofPOINT points
+
+<link linkend="requests:PolyLine"><emphasis role='bold'>PolyLine</emphasis></link>
+ 1 65 opcode
+ 1 coordinate-mode
+ 0 Origin
+ 1 Previous
+ 2 3+n request length
+ 4 DRAWABLE drawable
+ 4 GCONTEXT gc
+ 4n LISTofPOINT points
+
+<link linkend="requests:PolySegment"><emphasis role='bold'>PolySegment</emphasis></link>
+ 1 66 opcode
+ 1 unused
+ 2 3+2n request length
+ 4 DRAWABLE drawable
+ 4 GCONTEXT gc
+ 8n LISTofSEGMENT segments
+
+ SEGMENT
+ 2 INT16 x1
+ 2 INT16 y1
+ 2 INT16 x2
+ 2 INT16 y2
+
+<link linkend="requests:PolyRectangle"><emphasis role='bold'>PolyRectangle</emphasis></link>
+ 1 67 opcode
+ 1 unused
+ 2 3+2n request length
+ 4 DRAWABLE drawable
+ 4 GCONTEXT gc
+ 8n LISTofRECTANGLE rectangles
+
+<link linkend="requests:PolyArc"><emphasis role='bold'>PolyArc</emphasis></link>
+ 1 68 opcode
+ 1 unused
+ 2 3+3n request length
+ 4 DRAWABLE drawable
+ 4 GCONTEXT gc
+ 12n LISTofARC arcs
+
+<link linkend="requests:FillPoly"><emphasis role='bold'>FillPoly</emphasis></link>
+ 1 69 opcode
+ 1 unused
+ 2 4+n request length
+ 4 DRAWABLE drawable
+ 4 GCONTEXT gc
+ 1 shape
+ 0 Complex
+ 1 Nonconvex
+ 2 Convex
+ 1 coordinate-mode
+ 0 Origin
+ 1 Previous
+ 2 unused
+ 4n LISTofPOINT points
+
+<link linkend="requests:PolyFillRectangle"><emphasis role='bold'>PolyFillRectangle</emphasis></link>
+ 1 70 opcode
+ 1 unused
+ 2 3+2n request length
+ 4 DRAWABLE drawable
+ 4 GCONTEXT gc
+ 8n LISTofRECTANGLE rectangles
+
+<link linkend="requests:PolyFillArc"><emphasis role='bold'>PolyFillArc</emphasis></link>
+ 1 71 opcode
+ 1 unused
+ 2 3+3n request length
+ 4 DRAWABLE drawable
+ 4 GCONTEXT gc
+ 12n LISTofARC arcs
+
+<link linkend="requests:PutImage"><emphasis role='bold'>PutImage</emphasis></link>
+ 1 72 opcode
+ 1 format
+ 0 Bitmap
+ 1 XYPixmap
+ 2 ZPixmap
+ 2 6+(n+p)/4 request length
+ 4 DRAWABLE drawable
+ 4 GCONTEXT gc
+ 2 CARD16 width
+ 2 CARD16 height
+ 2 INT16 dst-x
+ 2 INT16 dst-y
+ 1 CARD8 left-pad
+ 1 CARD8 depth
+ 2 unused
+ n LISTofBYTE data
+ p unused, p=pad(n)
+
+<link linkend="requests:GetImage"><emphasis role='bold'>GetImage</emphasis></link>
+ 1 73 opcode
+ 1 format
+ 1 XYPixmap
+ 2 ZPixmap
+ 2 5 request length
+ 4 DRAWABLE drawable
+ 2 INT16 x
+ 2 INT16 y
+ 2 CARD16 width
+ 2 CARD16 height
+ 4 CARD32 plane-mask
+
+▶
+ 1 1 Reply
+ 1 CARD8 depth
+ 2 CARD16 sequence number
+ 4 (n+p)/4 reply length
+ 4 VISUALID visual
+ 0 None
+ 20 unused
+ n LISTofBYTE data
+ p unused, p=pad(n)
+
+<link linkend="requests:PolyText8"><emphasis role='bold'>PolyText8</emphasis></link>
+ 1 74 opcode
+ 1 unused
+ 2 4+(n+p)/4 request length
+ 4 DRAWABLE drawable
+ 4 GCONTEXT gc
+ 2 INT16 x
+ 2 INT16 y
+ n LISTofTEXTITEM8 items
+ p unused, p=pad(n) (p is always 0
+ or 1)
+
+ TEXTITEM8
+ 1 m length of string (cannot be 255)
+ 1 INT8 delta
+ m STRING8 string
+ or
+ 1 255 font-shift indicator
+ 1 font byte 3 (most-significant)
+ 1 font byte 2
+ 1 font byte 1
+ 1 font byte 0 (least-significant)
+
+<link linkend="requests:PolyText16"><emphasis role='bold'>PolyText16</emphasis></link>
+ 1 75 opcode
+ 1 unused
+ 2 4+(n+p)/4 request length
+ 4 DRAWABLE drawable
+ 4 GCONTEXT gc
+ 2 INT16 x
+ 2 INT16 y
+ n LISTofTEXTITEM16 items
+ p unused, p=pad(n) (p must be 0 or
+ 1)
+
+ TEXTITEM16
+ 1 m number of CHAR2Bs in string
+ (cannot be 255)
+ 1 INT8 delta
+ 2m STRING16 string
+ or
+ 1 255 font-shift indicator
+ 1 font byte 3 (most-significant)
+ 1 font byte 2
+ 1 font byte 1
+ 1 font byte 0 (least-significant)
+
+<link linkend="requests:ImageText8"><emphasis role='bold'>ImageText8</emphasis></link>
+ 1 76 opcode
+ 1 n length of string
+ 2 4+(n+p)/4 request length
+ 4 DRAWABLE drawable
+ 4 GCONTEXT gc
+ 2 INT16 x
+ 2 INT16 y
+ n STRING8 string
+ p unused, p=pad(n)
+
+<link linkend="requests:ImageText16"><emphasis role='bold'>ImageText16</emphasis></link>
+ 1 77 opcode
+ 1 n number of CHAR2Bs in string
+ 2 4+(2n+p)/4 request length
+ 4 DRAWABLE drawable
+ 4 GCONTEXT gc
+ 2 INT16 x
+ 2 INT16 y
+ 2n STRING16 string
+ p unused, p=pad(2n)
+
+<link linkend="requests:CreateColormap"><emphasis role='bold'>CreateColormap</emphasis></link>
+ 1 78 opcode
+ 1 alloc
+ 0 None
+ 1 All
+ 2 4 request length
+ 4 COLORMAP mid
+ 4 WINDOW window
+ 4 VISUALID visual
+
+<link linkend="requests:FreeColormap"><emphasis role='bold'>FreeColormap</emphasis></link>
+ 1 79 opcode
+ 1 unused
+ 2 2 request length
+ 4 COLORMAP cmap
+
+<link linkend="requests:CopyColormapAndFree"><emphasis role='bold'>CopyColormapAndFree</emphasis></link>
+ 1 80 opcode
+ 1 unused
+ 2 3 request length
+ 4 COLORMAP mid
+ 4 COLORMAP src-cmap
+
+<link linkend="requests:InstallColormap"><emphasis role='bold'>InstallColormap</emphasis></link>
+ 1 81 opcode
+ 1 unused
+ 2 2 request length
+ 4 COLORMAP cmap
+
+<link linkend="requests:UninstallColormap"><emphasis role='bold'>UninstallColormap</emphasis></link>
+ 1 82 opcode
+ 1 unused
+ 2 2 request length
+ 4 COLORMAP cmap
+
+<link linkend="requests:ListInstalledColormaps"><emphasis role='bold'>ListInstalledColormaps</emphasis></link>
+ 1 83 opcode
+ 1 unused
+ 2 2 request length
+ 4 WINDOW window
+
+▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 n reply length
+ 2 n number of COLORMAPs in cmaps
+ 22 unused
+ 4n LISTofCOLORMAP cmaps
+
+<link linkend="requests:AllocColor"><emphasis role='bold'>AllocColor</emphasis></link>
+ 1 84 opcode
+ 1 unused
+ 2 4 request length
+ 4 COLORMAP cmap
+ 2 CARD16 red
+ 2 CARD16 green
+ 2 CARD16 blue
+ 2 unused
+
+▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 2 CARD16 red
+ 2 CARD16 green
+ 2 CARD16 blue
+ 2 unused
+ 4 CARD32 pixel
+ 12 unused
+
+<link linkend="requests:AllocNamedColor"><emphasis role='bold'>AllocNamedColor</emphasis></link>
+ 1 85 opcode
+ 1 unused
+ 2 3+(n+p)/4 request length
+ 4 COLORMAP cmap
+ 2 n length of name
+ 2 unused
+ n STRING8 name
+ p unused, p=pad(n)
+
+▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 CARD32 pixel
+ 2 CARD16 exact-red
+ 2 CARD16 exact-green
+ 2 CARD16 exact-blue
+ 2 CARD16 visual-red
+ 2 CARD16 visual-green
+ 2 CARD16 visual-blue
+ 8 unused
+
+<link linkend="requests:AllocColorCells"><emphasis role='bold'>AllocColorCells</emphasis></link>
+ 1 86 opcode
+ 1 BOOL contiguous
+ 2 3 request length
+ 4 COLORMAP cmap
+ 2 CARD16 colors
+ 2 CARD16 planes
+
+▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 n+m reply length
+ 2 n number of CARD32s in pixels
+ 2 m number of CARD32s in masks
+ 20 unused
+ 4n LISTofCARD32 pixels
+ 4m LISTofCARD32 masks
+
+<link linkend="requests:AllocColorPlanes"><emphasis role='bold'>AllocColorPlanes</emphasis></link>
+ 1 87 opcode
+ 1 BOOL contiguous
+ 2 4 request length
+ 4 COLORMAP cmap
+ 2 CARD16 colors
+ 2 CARD16 reds
+ 2 CARD16 greens
+ 2 CARD16 blues
+
+▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 n reply length
+ 2 n number of CARD32s in pixels
+ 2 unused
+ 4 CARD32 red-mask
+ 4 CARD32 green-mask
+ 4 CARD32 blue-mask
+ 8 unused
+ 4n LISTofCARD32 pixels
+
+<link linkend="requests:FreeColors"><emphasis role='bold'>FreeColors</emphasis></link>
+ 1 88 opcode
+ 1 unused
+ 2 3+n request length
+ 4 COLORMAP cmap
+ 4 CARD32 plane-mask
+ 4n LISTofCARD32 pixels
+
+<link linkend="requests:StoreColors"><emphasis role='bold'>StoreColors</emphasis></link>
+ 1 89 opcode
+ 1 unused
+ 2 2+3n request length
+ 4 COLORMAP cmap
+ 12n LISTofCOLORITEM items
+
+ COLORITEM
+ 4 CARD32 pixel
+ 2 CARD16 red
+ 2 CARD16 green
+ 2 CARD16 blue
+ 1 do-red, do-green, do-blue
+ #x01 do-red (1 is True, 0 is False)
+ #x02 do-green (1 is True, 0 is False)
+ #x04 do-blue (1 is True, 0 is False)
+ #xF8 unused
+ 1 unused
+
+<link linkend="requests:StoreNamedColor"><emphasis role='bold'>StoreNamedColor</emphasis></link>
+ 1 90 opcode
+ 1 do-red, do-green, do-blue
+ #x01 do-red (1 is True, 0 is False)
+ #x02 do-green (1 is True, 0 is False)
+ #x04 do-blue (1 is True, 0 is False)
+ #xF8 unused
+ 2 4+(n+p)/4 request length
+ 4 COLORMAP cmap
+ 4 CARD32 pixel
+ 2 n length of name
+ 2 unused
+ n STRING8 name
+ p unused, p=pad(n)
+
+<link linkend="requests:QueryColors"><emphasis role='bold'>QueryColors</emphasis></link>
+ 1 91 opcode
+ 1 unused
+ 2 2+n request length
+ 4 COLORMAP cmap
+ 4n LISTofCARD32 pixels
+
+▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 2n reply length
+ 2 n number of RGBs in colors
+ 22 unused
+ 8n LISTofRGB colors
+
+ RGB
+ 2 CARD16 red
+ 2 CARD16 green
+ 2 CARD16 blue
+ 2 unused
+
+<link linkend="requests:LookupColor"><emphasis role='bold'>LookupColor</emphasis></link>
+ 1 92 opcode
+ 1 unused
+ 2 3+(n+p)/4 request length
+ 4 COLORMAP cmap
+ 2 n length of name
+ 2 unused
+ n STRING8 name
+ p unused, p=pad(n)
+
+▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 2 CARD16 exact-red
+ 2 CARD16 exact-green
+ 2 CARD16 exact-blue
+ 2 CARD16 visual-red
+ 2 CARD16 visual-green
+ 2 CARD16 visual-blue
+ 12 unused
+
+<link linkend="requests:CreateCursor"><emphasis role='bold'>CreateCursor</emphasis></link>
+ 1 93 opcode
+ 1 unused
+ 2 8 request length
+ 4 CURSOR cid
+ 4 PIXMAP source
+ 4 PIXMAP mask
+ 0 None
+ 2 CARD16 fore-red
+ 2 CARD16 fore-green
+ 2 CARD16 fore-blue
+ 2 CARD16 back-red
+ 2 CARD16 back-green
+ 2 CARD16 back-blue
+ 2 CARD16 x
+ 2 CARD16 y
+
+<link linkend="requests:CreateGlyphCursor"><emphasis role='bold'>CreateGlyphCursor</emphasis></link>
+ 1 94 opcode
+ 1 unused
+ 2 8 request length
+ 4 CURSOR cid
+ 4 FONT source-font
+ 4 FONT mask-font
+ 0 None
+ 2 CARD16 source-char
+ 2 CARD16 mask-char
+ 2 CARD16 fore-red
+ 2 CARD16 fore-green
+ 2 CARD16 fore-blue
+ 2 CARD16 back-red
+ 2 CARD16 back-green
+ 2 CARD16 back-blue
+
+<link linkend="requests:FreeCursor"><emphasis role='bold'>FreeCursor</emphasis></link>
+ 1 95 opcode
+ 1 unused
+ 2 2 request length
+ 4 CURSOR cursor
+
+<link linkend="requests:RecolorCursor"><emphasis role='bold'>RecolorCursor</emphasis></link>
+ 1 96 opcode
+ 1 unused
+ 2 5 request length
+ 4 CURSOR cursor
+ 2 CARD16 fore-red
+ 2 CARD16 fore-green
+ 2 CARD16 fore-blue
+ 2 CARD16 back-red
+ 2 CARD16 back-green
+ 2 CARD16 back-blue
+
+<link linkend="requests:QueryBestSize"><emphasis role='bold'>QueryBestSize</emphasis></link>
+ 1 97 opcode
+ 1 class
+ 0 Cursor
+ 1 Tile
+ 2 Stipple
+ 2 3 request length
+ 4 DRAWABLE drawable
+ 2 CARD16 width
+ 2 CARD16 height
+
+▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 2 CARD16 width
+ 2 CARD16 height
+ 20 unused
+
+<link linkend="requests:QueryExtension"><emphasis role='bold'>QueryExtension</emphasis></link>
+ 1 98 opcode
+ 1 unused
+ 2 2+(n+p)/4 request length
+ 2 n length of name
+ 2 unused
+ n STRING8 name
+ p unused, p=pad(n)
+
+▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 1 BOOL present
+ 1 CARD8 major-opcode
+ 1 CARD8 first-event
+ 1 CARD8 first-error
+ 20 unused
+
+<link linkend="requests:ListExtensions"><emphasis role='bold'>ListExtensions</emphasis></link>
+ 1 99 opcode
+ 1 unused
+ 2 1 request length
+
+▶
+ 1 1 Reply
+ 1 CARD8 number of STRs in names
+ 2 CARD16 sequence number
+ 4 (n+p)/4 reply length
+ 24 unused
+ n LISTofSTR names
+ p unused, p=pad(n)
+
+<link linkend="requests:ChangeKeyboardMapping"><emphasis role='bold'>ChangeKeyboardMapping</emphasis></link>
+ 1 100 opcode
+ 1 n keycode-count
+ 2 2+nm request length
+ 1 KEYCODE first-keycode
+ 1 m keysyms-per-keycode
+ 2 unused
+ 4nm LISTofKEYSYM keysyms
+
+<link linkend="requests:GetKeyboardMapping"><emphasis role='bold'>GetKeyboardMapping</emphasis></link>
+ 1 101 opcode
+ 1 unused
+ 2 2 request length
+ 1 KEYCODE first-keycode
+ 1 m count
+ 2 unused
+
+▶
+ 1 1 Reply
+ 1 n keysyms-per-keycode
+ 2 CARD16 sequence number
+ 4 nm reply length (m = count field
+ from the request)
+ 24 unused
+ 4nm LISTofKEYSYM keysyms
+
+<link linkend="requests:ChangeKeyboardControl"><emphasis role='bold'>ChangeKeyboardControl</emphasis></link>
+ 1 102 opcode
+ 1 unused
+ 2 2+n request length
+ 4 BITMASK value-mask (has n bits set to 1)
+ #x0001 key-click-percent
+ #x0002 bell-percent
+ #x0004 bell-pitch
+ #x0008 bell-duration
+ #x0010 led
+ #x0020 led-mode
+ #x0040 key
+ #x0080 auto-repeat-mode
+ 4n LISTofVALUE value-list
+
+ VALUEs
+ 1 INT8 key-click-percent
+ 1 INT8 bell-percent
+ 2 INT16 bell-pitch
+ 2 INT16 bell-duration
+ 1 CARD8 led
+ 1 led-mode
+ 0 Off
+ 1 On
+ 1 KEYCODE key
+ 1 auto-repeat-mode
+ 0 Off
+ 1 On
+ 2 Default
+
+<link linkend="requests:GetKeyboardControl"><emphasis role='bold'>GetKeyboardControl</emphasis></link>
+ 1 103 opcode
+ 1 unused
+ 2 1 request length
+
+▶
+ 1 1 Reply
+ 1 global-auto-repeat
+ 0 Off
+ 1 On
+ 2 CARD16 sequence number
+ 4 5 reply length
+ 4 CARD32 led-mask
+ 1 CARD8 key-click-percent
+ 1 CARD8 bell-percent
+ 2 CARD16 bell-pitch
+ 2 CARD16 bell-duration
+ 2 unused
+ 32 LISTofCARD8 auto-repeats
+
+<link linkend="requests:Bell"><emphasis role='bold'>Bell</emphasis></link>
+ 1 104 opcode
+ 1 INT8 percent
+ 2 1 request length
+
+<link linkend="requests:ChangePointerControl"><emphasis role='bold'>ChangePointerControl</emphasis></link>
+ 1 105 opcode
+ 1 unused
+ 2 3 request length
+ 2 INT16 acceleration-numerator
+ 2 INT16 acceleration-denominator
+ 2 INT16 threshold
+ 1 BOOL do-acceleration
+ 1 BOOL do-threshold
+
+<link linkend="requests:GetPointerControl"><emphasis role='bold'>GetPointerControl</emphasis></link>
+ 1 106 opcode
+ 1 unused
+ 2 1 request length
+
+▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 2 CARD16 acceleration-numerator
+ 2 CARD16 acceleration-denominator
+ 2 CARD16 threshold
+ 18 unused
+
+<link linkend="requests:SetScreenSaver"><emphasis role='bold'>SetScreenSaver</emphasis></link>
+ 1 107 opcode
+ 1 unused
+ 2 3 request length
+ 2 INT16 timeout
+ 2 INT16 interval
+ 1 prefer-blanking
+ 0 No
+ 1 Yes
+ 2 Default
+ 1 allow-exposures
+ 0 No
+ 1 Yes
+ 2 Default
+ 2 unused
+
+<link linkend="requests:GetScreenSaver"><emphasis role='bold'>GetScreenSaver</emphasis></link>
+ 1 108 opcode
+ 1 unused
+ 2 1 request length
+
+▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 2 CARD16 timeout
+ 2 CARD16 interval
+ 1 prefer-blanking
+ 0 No
+ 1 Yes
+ 1 allow-exposures
+ 0 No
+ 1 Yes
+ 18 unused
+
+<link linkend="requests:ChangeHosts"><emphasis role='bold'>ChangeHosts</emphasis></link>
+ 1 109 opcode
+ 1 mode
+ 0 Insert
+ 1 Delete
+ 2 2+(n+p)/4 request length
+ 1 family
+ 0 Internet
+ 1 DECnet
+ 2 Chaos
+ 1 unused
+ 2 n length of address
+ n LISTofCARD8 address
+ p unused, p=pad(n)
+
+<link linkend="requests:ListHosts"><emphasis role='bold'>ListHosts</emphasis></link>
+ 1 110 opcode
+ 1 unused
+ 2 1 request length
+
+▶
+ 1 1 Reply
+ 1 mode
+ 0 Disabled
+ 1 Enabled
+ 2 CARD16 sequence number
+ 4 n/4 reply length
+ 2 CARD16 number of HOSTs in hosts
+ 22 unused
+ n LISTofHOST hosts (n always a multiple of 4)
+
+<link linkend="requests:SetAccessControl"><emphasis role='bold'>SetAccessControl</emphasis></link>
+ 1 111 opcode
+ 1 mode
+ 0 Disable
+ 1 Enable
+ 2 1 request length
+
+<link linkend="requests:SetCloseDownMode"><emphasis role='bold'>SetCloseDownMode</emphasis></link>
+ 1 112 opcode
+ 1 mode
+ 0 Destroy
+ 1 RetainPermanent
+ 2 RetainTemporary
+ 2 1 request length
+
+<link linkend="requests:KillClient"><emphasis role='bold'>KillClient</emphasis></link>
+ 1 113 opcode
+ 1 unused
+ 2 2 request length
+ 4 CARD32 resource
+ 0 AllTemporary
+
+<link linkend="requests:RotateProperties"><emphasis role='bold'>RotateProperties</emphasis></link>
+ 1 114 opcode
+ 1 unused
+ 2 3+n request length
+ 4 WINDOW window
+ 2 n number of properties
+ 2 INT16 delta
+ 4n LISTofATOM properties
+
+<link linkend="requests:ForceScreenSaver"><emphasis role='bold'>ForceScreenSaver</emphasis></link>
+ 1 115 opcode
+ 1 mode
+ 0 Reset
+ 1 Activate
+ 2 1 request length
+
+<link linkend="requests:SetPointerMapping"><emphasis role='bold'>SetPointerMapping</emphasis></link>
+ 1 116 opcode
+ 1 n length of map
+ 2 1+(n+p)/4 request length
+ n LISTofCARD8 map
+ p unused, p=pad(n)
+
+▶
+ 1 1 Reply
+ 1 status
+ 0 Success
+ 1 Busy
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 24 unused
+
+<link linkend="requests:GetPointerMapping"><emphasis role='bold'>GetPointerMapping</emphasis></link>
+ 1 117 opcode
+ 1 unused
+ 2 1 request length
+
+▶
+ 1 1 Reply
+ 1 n length of map
+ 2 CARD16 sequence number
+ 4 (n+p)/4 reply length
+ 24 unused
+ n LISTofCARD8 map
+ p unused, p=pad(n)
+
+<link linkend="requests:SetModifierMapping"><emphasis role='bold'>SetModifierMapping</emphasis></link>
+ 1 118 opcode
+ 1 n keycodes-per-modifier
+ 2 1+2n request length
+ 8n LISTofKEYCODE keycodes
+
+▶
+ 1 1 Reply
+ 1 status
+ 0 Success
+ 1 Busy
+ 2 Failed
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 24 unused
+
+<link linkend="requests:GetModifierMapping"><emphasis role='bold'>GetModifierMapping</emphasis></link>
+ 1 119 opcode
+ 1 unused
+ 2 1 request length
+
+▶
+ 1 1 Reply
+ 1 n keycodes-per-modifier
+ 2 CARD16 sequence number
+ 4 2n reply length
+ 24 unused
+ 8n LISTofKEYCODE keycodes
+
+<link linkend="requests:NoOperation"><emphasis role='bold'>NoOperation</emphasis></link>
+ 1 127 opcode
+ 1 unused
+ 2 1+n request length
+ 4n unused
+</literallayout>
+</sect1>
+
+<sect1 id='Encoding::Events'>
+<title>Events</title>
+<indexterm zone="Encoding::Events"><primary>Event</primary><secondary>encoding</secondary></indexterm>
+
+<literallayout class="monospaced">
+<link linkend="events:KeyPress"><emphasis role='bold'>KeyPress</emphasis></link>
+ 1 2 code
+ 1 KEYCODE detail
+ 2 CARD16 sequence number
+ 4 TIMESTAMP time
+ 4 WINDOW root
+ 4 WINDOW event
+ 4 WINDOW child
+ 0 None
+ 2 INT16 root-x
+ 2 INT16 root-y
+ 2 INT16 event-x
+ 2 INT16 event-y
+ 2 SETofKEYBUTMASK state
+ 1 BOOL same-screen
+ 1 unused
+
+<link linkend="events:KeyRelease"><emphasis role='bold'>KeyRelease</emphasis></link>
+ 1 3 code
+ 1 KEYCODE detail
+ 2 CARD16 sequence number
+ 4 TIMESTAMP time
+ 4 WINDOW root
+ 4 WINDOW event
+ 4 WINDOW child
+ 0 None
+ 2 INT16 root-x
+ 2 INT16 root-y
+ 2 INT16 event-x
+ 2 INT16 event-y
+ 2 SETofKEYBUTMASK state
+ 1 BOOL same-screen
+ 1 unused
+
+<link linkend="events:ButtonPress"><emphasis role='bold'>ButtonPress</emphasis></link>
+ 1 4 code
+ 1 BUTTON detail
+ 2 CARD16 sequence number
+ 4 TIMESTAMP time
+ 4 WINDOW root
+ 4 WINDOW event
+ 4 WINDOW child
+ 0 None
+ 2 INT16 root-x
+ 2 INT16 root-y
+ 2 INT16 event-x
+ 2 INT16 event-y
+ 2 SETofKEYBUTMASK state
+ 1 BOOL same-screen
+ 1 unused
+
+<link linkend="events:ButtonRelease"><emphasis role='bold'>ButtonRelease</emphasis></link>
+ 1 5 code
+ 1 BUTTON detail
+ 2 CARD16 sequence number
+ 4 TIMESTAMP time
+ 4 WINDOW root
+ 4 WINDOW event
+ 4 WINDOW child
+ 0 None
+ 2 INT16 root-x
+ 2 INT16 root-y
+ 2 INT16 event-x
+ 2 INT16 event-y
+ 2 SETofKEYBUTMASK state
+ 1 BOOL same-screen
+ 1 unused
+
+<link linkend="events:MotionNotify"><emphasis role='bold'>MotionNotify</emphasis></link>
+ 1 6 code
+ 1 detail
+ 0 Normal
+ 1 Hint
+ 2 CARD16 sequence number
+ 4 TIMESTAMP time
+ 4 WINDOW root
+ 4 WINDOW event
+ 4 WINDOW child
+ 0 None
+ 2 INT16 root-x
+ 2 INT16 root-y
+ 2 INT16 event-x
+ 2 INT16 event-y
+ 2 SETofKEYBUTMASK state
+ 1 BOOL same-screen
+ 1 unused
+
+<link linkend="events:EnterNotify"><emphasis role='bold'>EnterNotify</emphasis></link>
+ 1 7 code
+ 1 detail
+ 0 Ancestor
+ 1 Virtual
+ 2 Inferior
+ 3 Nonlinear
+ 4 NonlinearVirtual
+ 2 CARD16 sequence number
+ 4 TIMESTAMP time
+ 4 WINDOW root
+ 4 WINDOW event
+ 4 WINDOW child
+ 0 None
+ 2 INT16 root-x
+ 2 INT16 root-y
+ 2 INT16 event-x
+ 2 INT16 event-y
+ 2 SETofKEYBUTMASK state
+ 1 mode
+ 0 Normal
+ 1 Grab
+ 2 Ungrab
+ 1 same-screen, focus
+ #x01 focus (1 is True, 0 is False)
+ #x02 same-screen (1 is True, 0 is False)
+ #xFC unused
+
+<link linkend="events:LeaveNotify"><emphasis role='bold'>LeaveNotify</emphasis></link>
+ 1 8 code
+ 1 detail
+ 0 Ancestor
+ 1 Virtual
+ 2 Inferior
+ 3 Nonlinear
+ 4 NonlinearVirtual
+ 2 CARD16 sequence number
+ 4 TIMESTAMP time
+ 4 WINDOW root
+ 4 WINDOW event
+ 4 WINDOW child
+ 0 None
+ 2 INT16 root-x
+ 2 INT16 root-y
+ 2 INT16 event-x
+ 2 INT16 event-y
+ 2 SETofKEYBUTMASK state
+ 1 mode
+ 0 Normal
+ 1 Grab
+ 2 Ungrab
+ 1 same-screen, focus
+ #x01 focus (1 is True, 0 is False)
+ #x02 same-screen (1 is True, 0 is False)
+ #xFC unused
+
+<link linkend="events:FocusIn"><emphasis role='bold'>FocusIn</emphasis></link>
+ 1 9 code
+ 1 detail
+ 0 Ancestor
+ 1 Virtual
+ 2 Inferior
+ 3 Nonlinear
+ 4 NonlinearVirtual
+ 5 Pointer
+ 6 PointerRoot
+ 7 None
+ 2 CARD16 sequence number
+ 4 WINDOW event
+ 1 mode
+ 0 Normal
+ 1 Grab
+ 2 Ungrab
+ 3 WhileGrabbed
+ 23 unused
+
+<link linkend="events:FocusOut"><emphasis role='bold'>FocusOut</emphasis></link>
+ 1 10 code
+ 1 detail
+ 0 Ancestor
+ 1 Virtual
+ 2 Inferior
+ 3 Nonlinear
+ 4 NonlinearVirtual
+ 5 Pointer
+ 6 PointerRoot
+ 7 None
+ 2 CARD16 sequence number
+ 4 WINDOW event
+ 1 mode
+ 0 Normal
+ 1 Grab
+ 2 Ungrab
+ 3 WhileGrabbed
+ 23 unused
+
+<link linkend="events:KeymapNotify"><emphasis role='bold'>KeymapNotify</emphasis></link>
+ 1 11 code
+ 31 LISTofCARD8 keys (byte for keycodes 0-7 is
+ omitted)
+
+<link linkend="events:Expose"><emphasis role='bold'>Expose</emphasis></link>
+ 1 12 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 WINDOW window
+ 2 CARD16 x
+ 2 CARD16 y
+ 2 CARD16 width
+ 2 CARD16 height
+ 2 CARD16 count
+ 14 unused
+
+<link linkend="events:GraphicsExposure"><emphasis role='bold'>GraphicsExposure</emphasis></link>
+ 1 13 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 DRAWABLE drawable
+ 2 CARD16 x
+ 2 CARD16 y
+ 2 CARD16 width
+ 2 CARD16 height
+ 2 CARD16 minor-opcode
+ 2 CARD16 count
+ 1 CARD8 major-opcode
+ 11 unused
+
+<link linkend="events:NoExposure"><emphasis role='bold'>NoExposure</emphasis></link>
+ 1 14 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 DRAWABLE drawable
+ 2 CARD16 minor-opcode
+ 1 CARD8 major-opcode
+ 21 unused
+
+<link linkend="events:VisibilityNotify"><emphasis role='bold'>VisibilityNotify</emphasis></link>
+ 1 15 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 WINDOW window
+ 1 state
+ 0 Unobscured
+ 1 PartiallyObscured
+ 2 FullyObscured
+ 23 unused
+
+<link linkend="events:CreateNotify"><emphasis role='bold'>CreateNotify</emphasis></link>
+ 1 16 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 WINDOW parent
+ 4 WINDOW window
+ 2 INT16 x
+ 2 INT16 y
+ 2 CARD16 width
+ 2 CARD16 height
+ 2 CARD16 border-width
+ 1 BOOL override-redirect
+ 9 unused
+
+<link linkend="events:DestroyNotify"><emphasis role='bold'>DestroyNotify</emphasis></link>
+ 1 17 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 WINDOW event
+ 4 WINDOW window
+ 20 unused
+
+<link linkend="events:UnmapNotify"><emphasis role='bold'>UnmapNotify</emphasis></link>
+ 1 18 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 WINDOW event
+ 4 WINDOW window
+ 1 BOOL from-configure
+ 19 unused
+
+<link linkend="events:MapNotify"><emphasis role='bold'>MapNotify</emphasis></link>
+ 1 19 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 WINDOW event
+ 4 WINDOW window
+ 1 BOOL override-redirect
+ 19 unused
+
+<link linkend="events:MapRequest"><emphasis role='bold'>MapRequest</emphasis></link>
+ 1 20 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 WINDOW parent
+ 4 WINDOW window
+ 20 unused
+
+<link linkend="events:ReparentNotify"><emphasis role='bold'>ReparentNotify</emphasis></link>
+ 1 21 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 WINDOW event
+ 4 WINDOW window
+ 4 WINDOW parent
+ 2 INT16 x
+ 2 INT16 y
+ 1 BOOL override-redirect
+ 11 unused
+
+<link linkend="events:ConfigureNotify"><emphasis role='bold'>ConfigureNotify</emphasis></link>
+ 1 22 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 WINDOW event
+ 4 WINDOW window
+ 4 WINDOW above-sibling
+ 0 None
+ 2 INT16 x
+ 2 INT16 y
+ 2 CARD16 width
+ 2 CARD16 height
+ 2 CARD16 border-width
+ 1 BOOL override-redirect
+ 5 unused
+
+<link linkend="events:ConfigureRequest"><emphasis role='bold'>ConfigureRequest</emphasis></link>
+ 1 23 code
+ 1 stack-mode
+ 0 Above
+ 1 Below
+ 2 TopIf
+ 3 BottomIf
+ 4 Opposite
+ 2 CARD16 sequence number
+ 4 WINDOW parent
+ 4 WINDOW window
+ 4 WINDOW sibling
+ 0 None
+ 2 INT16 x
+ 2 INT16 y
+ 2 CARD16 width
+ 2 CARD16 height
+ 2 CARD16 border-width
+ 2 BITMASK value-mask
+ #x0001 x
+ #x0002 y
+ #x0004 width
+ #x0008 height
+ #x0010 border-width
+ #x0020 sibling
+ #x0040 stack-mode
+ 4 unused
+
+<link linkend="events:GravityNotify"><emphasis role='bold'>GravityNotify</emphasis></link>
+ 1 24 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 WINDOW event
+ 4 WINDOW window
+ 2 INT16 x
+ 2 INT16 y
+ 16 unused
+
+<link linkend="events:ResizeRequest"><emphasis role='bold'>ResizeRequest</emphasis></link>
+ 1 25 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 WINDOW window
+ 2 CARD16 width
+ 2 CARD16 height
+ 20 unused
+
+<link linkend="events:CirculateNotify"><emphasis role='bold'>CirculateNotify</emphasis></link>
+ 1 26 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 WINDOW event
+ 4 WINDOW window
+ 4 WINDOW unused
+ 1 place
+ 0 Top
+ 1 Bottom
+ 15 unused
+
+<link linkend="events:CirculateRequest"><emphasis role='bold'>CirculateRequest</emphasis></link>
+ 1 27 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 WINDOW parent
+ 4 WINDOW window
+ 4 unused
+ 1 place
+ 0 Top
+ 1 Bottom
+ 15 unused
+
+<link linkend="events:PropertyNotify"><emphasis role='bold'>PropertyNotify</emphasis></link>
+ 1 28 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 WINDOW window
+ 4 ATOM atom
+ 4 TIMESTAMP time
+ 1 state
+ 0 NewValue
+ 1 Deleted
+ 15 unused
+
+<link linkend="events:SelectionClear"><emphasis role='bold'>SelectionClear</emphasis></link>
+ 1 29 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 TIMESTAMP time
+ 4 WINDOW owner
+ 4 ATOM selection
+ 16 unused
+
+<link linkend="events:SelectionRequest"><emphasis role='bold'>SelectionRequest</emphasis></link>
+ 1 30 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 TIMESTAMP time
+ 0 CurrentTime
+ 4 WINDOW owner
+ 4 WINDOW requestor
+ 4 ATOM selection
+ 4 ATOM target
+ 4 ATOM property
+ 0 None
+ 4 unused
+
+<link linkend="events:SelectionNotify"><emphasis role='bold'>SelectionNotify</emphasis></link>
+ 1 31 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 TIMESTAMP time
+ 0 CurrentTime
+ 4 WINDOW requestor
+ 4 ATOM selection
+ 4 ATOM target
+ 4 ATOM property
+ 0 None
+ 8 unused
+
+<link linkend="events:ColormapNotify"><emphasis role='bold'>ColormapNotify</emphasis></link>
+ 1 32 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 WINDOW window
+ 4 COLORMAP colormap
+ 0 None
+ 1 BOOL new
+ 1 state
+ 0 Uninstalled
+ 1 Installed
+ 18 unused
+
+<link linkend="events:ClientMessage"><emphasis role='bold'>ClientMessage</emphasis></link>
+ 1 33 code
+ 1 CARD8 format
+ 2 CARD16 sequence number
+ 4 WINDOW window
+ 4 ATOM type
+ 20 data
+
+<link linkend="events:MappingNotify"><emphasis role='bold'>MappingNotify</emphasis></link>
+ 1 34 code
+ 1 unused
+ 2 CARD16 sequence number
+ 1 request
+ 0 Modifier
+ 1 Keyboard
+ 2 Pointer
+ 1 KEYCODE first-keycode
+ 1 CARD8 count
+ 25 unused
+</literallayout>
+
+</sect1>
+</appendix>
diff --git a/specs/glossary.xml b/specs/glossary.xml
new file mode 100644
index 0000000..61233e3
--- /dev/null
+++ b/specs/glossary.xml
@@ -0,0 +1,1320 @@
+<glossary id='glossary'>
+<title>Glossary</title>
+
+
+<glossentry id="glossary:Access_control_list">
+ <glossterm>Access control list</glossterm>
+ <indexterm zone="glossary:Access_control_list" significance="preferred"><primary>Access control list</primary></indexterm>
+ <glossdef>
+ <para>
+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.
+Clients on the local host can change this access control list.
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Active_grab">
+ <glossterm>Active grab</glossterm>
+ <indexterm zone="glossary:Active_grab" significance="preferred"><primary>Active grab</primary></indexterm>
+ <glossdef>
+ <para>
+A grab is active when the pointer or keyboard is actually owned by
+the single grabbing client.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Ancestors">
+ <glossterm>Ancestors</glossterm>
+ <indexterm zone="glossary:Ancestors" significance="preferred"><primary>Ancestors</primary></indexterm>
+ <glossdef>
+ <para>
+If W is an <glossterm linkend="glossary:Inferiors">inferior</glossterm> of A, then A is an ancestor of W.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Atom">
+ <glossterm>Atom</glossterm>
+ <indexterm zone="glossary:Atom" significance="preferred"><primary>Atom</primary></indexterm>
+ <glossdef>
+ <para>
+An atom is a unique ID corresponding to a string name.
+Atoms are used to identify properties, types, and selections.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Background">
+ <glossterm>Background</glossterm>
+ <indexterm zone="glossary:Background" significance="preferred"><primary>Background</primary></indexterm>
+ <glossdef>
+ <para>
+An
+<glossterm linkend="glossary:InputOutput_window"><emphasis role='bold'>InputOutput</emphasis></glossterm>
+window can have a background, which is defined as a pixmap.
+When regions of the window have their contents lost or invalidated,
+the server will automatically tile those regions with the background.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Backing_store">
+ <glossterm>Backing store</glossterm>
+ <indexterm zone="glossary:Backing_store" significance="preferred"><primary>Backing store</primary></indexterm>
+ <glossdef>
+ <para>
+When a server maintains the contents of a window,
+the pixels saved off screen are known as a backing store.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Bit_gravity">
+ <glossterm>Bit gravity</glossterm>
+ <indexterm zone="glossary:Bit_gravity" significance="preferred"><primary>Bit</primary><secondary>gravity</secondary></indexterm>
+ <glossdef>
+ <para>
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Bit_plane">
+ <glossterm>Bit plane</glossterm>
+ <indexterm zone="glossary:Bit_plane" significance="preferred"><primary>Bit</primary><secondary>plane</secondary></indexterm>
+ <glossdef>
+ <para>
+When a pixmap or window is thought of as a stack of bitmaps,
+each bitmap is called a bit plane or plane.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Bitmap">
+ <glossterm>Bitmap</glossterm>
+ <indexterm zone="glossary:Bitmap" significance="preferred"><primary>Bitmap</primary></indexterm>
+ <glossdef>
+ <para>
+A bitmap is a <glossterm linkend="glossary:Pixmap">pixmap</glossterm> of depth one.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Border">
+ <glossterm>Border</glossterm>
+ <indexterm zone="glossary:Border" significance="preferred"><primary>Border</primary></indexterm>
+ <glossdef>
+ <para>
+An
+<glossterm linkend="glossary:InputOutput_window"><emphasis role='bold'>InputOutput</emphasis></glossterm>
+window can have a border of equal thickness on all four sides of the window.
+A pixmap defines the contents of the border,
+and the server automatically maintains the contents of the border.
+Exposure events are never generated for border regions.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Button_grabbing">
+ <glossterm>Button grabbing</glossterm>
+ <indexterm zone="glossary:Button_grabbing" significance="preferred"><primary>Button</primary><secondary>grabbing</secondary></indexterm>
+ <glossdef>
+ <para>
+Buttons on the pointer may be passively grabbed by a client.
+When the button is pressed,
+the pointer is then actively grabbed by the client.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Byte_order">
+ <glossterm>Byte order</glossterm>
+ <indexterm zone="glossary:Byte_order" significance="preferred"><primary>Byte order</primary></indexterm>
+ <glossdef>
+ <para>
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Children">
+ <glossterm>Children</glossterm>
+ <indexterm zone="glossary:Children" significance="preferred"><primary>Children</primary></indexterm>
+ <indexterm zone="glossary:Children" significance="preferred"><primary>Window</primary><secondary>children</secondary></indexterm>
+ <glossdef>
+ <para>
+The children of a window are its first-level subwindows.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Client">
+ <glossterm>Client</glossterm>
+ <indexterm zone="glossary:Client" significance="preferred"><primary>Client</primary></indexterm>
+ <glossdef>
+ <para>
+An application program connects to the window system server by some
+interprocess communication 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 communication 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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Clipping_region">
+ <glossterm>Clipping region</glossterm>
+ <indexterm zone="glossary:Clipping_region" significance="preferred"><primary>Clipping region</primary></indexterm>
+ <glossdef>
+ <para>
+In a <glossterm linkend="glossary:Graphics_context">graphics context</glossterm>,
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Colormap">
+ <glossterm>Colormap</glossterm>
+ <indexterm zone="glossary:Colormap" significance="preferred"><primary>Colormap</primary></indexterm>
+ <glossdef>
+ <para>
+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 RGB values
+that drive the guns of a monitor.
+Depending on hardware limitations,
+one or more colormaps may be installed at one time,
+so that windows associated with those maps display with correct colors.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Connection">
+ <glossterm>Connection</glossterm>
+ <indexterm zone="glossary:Connection" significance="preferred"><primary>Connection</primary></indexterm>
+ <glossdef>
+ <para>
+The interprocess communication 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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Containment">
+ <glossterm>Containment</glossterm>
+ <indexterm zone="glossary:Containment" significance="preferred"><primary>Containment</primary></indexterm>
+ <glossdef>
+ <para>
+A window <quote>contains</quote> the pointer if the window is viewable and the
+<glossterm linkend="glossary:Hotspot">hotspot</glossterm> 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 <quote>in</quote> a window if the window contains the pointer
+but no inferior contains the pointer.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Coordinate_system">
+ <glossterm>Coordinate system</glossterm>
+ <indexterm zone="glossary:Coordinate_system" significance="preferred"><primary>Coordinate system</primary></indexterm>
+ <glossdef>
+ <para>
+The coordinate system has the X axis horizontal and the Y axis vertical,
+with the origin [0, 0] at the upper left.
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Cursor">
+ <glossterm>Cursor</glossterm>
+ <indexterm zone="glossary:Cursor" significance="preferred"><primary>Cursor</primary></indexterm>
+ <glossdef>
+ <para>
+A cursor is the visible shape of the pointer on a screen.
+It consists of a <glossterm linkend="glossary:Hotspot">hotspot</glossterm>,
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Depth">
+ <glossterm>Depth</glossterm>
+ <indexterm zone="glossary:Depth" significance="preferred"><primary>Depth</primary></indexterm>
+ <glossdef>
+ <para>
+The depth of a window or pixmap is the number of bits per pixel that it has.
+The depth of a graphics context is the depth of the drawables it can be
+used in conjunction with for graphics output.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Device">
+ <glossterm>Device</glossterm>
+ <indexterm zone="glossary:Device" significance="preferred"><primary>Device</primary></indexterm>
+ <glossdef>
+ <para>
+Keyboards, mice, tablets, track-balls, button boxes, and so on are all
+collectively known as input devices.
+The core protocol only deals with two devices,
+<quote>the keyboard</quote> and <quote>the pointer.</quote>
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:DirectColor">
+ <glossterm>DirectColor</glossterm>
+ <indexterm zone="glossary:DirectColor" significance="preferred"><primary>DirectColor</primary></indexterm>
+ <glossdef>
+ <para>
+<emphasis role='bold'>DirectColor</emphasis>
+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 values can be changed dynamically.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Display">
+ <glossterm>Display</glossterm>
+ <indexterm zone="glossary:Display" significance="preferred"><primary>Display</primary></indexterm>
+ <glossdef>
+ <para>
+A server, together with its screens and input devices, is called a display.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Drawable">
+ <glossterm>Drawable</glossterm>
+ <indexterm zone="glossary:Drawable" significance="preferred"><primary>Drawable</primary></indexterm>
+ <glossdef>
+ <para>
+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
+<glossterm linkend="glossary:InputOnly_window"><emphasis role='bold'>InputOnly</emphasis></glossterm>
+window cannot be used as a source or destination in a graphics operation.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Event">
+ <glossterm>Event</glossterm>
+ <indexterm zone="glossary:Event" significance="preferred"><primary>Event</primary></indexterm>
+ <glossdef>
+ <para>
+Clients are informed of information asynchronously by means of events.
+These events can be generated either asynchronously from devices
+or as side effects of client requests.
+Events are grouped into types.
+The server never sends events to a client unless the
+client has specificially asked to be informed of that type of event.
+However, other clients can force events to be sent to other clients.
+Events are typically reported relative to a window.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Event_mask">
+ <glossterm>Event mask</glossterm>
+ <indexterm zone="glossary:Event_mask" significance="preferred"><primary>Event</primary><secondary>mask</secondary></indexterm>
+ <glossdef>
+ <para>
+Events are requested relative to a window.
+The set of event types that a client requests relative to a window
+is described by using an event mask.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Event_synchronization">
+ <glossterm>Event synchronization</glossterm>
+ <indexterm zone="glossary:Event_synchronization" significance="preferred"><primary>Event</primary><secondary>synchronization</secondary></indexterm>
+ <glossdef>
+ <para>
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Event_propagation">
+ <glossterm>Event propagation</glossterm>
+ <indexterm zone="glossary:Event_propagation" significance="preferred"><primary>Event</primary><secondary>propagation</secondary></indexterm>
+ <glossdef>
+ <para>
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Event_source">
+ <glossterm>Event source</glossterm>
+ <indexterm zone="glossary:Event_source" significance="preferred"><primary>Event</primary><secondary>source</secondary></indexterm>
+ <glossdef>
+ <para>
+The window the pointer is in is the source of a device-related
+event.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Exposure_event">
+ <glossterm>Exposure event</glossterm>
+ <indexterm zone="glossary:Exposure_event" significance="preferred"><primary>Event</primary><secondary>Exposure</secondary></indexterm>
+ <glossdef>
+ <para>
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Extension">
+ <glossterm>Extension</glossterm>
+ <indexterm zone="glossary:Extension" significance="preferred"><primary>Extension</primary></indexterm>
+ <glossdef>
+ <para>
+Named extensions to the core protocol can be defined to extend the
+system.
+Extension to output requests, resources, and event types are
+all possible and are expected.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Focus_window">
+ <glossterm>Focus window</glossterm>
+ <indexterm zone="glossary:Focus_window" significance="preferred"><primary>Focus window</primary></indexterm>
+ <glossdef>
+ <para>
+The focus window is another term for the <glossterm linkend="glossary:Input_focus">input focus</glossterm>.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Font">
+ <glossterm>Font</glossterm>
+ <indexterm zone="glossary:Font" significance="preferred"><primary>Font</primary></indexterm>
+ <glossdef>
+ <para>
+A font is a matrix 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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:GC">
+ <glossterm>GC, GContext</glossterm>
+ <indexterm zone="glossary:GC" significance="preferred"><primary>GC</primary><seealso>Graphics context</seealso></indexterm>
+ <indexterm zone="glossary:GC" significance="preferred"><primary>GContext</primary><seealso>Graphics context</seealso></indexterm>
+ <glossdef>
+ <para>
+GC and gcontext are abbreviations for <glossterm linkend="glossary:Graphics_context">graphics context</glossterm>.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Glyph">
+ <glossterm>Glyph</glossterm>
+ <indexterm zone="glossary:Glyph" significance="preferred"><primary>Glyph</primary></indexterm>
+ <glossdef>
+ <para>
+A glyph is an image, typically of a character, in a font.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Grab">
+ <glossterm>Grab</glossterm>
+ <indexterm zone="glossary:Grab" significance="preferred"><primary>Grab</primary><seealso>Active grab</seealso><seealso>Passive grab</seealso></indexterm>
+ <glossdef>
+ <para>
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Graphics_context">
+ <glossterm>Graphics context</glossterm>
+ <indexterm zone="glossary:Graphics_context" significance="preferred"><primary>Graphics context</primary></indexterm>
+ <glossdef>
+ <para>
+Various information for graphics output is stored in a graphics context
+such as foreground pixel, background pixel, line width,
+<glossterm linkend="glossary:Clipping_region">clipping region</glossterm>,
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Gravity">
+ <glossterm>Gravity</glossterm>
+ <indexterm zone="glossary:Gravity" significance="preferred"><primary>Gravity</primary></indexterm>
+ <glossdef>
+ <para>
+See <glossterm linkend="glossary:Bit_gravity">bit gravity</glossterm>
+and <glossterm linkend="glossary:Window_gravity">window gravity</glossterm>.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:GrayScale">
+ <glossterm>GrayScale</glossterm>
+ <indexterm zone="glossary:GrayScale" significance="preferred"><primary>GrayScale</primary></indexterm>
+ <glossdef>
+ <para>
+<emphasis role='bold'>GrayScale</emphasis>
+can be viewed as a degenerate case of
+<glossterm linkend="glossary:PseudoColor"><emphasis role='bold'>PseudoColor</emphasis></glossterm>,
+in which the red, green, and blue values in any given colormap entry are equal,
+thus producing shades of gray.
+The gray values can be changed dynamically.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Hotspot">
+ <glossterm>Hotspot</glossterm>
+ <indexterm zone="glossary:Hotspot" significance="preferred"><primary>Hotspot</primary></indexterm>
+ <glossdef>
+ <para>
+A cursor has an associated hotspot that defines the point in the
+cursor corresponding to the coordinates reported for the pointer.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Identifier">
+ <glossterm>Identifier</glossterm>
+ <indexterm zone="glossary:Identifier" significance="preferred"><primary>Identifier</primary></indexterm>
+ <glossdef>
+ <para>
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Inferiors">
+ <glossterm>Inferiors</glossterm>
+ <indexterm zone="glossary:Inferiors" significance="preferred"><primary>Inferiors</primary></indexterm>
+ <glossdef>
+ <para>
+The inferiors of a window are all of the subwindows nested below it:
+the children, the children's children, and so on.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Input_focus">
+ <glossterm>Input focus</glossterm>
+ <indexterm zone="glossary:Input_focus" significance="preferred"><primary>Input focus</primary></indexterm>
+ <glossdef>
+ <para>
+The input focus is normally a window defining the scope for
+processing of keyboard input.
+If a generated keyboard event would normally be reported to this window
+or one of its inferiors,
+the event is reported normally.
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Input_manager">
+ <glossterm>Input manager</glossterm>
+ <indexterm zone="glossary:Input_manager" significance="preferred"><primary>Input manager</primary></indexterm>
+ <glossdef>
+ <para>
+Control over keyboard input is typically provided by an input manager client.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:InputOnly_window">
+ <glossterm>InputOnly window</glossterm>
+ <indexterm zone="glossary:InputOnly_window" significance="preferred"><primary>Window</primary><secondary>InputOnly</secondary></indexterm>
+ <glossdef>
+ <para>
+An
+<emphasis role='bold'>InputOnly</emphasis>
+window is a window that cannot be used for graphics requests.
+<emphasis role='bold'>InputOnly</emphasis>
+windows are invisible and can be used to control such things
+as cursors, input event generation, and grabbing.
+<emphasis role='bold'>InputOnly</emphasis>
+windows cannot have
+<emphasis role='bold'>InputOutput</emphasis>
+windows as inferiors.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:InputOutput_window">
+ <glossterm>InputOutput window</glossterm>
+ <indexterm zone="glossary:InputOutput_window" significance="preferred"><primary>Window</primary><secondary>InputOutput</secondary></indexterm>
+ <glossdef>
+ <para>
+An
+<emphasis role='bold'>InputOutput</emphasis>
+window is the normal kind of opaque window, used for both input and output.
+<emphasis role='bold'>InputOutput</emphasis>
+windows can have both
+<emphasis role='bold'>InputOutput</emphasis>
+and
+<emphasis role='bold'>InputOnly</emphasis>
+windows as inferiors.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Key_grabbing">
+ <glossterm>Key grabbing</glossterm>
+ <indexterm zone="glossary:Key_grabbing" significance="preferred"><primary>Key</primary><secondary>grabbing</secondary></indexterm>
+ <glossdef>
+ <para>
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Keyboard_grabbing">
+ <glossterm>Keyboard grabbing</glossterm>
+ <indexterm zone="glossary:Keyboard_grabbing" significance="preferred"><primary>Keyboard</primary><secondary>grabbing</secondary></indexterm>
+ <glossdef>
+ <para>
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Keysym">
+ <glossterm>Keysym</glossterm>
+ <indexterm zone="glossary:Keysym" significance="preferred"><primary>Keysym</primary></indexterm>
+ <glossdef>
+ <para>
+An encoding of a symbol on a keycap on a keyboard.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Mapped">
+ <glossterm>Mapped</glossterm>
+ <indexterm zone="glossary:Mapped" significance="preferred"><primary>Mapped window</primary></indexterm>
+ <glossdef>
+ <para>
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Modifier_keys">
+ <glossterm>Modifier keys</glossterm>
+ <indexterm zone="glossary:Modifier_keys" significance="preferred"><primary>Modifier keys</primary></indexterm>
+ <indexterm zone="glossary:Modifier_keys"><primary>Key</primary><secondary>modifier</secondary><see>Modifier keys</see></indexterm>
+ <glossdef>
+ <para>
+Shift, Control, Meta, Super, Hyper, Alt, Compose, Apple, CapsLock,
+ShiftLock, and similar keys are called modifier keys.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Monochrome">
+ <glossterm>Monochrome</glossterm>
+ <indexterm zone="glossary:Monochrome" significance="preferred"><primary>Monochrome</primary></indexterm>
+ <glossdef>
+ <para>
+Monochrome is a special case of
+<glossterm linkend="glossary:StaticGray"><emphasis role='bold'>StaticGray</emphasis></glossterm>
+in which there are only two colormap entries.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Obscure">
+ <glossterm>Obscure</glossterm>
+ <indexterm zone="glossary:Obscure" significance="preferred"><primary>Obscure</primary></indexterm>
+ <glossdef>
+ <para>
+A window is obscured if some other window obscures it.
+Window A obscures window B if both are viewable
+<glossterm linkend="glossary:InputOutput_window"><emphasis role='bold'>InputOutput</emphasis></glossterm>
+windows, A is higher in the global stacking order,
+and the rectangle defined by the outside edges of A intersects
+the rectangle defined by the outside edges of B.
+Note the distinction between obscure and occludes.
+Also note that window borders are included in the calculation
+and that a window can be obscured and yet still have visible regions.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Occlude">
+ <glossterm>Occlude</glossterm>
+ <indexterm zone="glossary:Occlude" significance="preferred"><primary>Occlude</primary></indexterm>
+ <glossdef>
+ <para>
+A window is occluded if some other window occludes it.
+Window A occludes window B if both are mapped, A is higher in the global
+stacking order, and 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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Padding">
+ <glossterm>Padding</glossterm>
+ <indexterm zone="glossary:Padding" significance="preferred"><primary>Padding</primary></indexterm>
+ <glossdef>
+ <para>
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Parent_window">
+ <glossterm>Parent window</glossterm>
+ <indexterm zone="glossary:Parent_window" significance="preferred"><primary>Window</primary><secondary>parent</secondary></indexterm>
+ <glossdef>
+ <para>
+If C is a <glossterm linkend="glossary:Children">child</glossterm> of P,
+then P is the parent of C.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Passive_grab">
+ <glossterm>Passive grab</glossterm>
+ <indexterm zone="glossary:Passive_grab" significance="preferred"><primary>Passive grab</primary></indexterm>
+ <glossdef>
+ <para>
+Grabbing a key or button is a passive grab.
+The grab activates when the key or button is actually pressed.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Pixel_value">
+ <glossterm>Pixel value</glossterm>
+ <indexterm zone="glossary:Pixel_value" significance="preferred"><primary>Pixel value</primary></indexterm>
+ <glossdef>
+ <para>
+A pixel is an N-bit value, where N is the number of bit planes used
+in a particular window or pixmap (that is,
+N is the depth of the window or pixmap).
+For a window,
+a pixel value indexes a colormap to derive an actual color to be displayed.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Pixmap">
+ <glossterm>Pixmap</glossterm>
+ <indexterm zone="glossary:Pixmap" significance="preferred"><primary>Pixmap</primary></indexterm>
+ <glossdef>
+ <para>
+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 (2^N)-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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Plane">
+ <glossterm>Plane</glossterm>
+ <indexterm zone="glossary:Plane" significance="preferred"><primary>Plane</primary></indexterm>
+ <glossdef>
+ <para>
+When a pixmap or window is thought of as a stack of bitmaps,
+each bitmap is called a plane or bit plane.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Plane_mask">
+ <glossterm>Plane mask</glossterm>
+ <indexterm zone="glossary:Plane_mask" significance="preferred"><primary>Plane</primary><secondary>mask</secondary></indexterm>
+ <glossdef>
+ <para>
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Pointer">
+ <glossterm>Pointer</glossterm>
+ <indexterm zone="glossary:Pointer" significance="preferred"><primary>Pointer</primary></indexterm>
+ <glossdef>
+ <para>
+The pointer is the pointing device attached to the cursor
+and tracked on the screens.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Pointer_grabbing">
+ <glossterm>Pointer grabbing</glossterm>
+ <indexterm zone="glossary:Pointer_grabbing" significance="preferred"><primary>Pointer</primary><secondary>grabbing</secondary></indexterm>
+ <glossdef>
+ <para>
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Pointing_device">
+ <glossterm>Pointing device</glossterm>
+ <indexterm zone="glossary:Pointing_device" significance="preferred"><primary>Pointing device</primary></indexterm>
+ <glossdef>
+ <para>
+A pointing device is typically a mouse, tablet, or some other
+device with effective dimensional motion.
+There is only one visible cursor defined by the core protocol,
+and it tracks whatever pointing device is attached as the pointer.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Property">
+ <glossterm>Property</glossterm>
+ <indexterm zone="glossary:Property" significance="preferred"><primary>Property</primary></indexterm>
+ <glossdef>
+ <para>
+Windows may have associated properties,
+which 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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Property_list">
+ <glossterm>Property list</glossterm>
+ <indexterm zone="glossary:Property_list" significance="preferred"><primary>Property list</primary></indexterm>
+ <glossdef>
+ <para>
+The property list of a window is the list of properties that have
+been defined for the window.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:PseudoColor">
+ <glossterm>PseudoColor</glossterm>
+ <indexterm zone="glossary:PseudoColor" significance="preferred"><primary>PseudoColor</primary></indexterm>
+ <glossdef>
+ <para>
+<emphasis role='bold'>PseudoColor</emphasis>
+is a class of colormap in which a pixel value indexes the colormap to
+produce independent red, green, and blue values;
+that is, the colormap is viewed as an array of triples (RGB values).
+The RGB values can be changed dynamically.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Redirecting_control">
+ <glossterm>Redirecting control</glossterm>
+ <indexterm zone="glossary:Redirecting_control" significance="preferred"><primary>Redirecting control</primary></indexterm>
+ <glossdef>
+ <para>
+Window managers (or client programs) may want to 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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Reply">
+ <glossterm>Reply</glossterm>
+ <indexterm zone="glossary:Reply" significance="preferred"><primary>Reply</primary></indexterm>
+ <glossdef>
+ <para>
+Information requested by a client program 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,
+although some requests generate multiple replies.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Request">
+ <glossterm>Request</glossterm>
+ <indexterm zone="glossary:Request" significance="preferred"><primary>Request</primary></indexterm>
+ <glossdef>
+ <para>
+A command to the server is called a request.
+It is a single block of data sent over a connection.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Resource">
+ <glossterm>Resource</glossterm>
+ <indexterm zone="glossary:Resource" significance="preferred"><primary>Resource</primary></indexterm>
+ <glossdef>
+ <para>
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:RGB_values">
+ <glossterm>RGB values</glossterm>
+ <indexterm zone="glossary:RGB_values" significance="preferred"><primary>RGB values</primary></indexterm>
+ <glossdef>
+ <para>
+Red, green, and blue (RGB) intensity values are used to define color.
+These values are always represented as 16-bit unsigned numbers,
+with 0 being the minimum intensity and 65535 being the maximum intensity.
+The server scales the values to match the display hardware.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Root">
+ <glossterm>Root</glossterm>
+ <indexterm zone="glossary:Root" significance="preferred"><primary>Root</primary></indexterm>
+ <glossdef>
+ <para>
+The root of a pixmap, colormap, or graphics context is the same as the root of
+whatever drawable was used when the pixmap, colormap, or graphics context was
+created.
+The root of a window is the root window under which the window was created.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Root_window">
+ <glossterm>Root window</glossterm>
+ <indexterm zone="glossary:Root_window" significance="preferred"><primary>Window</primary><secondary>root</secondary></indexterm>
+ <glossdef>
+ <para>
+Each screen has a root window covering it.
+It cannot be reconfigured or unmapped,
+but it otherwise acts as a full-fledged window.
+A root window has no parent.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Save_set">
+ <glossterm>Save set</glossterm>
+ <indexterm zone="glossary:Save_set" significance="preferred"><primary>Save set</primary></indexterm>
+ <glossdef>
+ <para>
+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 terminates abnormally.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Scanline">
+ <glossterm>Scanline</glossterm>
+ <indexterm zone="glossary:Scanline" significance="preferred"><primary>Scanline</primary></indexterm>
+ <glossdef>
+ <para>
+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 x coordinate.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Scanline_order">
+ <glossterm>Scanline order</glossterm>
+ <indexterm zone="glossary:Scanline_order" significance="preferred"><primary>Scanline order</primary></indexterm>
+ <glossdef>
+ <para>
+An image represented in scanline order contains scanlines ordered by
+increasing y coordinate.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Screen">
+ <glossterm>Screen</glossterm>
+ <indexterm zone="glossary:Screen" significance="preferred"><primary>Screen</primary></indexterm>
+ <glossdef>
+ <para>
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Selection">
+ <glossterm>Selection</glossterm>
+ <indexterm zone="glossary:Selection" significance="preferred"><primary>Selection</primary></indexterm>
+ <glossdef>
+ <para>
+A selection can be thought of as an indirect property with dynamic
+type; that is, rather than having the property stored in the server,
+it is maintained by some client (the <quote>owner</quote>).
+A selection is global in nature and is thought of as belonging to the user
+(although maintained by clients), rather than as 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 <quote>target type</quote>.
+This target type can be used to control the transmitted representation of the
+contents.
+For example,
+if the selection is <quote>the last thing the user clicked on</quote>
+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 <quote>looks</quote> (fonts, line
+spacing, indentation, and so on) 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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Server">
+ <glossterm>Server</glossterm>
+ <indexterm zone="glossary:Server" significance="preferred"><primary>Server</primary></indexterm>
+ <glossdef>
+ <para>
+The server provides the basic windowing mechanism.
+It handles connections from clients,
+multiplexes graphics requests onto the screens,
+and demultiplexes input back to the appropriate clients.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Server_grabbing">
+ <glossterm>Server grabbing</glossterm>
+ <indexterm zone="glossary:Server_grabbing" significance="preferred"><primary>Server</primary><secondary>grabbing</secondary></indexterm>
+ <glossdef>
+ <para>
+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 to execute requests
+indivisibly.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Sibling">
+ <glossterm>Sibling</glossterm>
+ <indexterm zone="glossary:Sibling" significance="preferred"><primary>Sibling</primary></indexterm>
+ <glossdef>
+ <para>
+Children of the same parent window are known as sibling windows.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Stacking_order">
+ <glossterm>Stacking order</glossterm>
+ <indexterm zone="glossary:Stacking_order" significance="preferred"><primary>Stacking order</primary></indexterm>
+ <glossdef>
+ <para>
+Sibling windows may stack on top of each other.
+Windows above other windows both obscure and occlude those lower windows.
+This is similar to paper on a desk.
+The relationship between sibling windows is known as the stacking order.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:StaticColor">
+ <glossterm>StaticColor</glossterm>
+ <indexterm zone="glossary:StaticColor" significance="preferred"><primary>StaticColor</primary></indexterm>
+ <glossdef>
+ <para>
+<emphasis role='bold'>StaticColor</emphasis>
+can be viewed as a degenerate case of
+<glossterm linkend="glossary:PseudoColor"><emphasis role='bold'>PseudoColor</emphasis></glossterm>
+in which the RGB values are predefined and read-only.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:StaticGray">
+ <glossterm>StaticGray</glossterm>
+ <indexterm zone="glossary:StaticGray" significance="preferred"><primary>StaticGray</primary></indexterm>
+ <glossdef>
+ <para>
+<emphasis role='bold'>StaticGray</emphasis>
+can be viewed as a degenerate case of
+<glossterm linkend="glossary:GrayScale"><emphasis role='bold'>GrayScale</emphasis></glossterm>
+in which the gray values are predefined and read-only.
+The values are typically linear or near-linear increasing ramps.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Stipple">
+ <glossterm>Stipple</glossterm>
+ <indexterm zone="glossary:Stipple" significance="preferred"><primary>Stipple</primary></indexterm>
+ <glossdef>
+ <para>
+A stipple pattern is a bitmap that is used to tile a region that will serve
+as an additional clip mask for a fill operation with the foreground
+color.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:String_Equivalence">
+ <glossterm>String Equivalence</glossterm>
+ <indexterm zone="glossary:String_Equivalence" significance="preferred"><primary>String Equivalence</primary></indexterm>
+ <glossdef>
+ <para>
+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 <quote>A</quote> to <quote>Z</quote>) are
+pairwise equivalent to decimal values 97 to 122 inclusive
+(characters <quote>a</quote> to <quote>z</quote>), decimal values 192 to 214 inclusive
+(characters <quote>A grave</quote> to <quote>O diaeresis</quote>) are pairwise equivalent to decimal
+values 224 to 246 inclusive (characters <quote>a grave</quote> to <quote>o diaeresis</quote>),
+and decimal values 216 to 222 inclusive (characters <quote>O oblique</quote> to <quote>THORN</quote>)
+are pairwise equivalent to decimal values 246 to 254 inclusive
+(characters <quote>o oblique</quote> to <quote>thorn</quote>).
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Tile">
+ <glossterm>Tile</glossterm>
+ <indexterm zone="glossary:Tile" significance="preferred"><primary>Tile</primary></indexterm>
+ <glossdef>
+ <para>
+A pixmap can be replicated in two dimensions to tile a region.
+The pixmap itself is also known as a tile.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Timestamp">
+ <glossterm>Timestamp</glossterm>
+ <indexterm zone="glossary:Timestamp" significance="preferred"><primary>Timestamp</primary></indexterm>
+ <indexterm zone="glossary:Timestamp" significance="preferred"><primary>CurrentTime</primary></indexterm>
+ <glossdef>
+ <para>
+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 earlier in time than T and half of the
+timestamp space as being later in time than T.
+One timestamp value (named
+<emphasis role='bold'>CurrentTime</emphasis>)
+is never generated by the server.
+This value is reserved for use in requests to represent the current
+server time.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:TrueColor">
+ <glossterm>TrueColor</glossterm>
+ <indexterm zone="glossary:TrueColor" significance="preferred"><primary>TrueColor</primary></indexterm>
+ <glossdef>
+ <para>
+<emphasis role='bold'>TrueColor</emphasis>
+can be viewed as a degenerate case of
+<glossterm linkend="glossary:DirectColor"><emphasis role='bold'>DirectColor</emphasis></glossterm>
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Type">
+ <glossterm>Type</glossterm>
+ <indexterm zone="glossary:Type" significance="preferred"><primary>Type</primary></indexterm>
+ <glossdef>
+ <para>
+A type is an arbitrary atom used to identify the interpretation of
+property data.
+Types are completely uninterpreted by the server
+and are solely for the benefit of clients.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Viewable">
+ <glossterm>Viewable</glossterm>
+ <indexterm zone="glossary:Viewable" significance="preferred"><primary>Viewable</primary></indexterm>
+ <glossdef>
+ <para>
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Visible">
+ <glossterm>Visible</glossterm>
+ <indexterm zone="glossary:Visible" significance="preferred"><primary>Visible</primary></indexterm>
+ <glossdef>
+ <para>
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Window_gravity">
+ <glossterm>Window gravity</glossterm>
+ <indexterm zone="glossary:Window_gravity" significance="preferred"><primary>Window</primary><secondary>gravity</secondary></indexterm>
+ <glossdef>
+ <para>
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:Window_manager">
+ <glossterm>Window manager</glossterm>
+ <indexterm zone="glossary:Window_manager" significance="preferred"><primary>Window</primary><secondary>manager</secondary></indexterm>
+ <glossdef>
+ <para>
+Manipulation of windows on the screen and much of the user interface
+(policy) is typically provided by a window manager client.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:XYFormat">
+ <glossterm>XYFormat</glossterm>
+ <indexterm zone="glossary:XYFormat" significance="preferred"><primary>XYFormat</primary></indexterm>
+ <glossdef>
+ <para>
+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 in bit order.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry id="glossary:ZFormat">
+ <glossterm>ZFormat</glossterm>
+ <indexterm zone="glossary:ZFormat" significance="preferred"><primary>ZFormat</primary></indexterm>
+ <glossdef>
+ <para>
+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.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+</glossary>
diff --git a/specs/keysyms.xml b/specs/keysyms.xml
new file mode 100644
index 0000000..e2fa0d0
--- /dev/null
+++ b/specs/keysyms.xml
@@ -0,0 +1,6050 @@
+<appendix id="keysym_encoding">
+<title>KEYSYM Encoding</title>
+<indexterm zone="keysym_encoding"><primary>Types</primary><secondary>KEYSYM</secondary></indexterm>
+<indexterm zone="keysym_encoding"><primary>Keysym</primary></indexterm>
+
+<para>
+KEYSYM values are 32-bit integers that encode the symbols on the
+keycaps of a keyboard. The three most significant bits are always
+zero, which leaves a 29-bit number space. For convenience, KEYSYM
+values can be viewed as split into four bytes:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+Byte 1 is the most significant eight bits (three zero bits and
+the most-significant five bits of the 29-bit effective value)
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Byte 2 is the next most-significant eight bits
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Byte 3 is the next most-significant eight bits
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Byte 4 is the least-significant eight bits
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+There are six categories of KEYSYM values.
+</para>
+
+<sect1 id='Special_KEYSYMs'>
+<title>Special KEYSYMs</title>
+<para>
+There are two special values:
+<keysym>NoSymbol</keysym>
+and
+<keysym>VoidSymbol</keysym>.
+They are used to indicate the absence of symbols (see
+<link linkend='Keyboards'>Section 5, Keyboards</link>).
+</para>
+
+<informaltable frame="topbot">
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='6' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='1.0*'/>
+ <colspec colname='c3' colwidth='1.0*'/>
+ <colspec colname='c4' colwidth='1.0*'/>
+ <colspec colname='c5' colwidth='1.0*'/>
+ <colspec colname='c6' colwidth='1.0*'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Byte 1</entry>
+ <entry>Byte 2</entry>
+ <entry>Byte 3</entry>
+ <entry>Byte 4</entry>
+ <entry>Hex. value</entry>
+ <entry>Name</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>0</entry>
+ <entry>0</entry>
+ <entry>0</entry>
+ <entry>0</entry>
+ <entry>#x00000000</entry>
+ <entry><keysym>NoSymbol</keysym></entry>
+ </row>
+ <row>
+ <entry>0</entry>
+ <entry>255</entry>
+ <entry>255</entry>
+ <entry>255</entry>
+ <entry>#x00FFFFFF</entry>
+ <entry><keysym>VoidSymbol</keysym></entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+</sect1>
+
+<sect1 id='Latin_1_KEYSYMs'>
+<title>Latin-1 KEYSYMs</title>
+
+<para>
+The Latin-1 KEYSYMs occupy the range #x0020 to #x007E and #x00A0 to
+#00FF and represent the ISO 10646 / Unicode characters U+0020 to
+U+007E and U+00A0 to U+00FF, respectively.
+</para>
+</sect1>
+
+<sect1 id='Unicode_KEYSYMs'>
+<title>Unicode KEYSYMs</title>
+<indexterm zone="Unicode_KEYSYMs"><primary>Keysym</primary><secondary>Unicode</secondary></indexterm>
+
+<para>
+These occupy the range #x01000100 to #x0110FFFF and represent the ISO
+10646 / Unicode characters U+0100 to U+10FFFF, respectively. The
+numeric value of a Unicode KEYSYM is the Unicode position of the
+corresponding character plus #x01000000. In the interest of backwards
+compatibility, clients should be able to process both the Unicode
+KEYSYM and the Legacy KEYSYM for those characters where both exist.
+</para>
+<para>
+Dead keys, which place an accent on the next character entered, shall
+be encoded as Function KEYSYMs, and not as the Unicode KEYSYM
+corresponding to an equivalent combining character. Where a keycap
+indicates a specific function with a graphical symbol that is also
+available in Unicode (e.g., an upwards arrow for the cursor up
+function), the appropriate Function KEYSYM should be used, and not
+the Unicode KEYSYM corresponding to the depicted symbol.
+</para>
+</sect1>
+<sect1 id='Function_KEYSYMs'>
+<title>Function KEYSYMs</title>
+
+<para>
+These represent keycap symbols that do not directly represent elements
+of a coded character set. Instead, they typically identify a software
+function, mode, or operation (e.g., cursor up, caps lock, insert) that
+can be activated using a dedicated key. Function KEYSYMs have zero
+values for bytes 1 and 2. Byte 3 distinguishes between several 8-bit
+sets within which byte 4 identifies the individual function key.
+</para>
+
+<informaltable frame="topbot">
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='1.0*'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Byte 3</entry>
+ <entry>Byte 4</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>255</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>254</entry>
+ <entry>Keyboard (XKB) Extension</entry>
+ </row>
+ <row>
+ <entry>253</entry>
+ <entry>3270</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+Within a national market, keyboards tend to be comparatively standard
+with respect to the character keys, but they can differ significantly
+on the miscellaneous function keys. Some have function keys left over
+from early timesharing days, others were designed for a specific
+application, such as text processing, web browsing, or accessing
+audiovisual data. The symbols on the keycaps can differ significantly
+between manufacturers and national markets, even where they denote the
+same software function (e.g., Ctrl in the U.S. versus Strg in Germany)
+</para>
+<para>
+<!-- .LP -->
+There are two ways of thinking about how to define KEYSYMs for such a
+world:
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+The Engraving approach
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The Common approach
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<!-- .LP -->
+The Engraving approach is to create a KEYSYM for every unique key
+engraving. This is effectively taking the union of all key engravings
+on all keyboards. For example, some keyboards label function keys
+across the top as F1 through Fn, and others label them as PF1 through
+PFn. These would be different keys under the Engraving
+approach. Likewise, Lock would differ from Shift Lock, which is
+different from the up-arrow symbol that has the effect of changing
+lowercase to uppercase. There are lots of other aliases such as Del,
+DEL, Delete, Remove, and so forth. The Engraving approach makes it
+easy to decide if a new entry should be added to the KEYSYM set: if it
+does not exactly match an existing one, then a new one is created.
+</para>
+<para>
+<!-- .LP -->
+The Common approach tries to capture all of the keys present on an
+interesting number of keyboards, folding likely aliases into the same
+KEYSYM. For example, Del, DEL, and Delete are all merged into a single
+KEYSYM. Vendors can augment the KEYSYM set (using the vendor-specific
+encoding space) to include all of their unique keys that were not
+included in the standard set. Each vendor decides which of its keys
+map into the standard KEYSYMs, which presumably can be overridden by a
+user. It is more difficult to implement this approach, because
+judgment is required about when a sufficient set of keyboards
+implements an engraving to justify making it a KEYSYM in the standard
+set and about which engravings should be merged into a single
+KEYSYM.
+</para>
+<para>
+<!-- .LP -->
+Although neither scheme is perfect or elegant, the Common approach has
+been selected because it makes it easier to write a portable
+application. Having the Delete functionality merged into a single
+KEYSYM allows an application to implement a deletion function and
+expect reasonable bindings on a wide set of workstations. Under the
+Common approach, application writers are still free to look for and
+interpret vendor-specific KEYSYMs, but because they are in the
+extended set, the application developer is more conscious that they
+are writing the application in a nonportable fashion.
+</para>
+<para>
+<!-- .LP -->
+The Keyboard set is a miscellaneous collection of commonly occurring
+keys on keyboards. Within this set, the numeric keypad symbols are
+generally duplicates of symbols found on keys on the main part of the
+keyboard, but they are distinguished here because they often have a
+distinguishable semantics associated with them.
+</para>
+
+<informaltable frame="topbot">
+ <tgroup cols='3' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='3.0*'/>
+ <colspec colname='c3' colwidth='1.0*'/>
+ <thead>
+ <row rowsep="1">
+ <entry>KEYSYM value</entry>
+ <entry>Name</entry>
+ <entry>Set</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>#xFF08</entry>
+ <entry>BACKSPACE, BACK SPACE, BACK CHAR</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF09</entry>
+ <entry>TAB</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF0A</entry>
+ <entry>LINEFEED, LF</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF0B</entry>
+ <entry>CLEAR</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF0D</entry>
+ <entry>RETURN, ENTER</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF13</entry>
+ <entry>PAUSE, HOLD</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF14</entry>
+ <entry>SCROLL LOCK</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF15</entry>
+ <entry>SYS REQ, SYSTEM REQUEST</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF1B</entry>
+ <entry>ESCAPE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF20</entry>
+ <entry>MULTI-KEY CHARACTER PREFACE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF21</entry>
+ <entry>KANJI, KANJI CONVERT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF22</entry>
+ <entry>MUHENKAN</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF23</entry>
+ <entry>HENKAN MODE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF24</entry>
+ <entry>ROMAJI</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF25</entry>
+ <entry>HIRAGANA</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF26</entry>
+ <entry>KATAKANA</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF27</entry>
+ <entry>HIRAGANA/KATAKANA TOGGLE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF28</entry>
+ <entry>ZENKAKU</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF29</entry>
+ <entry>HANKAKU</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF2A</entry>
+ <entry>ZENKAKU/HANKAKU TOGGLE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF2B</entry>
+ <entry>TOUROKU</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF2C</entry>
+ <entry>MASSYO</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF2D</entry>
+ <entry>KANA LOCK</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF2E</entry>
+ <entry>KANA SHIFT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF2F</entry>
+ <entry>EISU SHIFT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF30</entry>
+ <entry>EISU TOGGLE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF31</entry>
+ <entry>HANGUL START/STOP (TOGGLE)</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF32</entry>
+ <entry>HANGUL START</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF33</entry>
+ <entry>HANGUL END, ENGLISH START</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF34</entry>
+ <entry>START HANGUL/HANJA CONVERSION</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF35</entry>
+ <entry>HANGUL JAMO MODE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF36</entry>
+ <entry>HANGUL ROMAJA MODE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF37</entry>
+ <entry>HANGUL CODE INPUT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF38</entry>
+ <entry>HANGUL JEONJA MODE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF39</entry>
+ <entry>HANGUL BANJA MODE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF3A</entry>
+ <entry>HANGUL PREHANJA CONVERSION</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF3B</entry>
+ <entry>HANGUL POSTHANJA CONVERSION</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF3C</entry>
+ <entry>HANGUL SINGLE CANDIDATE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF3D</entry>
+ <entry>HANGUL MULTIPLE CANDIDATE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF3E</entry>
+ <entry>HANGUL PREVIOUS CANDIDATE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF3F</entry>
+ <entry>HANGUL SPECIAL SYMBOLS</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF50</entry>
+ <entry>HOME</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF51</entry>
+ <entry>LEFT, MOVE LEFT, LEFT ARROW</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF52</entry>
+ <entry>UP, MOVE UP, UP ARROW</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF53</entry>
+ <entry>RIGHT, MOVE RIGHT, RIGHT ARROW</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF54</entry>
+ <entry>DOWN, MOVE DOWN, DOWN ARROW</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF55</entry>
+ <entry>PRIOR, PREVIOUS, PAGE UP</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF56</entry>
+ <entry>NEXT, PAGE DOWN</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF57</entry>
+ <entry>END, EOL</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF58</entry>
+ <entry>BEGIN, BOL</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF60</entry>
+ <entry>SELECT, MARK</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF61</entry>
+ <entry>PRINT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF62</entry>
+ <entry>EXECUTE, RUN, DO</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF63</entry>
+ <entry>INSERT, INSERT HERE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF65</entry>
+ <entry>UNDO, OOPS</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF66</entry>
+ <entry>REDO, AGAIN</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF67</entry>
+ <entry>MENU</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF68</entry>
+ <entry>FIND, SEARCH</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF69</entry>
+ <entry>CANCEL, STOP, ABORT, EXIT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF6A</entry>
+ <entry>HELP</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF6B</entry>
+ <entry>BREAK</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF7E</entry>
+ <entry>MODE SWITCH, SCRIPT SWITCH, CHARACTER SET SWITCH</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF7F</entry>
+ <entry>NUM LOCK</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF80</entry>
+ <entry>KEYPAD SPACE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF89</entry>
+ <entry>KEYPAD TAB</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF8D</entry>
+ <entry>KEYPAD ENTER</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF91</entry>
+ <entry>KEYPAD F1, PF1, A</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF92</entry>
+ <entry>KEYPAD F2, PF2, B</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF93</entry>
+ <entry>KEYPAD F3, PF3, C</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF94</entry>
+ <entry>KEYPAD F4, PF4, D</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF95</entry>
+ <entry>KEYPAD HOME</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF96</entry>
+ <entry>KEYPAD LEFT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF97</entry>
+ <entry>KEYPAD UP</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF98</entry>
+ <entry>KEYPAD RIGHT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF99</entry>
+ <entry>KEYPAD DOWN</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF9A</entry>
+ <entry>KEYPAD PRIOR, PAGE UP</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF9B</entry>
+ <entry>KEYPAD NEXT, PAGE DOWN</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF9C</entry>
+ <entry>KEYPAD END</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF9D</entry>
+ <entry>KEYPAD BEGIN</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF9E</entry>
+ <entry>KEYPAD INSERT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFF9F</entry>
+ <entry>KEYPAD DELETE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFAA</entry>
+ <entry>KEYPAD MULTIPLICATION SIGN, ASTERISK</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFAB</entry>
+ <entry>KEYPAD PLUS SIGN</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFAC</entry>
+ <entry>KEYPAD SEPARATOR, COMMA</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFAD</entry>
+ <entry>KEYPAD MINUS SIGN, HYPHEN</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFAE</entry>
+ <entry>KEYPAD DECIMAL POINT, FULL STOP</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFAF</entry>
+ <entry>KEYPAD DIVISION SIGN, SOLIDUS</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFB0</entry>
+ <entry>KEYPAD DIGIT ZERO</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFB1</entry>
+ <entry>KEYPAD DIGIT ONE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFB2</entry>
+ <entry>KEYPAD DIGIT TWO</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFB3</entry>
+ <entry>KEYPAD DIGIT THREE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFB4</entry>
+ <entry>KEYPAD DIGIT FOUR</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFB5</entry>
+ <entry>KEYPAD DIGIT FIVE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFB6</entry>
+ <entry>KEYPAD DIGIT SIX</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFB7</entry>
+ <entry>KEYPAD DIGIT SEVEN</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFB8</entry>
+ <entry>KEYPAD DIGIT EIGHT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFB9</entry>
+ <entry>KEYPAD DIGIT NINE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFBD</entry>
+ <entry>KEYPAD EQUALS SIGN</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFBE</entry>
+ <entry>F1</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFBF</entry>
+ <entry>F2</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFC0</entry>
+ <entry>F3</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFC1</entry>
+ <entry>F4</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFC2</entry>
+ <entry>F5</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFC3</entry>
+ <entry>F6</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFC4</entry>
+ <entry>F7</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFC5</entry>
+ <entry>F8</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFC6</entry>
+ <entry>F9</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFC7</entry>
+ <entry>F10</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFC8</entry>
+ <entry>F11, L1</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFC9</entry>
+ <entry>F12, L2</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFCA</entry>
+ <entry>F13, L3</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFCB</entry>
+ <entry>F14, L4</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFCC</entry>
+ <entry>F15, L5</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFCD</entry>
+ <entry>F16, L6</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFCE</entry>
+ <entry>F17, L7</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFCF</entry>
+ <entry>F18, L8</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFD0</entry>
+ <entry>F19, L9</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFD1</entry>
+ <entry>F20, L10</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFD2</entry>
+ <entry>F21, R1</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFD3</entry>
+ <entry>F22, R2</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFD4</entry>
+ <entry>F23, R3</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFD5</entry>
+ <entry>F24, R4</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFD6</entry>
+ <entry>F25, R5</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFD7</entry>
+ <entry>F26, R6</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFD8</entry>
+ <entry>F27, R7</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFD9</entry>
+ <entry>F28, R8</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFDA</entry>
+ <entry>F29, R9</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFDB</entry>
+ <entry>F30, R10</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFDC</entry>
+ <entry>F31, R11</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFDD</entry>
+ <entry>F32, R12</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFDE</entry>
+ <entry>F33, R13</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFDF</entry>
+ <entry>F34, R14</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFE0</entry>
+ <entry>F35, R15</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFE1</entry>
+ <entry>LEFT SHIFT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFE2</entry>
+ <entry>RIGHT SHIFT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFE3</entry>
+ <entry>LEFT CONTROL</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFE4</entry>
+ <entry>RIGHT CONTROL</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFE5</entry>
+ <entry>CAPS LOCK</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFE6</entry>
+ <entry>SHIFT LOCK</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFE7</entry>
+ <entry>LEFT META</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFE8</entry>
+ <entry>RIGHT META</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFE9</entry>
+ <entry>LEFT ALT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFEA</entry>
+ <entry>RIGHT ALT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFEB</entry>
+ <entry>LEFT SUPER</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFEC</entry>
+ <entry>RIGHT SUPER</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFED</entry>
+ <entry>LEFT HYPER</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFEE</entry>
+ <entry>RIGHT HYPER</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row>
+ <entry>#xFFFF</entry>
+ <entry>DELETE, RUBOUT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The Keyboard (XKB) Extension set, which provides among other things
+a range of dead keys, is defined in "The X Keyboard Extension:
+Protocol Specification", Appendix C. <!-- xref -->
+</para>
+
+<para>
+The 3270 set defines additional keys that are specific to IBM 3270
+terminals.
+</para>
+
+<informaltable frame="topbot">
+ <tgroup cols='3' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*' />
+ <colspec colname='c2' colwidth='3.0*' />
+ <colspec colname='c3' colwidth='1.0*' />
+ <thead>
+ <row rowsep="1">
+ <entry>KEYSYM value</entry>
+ <entry>Name</entry>
+ <entry>Set</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>#xFD01</entry>
+ <entry>3270 DUPLICATE</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD02</entry>
+ <entry>3270 FIELDMARK</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD03</entry>
+ <entry>3270 RIGHT2</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD04</entry>
+ <entry>3270 LEFT2</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD05</entry>
+ <entry>3270 BACKTAB</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD06</entry>
+ <entry>3270 ERASEEOF</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD07</entry>
+ <entry>3270 ERASEINPUT</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD08</entry>
+ <entry>3270 RESET</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD09</entry>
+ <entry>3270 QUIT</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD0A</entry>
+ <entry>3270 PA1</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD0B</entry>
+ <entry>3270 PA2</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD0C</entry>
+ <entry>3270 PA3</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD0D</entry>
+ <entry>3270 TEST</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD0E</entry>
+ <entry>3270 ATTN</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD0F</entry>
+ <entry>3270 CURSORBLINK</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD10</entry>
+ <entry>3270 ALTCURSOR</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD11</entry>
+ <entry>3270 KEYCLICK</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD12</entry>
+ <entry>3270 JUMP</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD13</entry>
+ <entry>3270 IDENT</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD14</entry>
+ <entry>3270 RULE</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD15</entry>
+ <entry>3270 COPY</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD16</entry>
+ <entry>3270 PLAY</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD17</entry>
+ <entry>3270 SETUP</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD18</entry>
+ <entry>3270 RECORD</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD19</entry>
+ <entry>3270 CHANGESCREEN</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD1A</entry>
+ <entry>3270 DELETEWORD</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD1B</entry>
+ <entry>3270 EXSELECT</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD1C</entry>
+ <entry>3270 CURSORSELECT</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD1D</entry>
+ <entry>3270 PRINTSCREEN</entry>
+ <entry>3270</entry>
+ </row>
+ <row>
+ <entry>#xFD1E</entry>
+ <entry>3270 ENTER</entry>
+ <entry>3270</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+</sect1>
+
+<sect1 id='Vendor_KEYSYMs'>
+<title>Vendor KEYSYMs</title>
+
+<para>
+The KEYSYM number range #x10000000 to #x1FFFFFFF is available for
+vendor-specific extentions. Among these, the range #x11000000 to
+#x1100FFFF is designated for keypad KEYSYMs.
+</para>
+</sect1>
+
+<sect1 id='Legacy_KEYSYMs'>
+<title>Legacy KEYSYMs</title>
+
+<para>
+These date from the time before ISO 10646 / Unicode was
+available. They represent characters from a number of different older
+8-bit coded character sets and have zero values for bytes 1 and
+2. Byte 3 indicates a coded character set and byte 4 is the 8-bit
+value of the particular character within that set.
+</para>
+
+<informaltable frame="topbot">
+ <tgroup cols='4' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*' />
+ <colspec colname='c2' colwidth='2.0*' />
+ <colspec colname='c3' colwidth='1.0*' />
+ <colspec colname='c4' colwidth='1.0*' />
+ <thead>
+ <row rowsep="1">
+ <entry>Byte 3</entry>
+ <entry>Byte 4</entry>
+ <entry>Byte 3</entry>
+ <entry>Byte 4</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>1</entry>
+ <entry>Latin-2</entry>
+ <entry>11</entry>
+ <entry>APL</entry>
+ </row>
+ <row>
+ <entry>2</entry>
+ <entry>Latin-3</entry>
+ <entry>12</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>3</entry>
+ <entry>Latin-4</entry>
+ <entry>13</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>4</entry>
+ <entry>Kana</entry>
+ <entry>14</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>5</entry>
+ <entry>Arabic</entry>
+ <entry>15</entry>
+ <entry>Latin-5</entry>
+ </row>
+ <row>
+ <entry>6</entry>
+ <entry>Cyrillic</entry>
+ <entry>16</entry>
+ <entry>Latin-6</entry>
+ </row>
+ <row>
+ <entry>7</entry>
+ <entry>Greek</entry>
+ <entry>17</entry>
+ <entry>Latin-7</entry>
+ </row>
+ <row>
+ <entry>8</entry>
+ <entry>Technical</entry>
+ <entry>18</entry>
+ <entry>Latin-8</entry>
+ </row>
+ <row>
+ <entry>9</entry>
+ <entry>Special</entry>
+ <entry>19</entry>
+ <entry>Latin-9</entry>
+ </row>
+ <row>
+ <entry>10</entry>
+ <entry>Publishing</entry>
+ <entry>32</entry>
+ <entry>Currency</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+Each character set contains gaps where codes have been removed that
+were duplicates with codes in previous character sets (that is,
+character sets with lesser byte 3 value).
+</para>
+
+<para>
+The Latin, Arabic, Cyrillic, Greek, Hebrew, and Thai sets were taken
+from the early drafts of the relevant ISO 8859 parts available at the
+time. However, in the case of the Cyrillic and Greek sets, these
+turned out differently in the final versions of the ISO standard. The
+Technical, Special, and Publishing sets are based on Digital Equipment
+Corporation standards, as no equivalent international standards were
+available at the time.
+</para>
+
+<para>
+The table below lists all standardized Legacy KEYSYMs, along with the
+name used in the source document. Where there exists an unambiguous
+equivalent in Unicode, as it is the case with all ISO 8859 characters,
+it is given in the second column as a cross reference. Where there is
+no Unicode number provided, the exact semantics of the KEYSYM may have
+been lost and a Unicode KEYSYM should be used instead, if available.
+</para>
+
+<para>
+As support of Unicode KEYSYMs increases, some or all of the Legacy
+KEYSYMs may be phased out and withdrawn in future versions of this
+standard. Most KEYSYMs in the sets Technical, Special, Publishing, APL
+and Currency (with the exception of #x20AC) were probably never used
+in practice, and were not supported by pre-Unicode fonts. In
+particular, the Currency set, which was copied from Unicode, has
+already been deprecated by the introduction of the Unicode KEYSYMs.
+</para>
+
+<informaltable frame="topbot">
+ <tgroup cols='4' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*' />
+ <colspec colname='c2' colwidth='1.0*' />
+ <colspec colname='c3' colwidth='5.0*' />
+ <colspec colname='c4' colwidth='1.0*' />
+ <thead>
+ <row rowsep="1">
+ <entry>KEYSYM value</entry>
+ <entry>Unicode value</entry>
+ <entry>Name</entry>
+ <entry>Set</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>#x01A1</entry>
+ <entry>U+0104</entry>
+ <entry>LATIN CAPITAL LETTER A WITH OGONEK</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01A2</entry>
+ <entry>U+02D8</entry>
+ <entry>BREVE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01A3</entry>
+ <entry>U+0141</entry>
+ <entry>LATIN CAPITAL LETTER L WITH STROKE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01A5</entry>
+ <entry>U+013D</entry>
+ <entry>LATIN CAPITAL LETTER L WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01A6</entry>
+ <entry>U+015A</entry>
+ <entry>LATIN CAPITAL LETTER S WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01A9</entry>
+ <entry>U+0160</entry>
+ <entry>LATIN CAPITAL LETTER S WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01AA</entry>
+ <entry>U+015E</entry>
+ <entry>LATIN CAPITAL LETTER S WITH CEDILLA</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01AB</entry>
+ <entry>U+0164</entry>
+ <entry>LATIN CAPITAL LETTER T WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01AC</entry>
+ <entry>U+0179</entry>
+ <entry>LATIN CAPITAL LETTER Z WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01AE</entry>
+ <entry>U+017D</entry>
+ <entry>LATIN CAPITAL LETTER Z WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01AF</entry>
+ <entry>U+017B</entry>
+ <entry>LATIN CAPITAL LETTER Z WITH DOT ABOVE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01B1</entry>
+ <entry>U+0105</entry>
+ <entry>LATIN SMALL LETTER A WITH OGONEK</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01B2</entry>
+ <entry>U+02DB</entry>
+ <entry>OGONEK</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01B3</entry>
+ <entry>U+0142</entry>
+ <entry>LATIN SMALL LETTER L WITH STROKE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01B5</entry>
+ <entry>U+013E</entry>
+ <entry>LATIN SMALL LETTER L WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01B6</entry>
+ <entry>U+015B</entry>
+ <entry>LATIN SMALL LETTER S WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01B7</entry>
+ <entry>U+02C7</entry>
+ <entry>CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01B9</entry>
+ <entry>U+0161</entry>
+ <entry>LATIN SMALL LETTER S WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01BA</entry>
+ <entry>U+015F</entry>
+ <entry>LATIN SMALL LETTER S WITH CEDILLA</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01BB</entry>
+ <entry>U+0165</entry>
+ <entry>LATIN SMALL LETTER T WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01BC</entry>
+ <entry>U+017A</entry>
+ <entry>LATIN SMALL LETTER Z WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01BD</entry>
+ <entry>U+02DD</entry>
+ <entry>DOUBLE ACUTE ACCENT</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01BE</entry>
+ <entry>U+017E</entry>
+ <entry>LATIN SMALL LETTER Z WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01BF</entry>
+ <entry>U+017C</entry>
+ <entry>LATIN SMALL LETTER Z WITH DOT ABOVE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01C0</entry>
+ <entry>U+0154</entry>
+ <entry>LATIN CAPITAL LETTER R WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01C3</entry>
+ <entry>U+0102</entry>
+ <entry>LATIN CAPITAL LETTER A WITH BREVE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01C5</entry>
+ <entry>U+0139</entry>
+ <entry>LATIN CAPITAL LETTER L WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01C6</entry>
+ <entry>U+0106</entry>
+ <entry>LATIN CAPITAL LETTER C WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01C8</entry>
+ <entry>U+010C</entry>
+ <entry>LATIN CAPITAL LETTER C WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01CA</entry>
+ <entry>U+0118</entry>
+ <entry>LATIN CAPITAL LETTER E WITH OGONEK</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01CC</entry>
+ <entry>U+011A</entry>
+ <entry>LATIN CAPITAL LETTER E WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01CF</entry>
+ <entry>U+010E</entry>
+ <entry>LATIN CAPITAL LETTER D WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01D0</entry>
+ <entry>U+0110</entry>
+ <entry>LATIN CAPITAL LETTER D WITH STROKE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01D1</entry>
+ <entry>U+0143</entry>
+ <entry>LATIN CAPITAL LETTER N WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01D2</entry>
+ <entry>U+0147</entry>
+ <entry>LATIN CAPITAL LETTER N WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01D5</entry>
+ <entry>U+0150</entry>
+ <entry>LATIN CAPITAL LETTER O WITH DOUBLE ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01D8</entry>
+ <entry>U+0158</entry>
+ <entry>LATIN CAPITAL LETTER R WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01D9</entry>
+ <entry>U+016E</entry>
+ <entry>LATIN CAPITAL LETTER U WITH RING ABOVE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01DB</entry>
+ <entry>U+0170</entry>
+ <entry>LATIN CAPITAL LETTER U WITH DOUBLE ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01DE</entry>
+ <entry>U+0162</entry>
+ <entry>LATIN CAPITAL LETTER T WITH CEDILLA</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01E0</entry>
+ <entry>U+0155</entry>
+ <entry>LATIN SMALL LETTER R WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01E3</entry>
+ <entry>U+0103</entry>
+ <entry>LATIN SMALL LETTER A WITH BREVE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01E5</entry>
+ <entry>U+013A</entry>
+ <entry>LATIN SMALL LETTER L WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01E6</entry>
+ <entry>U+0107</entry>
+ <entry>LATIN SMALL LETTER C WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01E8</entry>
+ <entry>U+010D</entry>
+ <entry>LATIN SMALL LETTER C WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01EA</entry>
+ <entry>U+0119</entry>
+ <entry>LATIN SMALL LETTER E WITH OGONEK</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01EC</entry>
+ <entry>U+011B</entry>
+ <entry>LATIN SMALL LETTER E WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01EF</entry>
+ <entry>U+010F</entry>
+ <entry>LATIN SMALL LETTER D WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01F0</entry>
+ <entry>U+0111</entry>
+ <entry>LATIN SMALL LETTER D WITH STROKE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01F1</entry>
+ <entry>U+0144</entry>
+ <entry>LATIN SMALL LETTER N WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01F2</entry>
+ <entry>U+0148</entry>
+ <entry>LATIN SMALL LETTER N WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01F5</entry>
+ <entry>U+0151</entry>
+ <entry>LATIN SMALL LETTER O WITH DOUBLE ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01F8</entry>
+ <entry>U+0159</entry>
+ <entry>LATIN SMALL LETTER R WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01F9</entry>
+ <entry>U+016F</entry>
+ <entry>LATIN SMALL LETTER U WITH RING ABOVE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01FB</entry>
+ <entry>U+0171</entry>
+ <entry>LATIN SMALL LETTER U WITH DOUBLE ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01FE</entry>
+ <entry>U+0163</entry>
+ <entry>LATIN SMALL LETTER T WITH CEDILLA</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x01FF</entry>
+ <entry>U+02D9</entry>
+ <entry>DOT ABOVE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row>
+ <entry>#x02A1</entry>
+ <entry>U+0126</entry>
+ <entry>LATIN CAPITAL LETTER H WITH STROKE</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row>
+ <entry>#x02A6</entry>
+ <entry>U+0124</entry>
+ <entry>LATIN CAPITAL LETTER H WITH CIRCUMFLEX</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row>
+ <entry>#x02A9</entry>
+ <entry>U+0130</entry>
+ <entry>LATIN CAPITAL LETTER I WITH DOT ABOVE</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row>
+ <entry>#x02AB</entry>
+ <entry>U+011E</entry>
+ <entry>LATIN CAPITAL LETTER G WITH BREVE</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row>
+ <entry>#x02AC</entry>
+ <entry>U+0134</entry>
+ <entry>LATIN CAPITAL LETTER J WITH CIRCUMFLEX</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row>
+ <entry>#x02B1</entry>
+ <entry>U+0127</entry>
+ <entry>LATIN SMALL LETTER H WITH STROKE</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row>
+ <entry>#x02B6</entry>
+ <entry>U+0125</entry>
+ <entry>LATIN SMALL LETTER H WITH CIRCUMFLEX</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row>
+ <entry>#x02B9</entry>
+ <entry>U+0131</entry>
+ <entry>LATIN SMALL LETTER DOTLESS I</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row>
+ <entry>#x02BB</entry>
+ <entry>U+011F</entry>
+ <entry>LATIN SMALL LETTER G WITH BREVE</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row>
+ <entry>#x02BC</entry>
+ <entry>U+0135</entry>
+ <entry>LATIN SMALL LETTER J WITH CIRCUMFLEX</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row>
+ <entry>#x02C5</entry>
+ <entry>U+010A</entry>
+ <entry>LATIN CAPITAL LETTER C WITH DOT ABOVE</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row>
+ <entry>#x02C6</entry>
+ <entry>U+0108</entry>
+ <entry>LATIN CAPITAL LETTER C WITH CIRCUMFLEX</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row>
+ <entry>#x02D5</entry>
+ <entry>U+0120</entry>
+ <entry>LATIN CAPITAL LETTER G WITH DOT ABOVE</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row>
+ <entry>#x02D8</entry>
+ <entry>U+011C</entry>
+ <entry>LATIN CAPITAL LETTER G WITH CIRCUMFLEX</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row>
+ <entry>#x02DD</entry>
+ <entry>U+016C</entry>
+ <entry>LATIN CAPITAL LETTER U WITH BREVE</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row>
+ <entry>#x02DE</entry>
+ <entry>U+015C</entry>
+ <entry>LATIN CAPITAL LETTER S WITH CIRCUMFLEX</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row>
+ <entry>#x02E5</entry>
+ <entry>U+010B</entry>
+ <entry>LATIN SMALL LETTER C WITH DOT ABOVE</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row>
+ <entry>#x02E6</entry>
+ <entry>U+0109</entry>
+ <entry>LATIN SMALL LETTER C WITH CIRCUMFLEX</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row>
+ <entry>#x02F5</entry>
+ <entry>U+0121</entry>
+ <entry>LATIN SMALL LETTER G WITH DOT ABOVE</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row>
+ <entry>#x02F8</entry>
+ <entry>U+011D</entry>
+ <entry>LATIN SMALL LETTER G WITH CIRCUMFLEX</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row>
+ <entry>#x02FD</entry>
+ <entry>U+016D</entry>
+ <entry>LATIN SMALL LETTER U WITH BREVE</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row>
+ <entry>#x02FE</entry>
+ <entry>U+015D</entry>
+ <entry>LATIN SMALL LETTER S WITH CIRCUMFLEX</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row>
+ <entry>#x03A2</entry>
+ <entry>U+0138</entry>
+ <entry>LATIN SMALL LETTER KRA</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03A3</entry>
+ <entry>U+0156</entry>
+ <entry>LATIN CAPITAL LETTER R WITH CEDILLA</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03A5</entry>
+ <entry>U+0128</entry>
+ <entry>LATIN CAPITAL LETTER I WITH TILDE</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03A6</entry>
+ <entry>U+013B</entry>
+ <entry>LATIN CAPITAL LETTER L WITH CEDILLA</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03AA</entry>
+ <entry>U+0112</entry>
+ <entry>LATIN CAPITAL LETTER E WITH MACRON</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03AB</entry>
+ <entry>U+0122</entry>
+ <entry>LATIN CAPITAL LETTER G WITH CEDILLA</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03AC</entry>
+ <entry>U+0166</entry>
+ <entry>LATIN CAPITAL LETTER T WITH STROKE</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03B3</entry>
+ <entry>U+0157</entry>
+ <entry>LATIN SMALL LETTER R WITH CEDILLA</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03B5</entry>
+ <entry>U+0129</entry>
+ <entry>LATIN SMALL LETTER I WITH TILDE</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03B6</entry>
+ <entry>U+013C</entry>
+ <entry>LATIN SMALL LETTER L WITH CEDILLA</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03BA</entry>
+ <entry>U+0113</entry>
+ <entry>LATIN SMALL LETTER E WITH MACRON</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03BB</entry>
+ <entry>U+0123</entry>
+ <entry>LATIN SMALL LETTER G WITH CEDILLA</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03BC</entry>
+ <entry>U+0167</entry>
+ <entry>LATIN SMALL LETTER T WITH STROKE</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03BD</entry>
+ <entry>U+014A</entry>
+ <entry>LATIN CAPITAL LETTER ENG</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03BF</entry>
+ <entry>U+014B</entry>
+ <entry>LATIN SMALL LETTER ENG</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03C0</entry>
+ <entry>U+0100</entry>
+ <entry>LATIN CAPITAL LETTER A WITH MACRON</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03C7</entry>
+ <entry>U+012E</entry>
+ <entry>LATIN CAPITAL LETTER I WITH OGONEK</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03CC</entry>
+ <entry>U+0116</entry>
+ <entry>LATIN CAPITAL LETTER E WITH DOT ABOVE</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03CF</entry>
+ <entry>U+012A</entry>
+ <entry>LATIN CAPITAL LETTER I WITH MACRON</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03D1</entry>
+ <entry>U+0145</entry>
+ <entry>LATIN CAPITAL LETTER N WITH CEDILLA</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03D2</entry>
+ <entry>U+014C</entry>
+ <entry>LATIN CAPITAL LETTER O WITH MACRON</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03D3</entry>
+ <entry>U+0136</entry>
+ <entry>LATIN CAPITAL LETTER K WITH CEDILLA</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03D9</entry>
+ <entry>U+0172</entry>
+ <entry>LATIN CAPITAL LETTER U WITH OGONEK</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03DD</entry>
+ <entry>U+0168</entry>
+ <entry>LATIN CAPITAL LETTER U WITH TILDE</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03DE</entry>
+ <entry>U+016A</entry>
+ <entry>LATIN CAPITAL LETTER U WITH MACRON</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03E0</entry>
+ <entry>U+0101</entry>
+ <entry>LATIN SMALL LETTER A WITH MACRON</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03E7</entry>
+ <entry>U+012F</entry>
+ <entry>LATIN SMALL LETTER I WITH OGONEK</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03EC</entry>
+ <entry>U+0117</entry>
+ <entry>LATIN SMALL LETTER E WITH DOT ABOVE</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03EF</entry>
+ <entry>U+012B</entry>
+ <entry>LATIN SMALL LETTER I WITH MACRON</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03F1</entry>
+ <entry>U+0146</entry>
+ <entry>LATIN SMALL LETTER N WITH CEDILLA</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03F2</entry>
+ <entry>U+014D</entry>
+ <entry>LATIN SMALL LETTER O WITH MACRON</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03F3</entry>
+ <entry>U+0137</entry>
+ <entry>LATIN SMALL LETTER K WITH CEDILLA</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03F9</entry>
+ <entry>U+0173</entry>
+ <entry>LATIN SMALL LETTER U WITH OGONEK</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03FD</entry>
+ <entry>U+0169</entry>
+ <entry>LATIN SMALL LETTER U WITH TILDE</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x03FE</entry>
+ <entry>U+016B</entry>
+ <entry>LATIN SMALL LETTER U WITH MACRON</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row>
+ <entry>#x047E</entry>
+ <entry>U+203E</entry>
+ <entry>OVERLINE</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04A1</entry>
+ <entry>U+3002</entry>
+ <entry>KANA FULL STOP</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04A2</entry>
+ <entry>U+300C</entry>
+ <entry>KANA OPENING BRACKET</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04A3</entry>
+ <entry>U+300D</entry>
+ <entry>KANA CLOSING BRACKET</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04A4</entry>
+ <entry>U+3001</entry>
+ <entry>KANA COMMA</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04A5</entry>
+ <entry>U+30FB</entry>
+ <entry>KANA CONJUNCTIVE</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04A6</entry>
+ <entry>U+30F2</entry>
+ <entry>KANA LETTER WO</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04A7</entry>
+ <entry>U+30A1</entry>
+ <entry>KANA LETTER SMALL A</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04A8</entry>
+ <entry>U+30A3</entry>
+ <entry>KANA LETTER SMALL I</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04A9</entry>
+ <entry>U+30A5</entry>
+ <entry>KANA LETTER SMALL U</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04AA</entry>
+ <entry>U+30A7</entry>
+ <entry>KANA LETTER SMALL E</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04AB</entry>
+ <entry>U+30A9</entry>
+ <entry>KANA LETTER SMALL O</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04AC</entry>
+ <entry>U+30E3</entry>
+ <entry>KANA LETTER SMALL YA</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04AD</entry>
+ <entry>U+30E5</entry>
+ <entry>KANA LETTER SMALL YU</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04AE</entry>
+ <entry>U+30E7</entry>
+ <entry>KANA LETTER SMALL YO</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04AF</entry>
+ <entry>U+30C3</entry>
+ <entry>KANA LETTER SMALL TSU</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04B0</entry>
+ <entry>U+30FC</entry>
+ <entry>PROLONGED SOUND SYMBOL</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04B1</entry>
+ <entry>U+30A2</entry>
+ <entry>KANA LETTER A</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04B2</entry>
+ <entry>U+30A4</entry>
+ <entry>KANA LETTER I</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04B3</entry>
+ <entry>U+30A6</entry>
+ <entry>KANA LETTER U</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04B4</entry>
+ <entry>U+30A8</entry>
+ <entry>KANA LETTER E</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04B5</entry>
+ <entry>U+30AA</entry>
+ <entry>KANA LETTER O</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04B6</entry>
+ <entry>U+30AB</entry>
+ <entry>KANA LETTER KA</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04B7</entry>
+ <entry>U+30AD</entry>
+ <entry>KANA LETTER KI</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04B8</entry>
+ <entry>U+30AF</entry>
+ <entry>KANA LETTER KU</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04B9</entry>
+ <entry>U+30B1</entry>
+ <entry>KANA LETTER KE</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04BA</entry>
+ <entry>U+30B3</entry>
+ <entry>KANA LETTER KO</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04BB</entry>
+ <entry>U+30B5</entry>
+ <entry>KANA LETTER SA</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04BC</entry>
+ <entry>U+30B7</entry>
+ <entry>KANA LETTER SHI</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04BD</entry>
+ <entry>U+30B9</entry>
+ <entry>KANA LETTER SU</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04BE</entry>
+ <entry>U+30BB</entry>
+ <entry>KANA LETTER SE</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04BF</entry>
+ <entry>U+30BD</entry>
+ <entry>KANA LETTER SO</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04C0</entry>
+ <entry>U+30BF</entry>
+ <entry>KANA LETTER TA</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04C1</entry>
+ <entry>U+30C1</entry>
+ <entry>KANA LETTER CHI</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04C2</entry>
+ <entry>U+30C4</entry>
+ <entry>KANA LETTER TSU</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04C3</entry>
+ <entry>U+30C6</entry>
+ <entry>KANA LETTER TE</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04C4</entry>
+ <entry>U+30C8</entry>
+ <entry>KANA LETTER TO</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04C5</entry>
+ <entry>U+30CA</entry>
+ <entry>KANA LETTER NA</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04C6</entry>
+ <entry>U+30CB</entry>
+ <entry>KANA LETTER NI</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04C7</entry>
+ <entry>U+30CC</entry>
+ <entry>KANA LETTER NU</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04C8</entry>
+ <entry>U+30CD</entry>
+ <entry>KANA LETTER NE</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04C9</entry>
+ <entry>U+30CE</entry>
+ <entry>KANA LETTER NO</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04CA</entry>
+ <entry>U+30CF</entry>
+ <entry>KANA LETTER HA</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04CB</entry>
+ <entry>U+30D2</entry>
+ <entry>KANA LETTER HI</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04CC</entry>
+ <entry>U+30D5</entry>
+ <entry>KANA LETTER FU</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04CD</entry>
+ <entry>U+30D8</entry>
+ <entry>KANA LETTER HE</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04CE</entry>
+ <entry>U+30DB</entry>
+ <entry>KANA LETTER HO</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04CF</entry>
+ <entry>U+30DE</entry>
+ <entry>KANA LETTER MA</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04D0</entry>
+ <entry>U+30DF</entry>
+ <entry>KANA LETTER MI</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04D1</entry>
+ <entry>U+30E0</entry>
+ <entry>KANA LETTER MU</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04D2</entry>
+ <entry>U+30E1</entry>
+ <entry>KANA LETTER ME</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04D3</entry>
+ <entry>U+30E2</entry>
+ <entry>KANA LETTER MO</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04D4</entry>
+ <entry>U+30E4</entry>
+ <entry>KANA LETTER YA</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04D5</entry>
+ <entry>U+30E6</entry>
+ <entry>KANA LETTER YU</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04D6</entry>
+ <entry>U+30E8</entry>
+ <entry>KANA LETTER YO</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04D7</entry>
+ <entry>U+30E9</entry>
+ <entry>KANA LETTER RA</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04D8</entry>
+ <entry>U+30EA</entry>
+ <entry>KANA LETTER RI</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04D9</entry>
+ <entry>U+30EB</entry>
+ <entry>KANA LETTER RU</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04DA</entry>
+ <entry>U+30EC</entry>
+ <entry>KANA LETTER RE</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04DB</entry>
+ <entry>U+30ED</entry>
+ <entry>KANA LETTER RO</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04DC</entry>
+ <entry>U+30EF</entry>
+ <entry>KANA LETTER WA</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04DD</entry>
+ <entry>U+30F3</entry>
+ <entry>KANA LETTER N</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04DE</entry>
+ <entry>U+309B</entry>
+ <entry>VOICED SOUND SYMBOL</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x04DF</entry>
+ <entry>U+309C</entry>
+ <entry>SEMIVOICED SOUND SYMBOL</entry>
+ <entry>Kana</entry>
+ </row>
+ <row>
+ <entry>#x05AC</entry>
+ <entry>U+060C</entry>
+ <entry>ARABIC COMMA</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05BB</entry>
+ <entry>U+061B</entry>
+ <entry>ARABIC SEMICOLON</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05BF</entry>
+ <entry>U+061F</entry>
+ <entry>ARABIC QUESTION MARK</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05C1</entry>
+ <entry>U+0621</entry>
+ <entry>ARABIC LETTER HAMZA</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05C2</entry>
+ <entry>U+0622</entry>
+ <entry>ARABIC LETTER ALEF WITH MADDA ABOVE</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05C3</entry>
+ <entry>U+0623</entry>
+ <entry>ARABIC LETTER ALEF WITH HAMZA ABOVE</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05C4</entry>
+ <entry>U+0624</entry>
+ <entry>ARABIC LETTER WAW WITH HAMZA ABOVE</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05C5</entry>
+ <entry>U+0625</entry>
+ <entry>ARABIC LETTER ALEF WITH HAMZA BELOW</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05C6</entry>
+ <entry>U+0626</entry>
+ <entry>ARABIC LETTER YEH WITH HAMZA ABOVE</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05C7</entry>
+ <entry>U+0627</entry>
+ <entry>ARABIC LETTER ALEF</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05C8</entry>
+ <entry>U+0628</entry>
+ <entry>ARABIC LETTER BEH</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05C9</entry>
+ <entry>U+0629</entry>
+ <entry>ARABIC LETTER TEH MARBUTA</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05CA</entry>
+ <entry>U+062A</entry>
+ <entry>ARABIC LETTER TEH</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05CB</entry>
+ <entry>U+062B</entry>
+ <entry>ARABIC LETTER THEH</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05CC</entry>
+ <entry>U+062C</entry>
+ <entry>ARABIC LETTER JEEM</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05CD</entry>
+ <entry>U+062D</entry>
+ <entry>ARABIC LETTER HAH</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05CE</entry>
+ <entry>U+062E</entry>
+ <entry>ARABIC LETTER KHAH</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05CF</entry>
+ <entry>U+062F</entry>
+ <entry>ARABIC LETTER DAL</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05D0</entry>
+ <entry>U+0630</entry>
+ <entry>ARABIC LETTER THAL</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05D1</entry>
+ <entry>U+0631</entry>
+ <entry>ARABIC LETTER REH</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05D2</entry>
+ <entry>U+0632</entry>
+ <entry>ARABIC LETTER ZAIN</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05D3</entry>
+ <entry>U+0633</entry>
+ <entry>ARABIC LETTER SEEN</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05D4</entry>
+ <entry>U+0634</entry>
+ <entry>ARABIC LETTER SHEEN</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05D5</entry>
+ <entry>U+0635</entry>
+ <entry>ARABIC LETTER SAD</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05D6</entry>
+ <entry>U+0636</entry>
+ <entry>ARABIC LETTER DAD</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05D7</entry>
+ <entry>U+0637</entry>
+ <entry>ARABIC LETTER TAH</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05D8</entry>
+ <entry>U+0638</entry>
+ <entry>ARABIC LETTER ZAH</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05D9</entry>
+ <entry>U+0639</entry>
+ <entry>ARABIC LETTER AIN</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05DA</entry>
+ <entry>U+063A</entry>
+ <entry>ARABIC LETTER GHAIN</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05E0</entry>
+ <entry>U+0640</entry>
+ <entry>ARABIC TATWEEL</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05E1</entry>
+ <entry>U+0641</entry>
+ <entry>ARABIC LETTER FEH</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05E2</entry>
+ <entry>U+0642</entry>
+ <entry>ARABIC LETTER QAF</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05E3</entry>
+ <entry>U+0643</entry>
+ <entry>ARABIC LETTER KAF</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05E4</entry>
+ <entry>U+0644</entry>
+ <entry>ARABIC LETTER LAM</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05E5</entry>
+ <entry>U+0645</entry>
+ <entry>ARABIC LETTER MEEM</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05E6</entry>
+ <entry>U+0646</entry>
+ <entry>ARABIC LETTER NOON</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05E7</entry>
+ <entry>U+0647</entry>
+ <entry>ARABIC LETTER HEH</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05E8</entry>
+ <entry>U+0648</entry>
+ <entry>ARABIC LETTER WAW</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05E9</entry>
+ <entry>U+0649</entry>
+ <entry>ARABIC LETTER ALEF MAKSURA</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05EA</entry>
+ <entry>U+064A</entry>
+ <entry>ARABIC LETTER YEH</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05EB</entry>
+ <entry>U+064B</entry>
+ <entry>ARABIC FATHATAN</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05EC</entry>
+ <entry>U+064C</entry>
+ <entry>ARABIC DAMMATAN</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05ED</entry>
+ <entry>U+064D</entry>
+ <entry>ARABIC KASRATAN</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05EE</entry>
+ <entry>U+064E</entry>
+ <entry>ARABIC FATHA</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05EF</entry>
+ <entry>U+064F</entry>
+ <entry>ARABIC DAMMA</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05F0</entry>
+ <entry>U+0650</entry>
+ <entry>ARABIC KASRA</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05F1</entry>
+ <entry>U+0651</entry>
+ <entry>ARABIC SHADDA</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x05F2</entry>
+ <entry>U+0652</entry>
+ <entry>ARABIC SUKUN</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row>
+ <entry>#x06A1</entry>
+ <entry>U+0452</entry>
+ <entry>CYRILLIC SMALL LETTER DJE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06A2</entry>
+ <entry>U+0453</entry>
+ <entry>CYRILLIC SMALL LETTER GJE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06A3</entry>
+ <entry>U+0451</entry>
+ <entry>CYRILLIC SMALL LETTER IO</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06A4</entry>
+ <entry>U+0454</entry>
+ <entry>CYRILLIC SMALL LETTER UKRAINIAN IE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06A5</entry>
+ <entry>U+0455</entry>
+ <entry>CYRILLIC SMALL LETTER DZE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06A6</entry>
+ <entry>U+0456</entry>
+ <entry>CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06A7</entry>
+ <entry>U+0457</entry>
+ <entry>CYRILLIC SMALL LETTER YI</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06A8</entry>
+ <entry>U+0458</entry>
+ <entry>CYRILLIC SMALL LETTER JE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06A9</entry>
+ <entry>U+0459</entry>
+ <entry>CYRILLIC SMALL LETTER LJE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06AA</entry>
+ <entry>U+045A</entry>
+ <entry>CYRILLIC SMALL LETTER NJE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06AB</entry>
+ <entry>U+045B</entry>
+ <entry>CYRILLIC SMALL LETTER TSHE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06AC</entry>
+ <entry>U+045C</entry>
+ <entry>CYRILLIC SMALL LETTER KJE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06AD</entry>
+ <entry>U+0491</entry>
+ <entry>CYRILLIC SMALL LETTER GHE WITH UPTURN</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06AE</entry>
+ <entry>U+045E</entry>
+ <entry>CYRILLIC SMALL LETTER SHORT U</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06AF</entry>
+ <entry>U+045F</entry>
+ <entry>CYRILLIC SMALL LETTER DZHE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06B0</entry>
+ <entry>U+2116</entry>
+ <entry>NUMERO SIGN</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06B1</entry>
+ <entry>U+0402</entry>
+ <entry>CYRILLIC CAPITAL LETTER DJE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06B2</entry>
+ <entry>U+0403</entry>
+ <entry>CYRILLIC CAPITAL LETTER GJE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06B3</entry>
+ <entry>U+0401</entry>
+ <entry>CYRILLIC CAPITAL LETTER IO</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06B4</entry>
+ <entry>U+0404</entry>
+ <entry>CYRILLIC CAPITAL LETTER UKRAINIAN IE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06B5</entry>
+ <entry>U+0405</entry>
+ <entry>CYRILLIC CAPITAL LETTER DZE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06B6</entry>
+ <entry>U+0406</entry>
+ <entry>CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06B7</entry>
+ <entry>U+0407</entry>
+ <entry>CYRILLIC CAPITAL LETTER YI</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06B8</entry>
+ <entry>U+0408</entry>
+ <entry>CYRILLIC CAPITAL LETTER JE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06B9</entry>
+ <entry>U+0409</entry>
+ <entry>CYRILLIC CAPITAL LETTER LJE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06BA</entry>
+ <entry>U+040A</entry>
+ <entry>CYRILLIC CAPITAL LETTER NJE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06BB</entry>
+ <entry>U+040B</entry>
+ <entry>CYRILLIC CAPITAL LETTER TSHE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06BC</entry>
+ <entry>U+040C</entry>
+ <entry>CYRILLIC CAPITAL LETTER KJE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06BD</entry>
+ <entry>U+0490</entry>
+ <entry>CYRILLIC CAPITAL LETTER GHE WITH UPTURN</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06BE</entry>
+ <entry>U+040E</entry>
+ <entry>CYRILLIC CAPITAL LETTER SHORT U</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06BF</entry>
+ <entry>U+040F</entry>
+ <entry>CYRILLIC CAPITAL LETTER DZHE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06C0</entry>
+ <entry>U+044E</entry>
+ <entry>CYRILLIC SMALL LETTER YU</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06C1</entry>
+ <entry>U+0430</entry>
+ <entry>CYRILLIC SMALL LETTER A</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06C2</entry>
+ <entry>U+0431</entry>
+ <entry>CYRILLIC SMALL LETTER BE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06C3</entry>
+ <entry>U+0446</entry>
+ <entry>CYRILLIC SMALL LETTER TSE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06C4</entry>
+ <entry>U+0434</entry>
+ <entry>CYRILLIC SMALL LETTER DE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06C5</entry>
+ <entry>U+0435</entry>
+ <entry>CYRILLIC SMALL LETTER IE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06C6</entry>
+ <entry>U+0444</entry>
+ <entry>CYRILLIC SMALL LETTER EF</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06C7</entry>
+ <entry>U+0433</entry>
+ <entry>CYRILLIC SMALL LETTER GHE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06C8</entry>
+ <entry>U+0445</entry>
+ <entry>CYRILLIC SMALL LETTER HA</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06C9</entry>
+ <entry>U+0438</entry>
+ <entry>CYRILLIC SMALL LETTER I</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06CA</entry>
+ <entry>U+0439</entry>
+ <entry>CYRILLIC SMALL LETTER SHORT I</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06CB</entry>
+ <entry>U+043A</entry>
+ <entry>CYRILLIC SMALL LETTER KA</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06CC</entry>
+ <entry>U+043B</entry>
+ <entry>CYRILLIC SMALL LETTER EL</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06CD</entry>
+ <entry>U+043C</entry>
+ <entry>CYRILLIC SMALL LETTER EM</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06CE</entry>
+ <entry>U+043D</entry>
+ <entry>CYRILLIC SMALL LETTER EN</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06CF</entry>
+ <entry>U+043E</entry>
+ <entry>CYRILLIC SMALL LETTER O</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06D0</entry>
+ <entry>U+043F</entry>
+ <entry>CYRILLIC SMALL LETTER PE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06D1</entry>
+ <entry>U+044F</entry>
+ <entry>CYRILLIC SMALL LETTER YA</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06D2</entry>
+ <entry>U+0440</entry>
+ <entry>CYRILLIC SMALL LETTER ER</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06D3</entry>
+ <entry>U+0441</entry>
+ <entry>CYRILLIC SMALL LETTER ES</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06D4</entry>
+ <entry>U+0442</entry>
+ <entry>CYRILLIC SMALL LETTER TE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06D5</entry>
+ <entry>U+0443</entry>
+ <entry>CYRILLIC SMALL LETTER U</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06D6</entry>
+ <entry>U+0436</entry>
+ <entry>CYRILLIC SMALL LETTER ZHE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06D7</entry>
+ <entry>U+0432</entry>
+ <entry>CYRILLIC SMALL LETTER VE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06D8</entry>
+ <entry>U+044C</entry>
+ <entry>CYRILLIC SMALL LETTER SOFT SIGN</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06D9</entry>
+ <entry>U+044B</entry>
+ <entry>CYRILLIC SMALL LETTER YERU</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06DA</entry>
+ <entry>U+0437</entry>
+ <entry>CYRILLIC SMALL LETTER ZE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06DB</entry>
+ <entry>U+0448</entry>
+ <entry>CYRILLIC SMALL LETTER SHA</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06DC</entry>
+ <entry>U+044D</entry>
+ <entry>CYRILLIC SMALL LETTER E</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06DD</entry>
+ <entry>U+0449</entry>
+ <entry>CYRILLIC SMALL LETTER SHCHA</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06DE</entry>
+ <entry>U+0447</entry>
+ <entry>CYRILLIC SMALL LETTER CHE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06DF</entry>
+ <entry>U+044A</entry>
+ <entry>CYRILLIC SMALL LETTER HARD SIGN</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06E0</entry>
+ <entry>U+042E</entry>
+ <entry>CYRILLIC CAPITAL LETTER YU</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06E1</entry>
+ <entry>U+0410</entry>
+ <entry>CYRILLIC CAPITAL LETTER A</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06E2</entry>
+ <entry>U+0411</entry>
+ <entry>CYRILLIC CAPITAL LETTER BE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06E3</entry>
+ <entry>U+0426</entry>
+ <entry>CYRILLIC CAPITAL LETTER TSE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06E4</entry>
+ <entry>U+0414</entry>
+ <entry>CYRILLIC CAPITAL LETTER DE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06E5</entry>
+ <entry>U+0415</entry>
+ <entry>CYRILLIC CAPITAL LETTER IE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06E6</entry>
+ <entry>U+0424</entry>
+ <entry>CYRILLIC CAPITAL LETTER EF</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06E7</entry>
+ <entry>U+0413</entry>
+ <entry>CYRILLIC CAPITAL LETTER GHE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06E8</entry>
+ <entry>U+0425</entry>
+ <entry>CYRILLIC CAPITAL LETTER HA</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06E9</entry>
+ <entry>U+0418</entry>
+ <entry>CYRILLIC CAPITAL LETTER I</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06EA</entry>
+ <entry>U+0419</entry>
+ <entry>CYRILLIC CAPITAL LETTER SHORT I</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06EB</entry>
+ <entry>U+041A</entry>
+ <entry>CYRILLIC CAPITAL LETTER KA</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06EC</entry>
+ <entry>U+041B</entry>
+ <entry>CYRILLIC CAPITAL LETTER EL</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06ED</entry>
+ <entry>U+041C</entry>
+ <entry>CYRILLIC CAPITAL LETTER EM</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06EE</entry>
+ <entry>U+041D</entry>
+ <entry>CYRILLIC CAPITAL LETTER EN</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06EF</entry>
+ <entry>U+041E</entry>
+ <entry>CYRILLIC CAPITAL LETTER O</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06F0</entry>
+ <entry>U+041F</entry>
+ <entry>CYRILLIC CAPITAL LETTER PE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06F1</entry>
+ <entry>U+042F</entry>
+ <entry>CYRILLIC CAPITAL LETTER YA</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06F2</entry>
+ <entry>U+0420</entry>
+ <entry>CYRILLIC CAPITAL LETTER ER</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06F3</entry>
+ <entry>U+0421</entry>
+ <entry>CYRILLIC CAPITAL LETTER ES</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06F4</entry>
+ <entry>U+0422</entry>
+ <entry>CYRILLIC CAPITAL LETTER TE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06F5</entry>
+ <entry>U+0423</entry>
+ <entry>CYRILLIC CAPITAL LETTER U</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06F6</entry>
+ <entry>U+0416</entry>
+ <entry>CYRILLIC CAPITAL LETTER ZHE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06F7</entry>
+ <entry>U+0412</entry>
+ <entry>CYRILLIC CAPITAL LETTER VE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06F8</entry>
+ <entry>U+042C</entry>
+ <entry>CYRILLIC CAPITAL LETTER SOFT SIGN</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06F9</entry>
+ <entry>U+042B</entry>
+ <entry>CYRILLIC CAPITAL LETTER YERU</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06FA</entry>
+ <entry>U+0417</entry>
+ <entry>CYRILLIC CAPITAL LETTER ZE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06FB</entry>
+ <entry>U+0428</entry>
+ <entry>CYRILLIC CAPITAL LETTER SHA</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06FC</entry>
+ <entry>U+042D</entry>
+ <entry>CYRILLIC CAPITAL LETTER E</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06FD</entry>
+ <entry>U+0429</entry>
+ <entry>CYRILLIC CAPITAL LETTER SHCHA</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06FE</entry>
+ <entry>U+0427</entry>
+ <entry>CYRILLIC CAPITAL LETTER CHE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x06FF</entry>
+ <entry>U+042A</entry>
+ <entry>CYRILLIC CAPITAL LETTER HARD SIGN</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row>
+ <entry>#x07A1</entry>
+ <entry>U+0386</entry>
+ <entry>GREEK CAPITAL LETTER ALPHA WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07A2</entry>
+ <entry>U+0388</entry>
+ <entry>GREEK CAPITAL LETTER EPSILON WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07A3</entry>
+ <entry>U+0389</entry>
+ <entry>GREEK CAPITAL LETTER ETA WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07A4</entry>
+ <entry>U+038A</entry>
+ <entry>GREEK CAPITAL LETTER IOTA WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07A5</entry>
+ <entry>U+03AA</entry>
+ <entry>GREEK CAPITAL LETTER IOTA WITH DIALYTIKA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07A7</entry>
+ <entry>U+038C</entry>
+ <entry>GREEK CAPITAL LETTER OMICRON WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07A8</entry>
+ <entry>U+038E</entry>
+ <entry>GREEK CAPITAL LETTER UPSILON WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07A9</entry>
+ <entry>U+03AB</entry>
+ <entry>GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07AB</entry>
+ <entry>U+038F</entry>
+ <entry>GREEK CAPITAL LETTER OMEGA WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07AE</entry>
+ <entry>U+0385</entry>
+ <entry>GREEK DIALYTIKA TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07AF</entry>
+ <entry>U+2015</entry>
+ <entry>HORIZONTAL BAR</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07B1</entry>
+ <entry>U+03AC</entry>
+ <entry>GREEK SMALL LETTER ALPHA WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07B2</entry>
+ <entry>U+03AD</entry>
+ <entry>GREEK SMALL LETTER EPSILON WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07B3</entry>
+ <entry>U+03AE</entry>
+ <entry>GREEK SMALL LETTER ETA WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07B4</entry>
+ <entry>U+03AF</entry>
+ <entry>GREEK SMALL LETTER IOTA WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07B5</entry>
+ <entry>U+03CA</entry>
+ <entry>GREEK SMALL LETTER IOTA WITH DIALYTIKA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07B6</entry>
+ <entry>U+0390</entry>
+ <entry>GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07B7</entry>
+ <entry>U+03CC</entry>
+ <entry>GREEK SMALL LETTER OMICRON WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07B8</entry>
+ <entry>U+03CD</entry>
+ <entry>GREEK SMALL LETTER UPSILON WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07B9</entry>
+ <entry>U+03CB</entry>
+ <entry>GREEK SMALL LETTER UPSILON WITH DIALYTIKA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07BA</entry>
+ <entry>U+03B0</entry>
+ <entry>GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07BB</entry>
+ <entry>U+03CE</entry>
+ <entry>GREEK SMALL LETTER OMEGA WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07C1</entry>
+ <entry>U+0391</entry>
+ <entry>GREEK CAPITAL LETTER ALPHA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07C2</entry>
+ <entry>U+0392</entry>
+ <entry>GREEK CAPITAL LETTER BETA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07C3</entry>
+ <entry>U+0393</entry>
+ <entry>GREEK CAPITAL LETTER GAMMA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07C4</entry>
+ <entry>U+0394</entry>
+ <entry>GREEK CAPITAL LETTER DELTA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07C5</entry>
+ <entry>U+0395</entry>
+ <entry>GREEK CAPITAL LETTER EPSILON</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07C6</entry>
+ <entry>U+0396</entry>
+ <entry>GREEK CAPITAL LETTER ZETA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07C7</entry>
+ <entry>U+0397</entry>
+ <entry>GREEK CAPITAL LETTER ETA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07C8</entry>
+ <entry>U+0398</entry>
+ <entry>GREEK CAPITAL LETTER THETA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07C9</entry>
+ <entry>U+0399</entry>
+ <entry>GREEK CAPITAL LETTER IOTA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07CA</entry>
+ <entry>U+039A</entry>
+ <entry>GREEK CAPITAL LETTER KAPPA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07CB</entry>
+ <entry>U+039B</entry>
+ <entry>GREEK CAPITAL LETTER LAMDA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07CC</entry>
+ <entry>U+039C</entry>
+ <entry>GREEK CAPITAL LETTER MU</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07CD</entry>
+ <entry>U+039D</entry>
+ <entry>GREEK CAPITAL LETTER NU</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07CE</entry>
+ <entry>U+039E</entry>
+ <entry>GREEK CAPITAL LETTER XI</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07CF</entry>
+ <entry>U+039F</entry>
+ <entry>GREEK CAPITAL LETTER OMICRON</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07D0</entry>
+ <entry>U+03A0</entry>
+ <entry>GREEK CAPITAL LETTER PI</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07D1</entry>
+ <entry>U+03A1</entry>
+ <entry>GREEK CAPITAL LETTER RHO</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07D2</entry>
+ <entry>U+03A3</entry>
+ <entry>GREEK CAPITAL LETTER SIGMA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07D4</entry>
+ <entry>U+03A4</entry>
+ <entry>GREEK CAPITAL LETTER TAU</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07D5</entry>
+ <entry>U+03A5</entry>
+ <entry>GREEK CAPITAL LETTER UPSILON</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07D6</entry>
+ <entry>U+03A6</entry>
+ <entry>GREEK CAPITAL LETTER PHI</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07D7</entry>
+ <entry>U+03A7</entry>
+ <entry>GREEK CAPITAL LETTER CHI</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07D8</entry>
+ <entry>U+03A8</entry>
+ <entry>GREEK CAPITAL LETTER PSI</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07D9</entry>
+ <entry>U+03A9</entry>
+ <entry>GREEK CAPITAL LETTER OMEGA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07E1</entry>
+ <entry>U+03B1</entry>
+ <entry>GREEK SMALL LETTER ALPHA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07E2</entry>
+ <entry>U+03B2</entry>
+ <entry>GREEK SMALL LETTER BETA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07E3</entry>
+ <entry>U+03B3</entry>
+ <entry>GREEK SMALL LETTER GAMMA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07E4</entry>
+ <entry>U+03B4</entry>
+ <entry>GREEK SMALL LETTER DELTA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07E5</entry>
+ <entry>U+03B5</entry>
+ <entry>GREEK SMALL LETTER EPSILON</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07E6</entry>
+ <entry>U+03B6</entry>
+ <entry>GREEK SMALL LETTER ZETA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07E7</entry>
+ <entry>U+03B7</entry>
+ <entry>GREEK SMALL LETTER ETA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07E8</entry>
+ <entry>U+03B8</entry>
+ <entry>GREEK SMALL LETTER THETA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07E9</entry>
+ <entry>U+03B9</entry>
+ <entry>GREEK SMALL LETTER IOTA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07EA</entry>
+ <entry>U+03BA</entry>
+ <entry>GREEK SMALL LETTER KAPPA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07EB</entry>
+ <entry>U+03BB</entry>
+ <entry>GREEK SMALL LETTER LAMDA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07EC</entry>
+ <entry>U+03BC</entry>
+ <entry>GREEK SMALL LETTER MU</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07ED</entry>
+ <entry>U+03BD</entry>
+ <entry>GREEK SMALL LETTER NU</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07EE</entry>
+ <entry>U+03BE</entry>
+ <entry>GREEK SMALL LETTER XI</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07EF</entry>
+ <entry>U+03BF</entry>
+ <entry>GREEK SMALL LETTER OMICRON</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07F0</entry>
+ <entry>U+03C0</entry>
+ <entry>GREEK SMALL LETTER PI</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07F1</entry>
+ <entry>U+03C1</entry>
+ <entry>GREEK SMALL LETTER RHO</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07F2</entry>
+ <entry>U+03C3</entry>
+ <entry>GREEK SMALL LETTER SIGMA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07F3</entry>
+ <entry>U+03C2</entry>
+ <entry>GREEK SMALL LETTER FINAL SIGMA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07F4</entry>
+ <entry>U+03C4</entry>
+ <entry>GREEK SMALL LETTER TAU</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07F5</entry>
+ <entry>U+03C5</entry>
+ <entry>GREEK SMALL LETTER UPSILON</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07F6</entry>
+ <entry>U+03C6</entry>
+ <entry>GREEK SMALL LETTER PHI</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07F7</entry>
+ <entry>U+03C7</entry>
+ <entry>GREEK SMALL LETTER CHI</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07F8</entry>
+ <entry>U+03C8</entry>
+ <entry>GREEK SMALL LETTER PSI</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x07F9</entry>
+ <entry>U+03C9</entry>
+ <entry>GREEK SMALL LETTER OMEGA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row>
+ <entry>#x08A1</entry>
+ <entry>U+23B7</entry>
+ <entry>LEFT RADICAL</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08A2</entry>
+ <entry>-</entry>
+ <entry>TOP LEFT RADICAL</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08A3</entry>
+ <entry>-</entry>
+ <entry>HORIZONTAL CONNECTOR</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08A4</entry>
+ <entry>U+2320</entry>
+ <entry>TOP INTEGRAL</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08A5</entry>
+ <entry>U+2321</entry>
+ <entry>BOTTOM INTEGRAL</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08A6</entry>
+ <entry>-</entry>
+ <entry>VERTICAL CONNECTOR</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08A7</entry>
+ <entry>U+23A1</entry>
+ <entry>TOP LEFT SQUARE BRACKET</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08A8</entry>
+ <entry>U+23A3</entry>
+ <entry>BOTTOM LEFT SQUARE BRACKET</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08A9</entry>
+ <entry>U+23A4</entry>
+ <entry>TOP RIGHT SQUARE BRACKET</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08AA</entry>
+ <entry>U+23A6</entry>
+ <entry>BOTTOM RIGHT SQUARE BRACKET</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08AB</entry>
+ <entry>U+239B</entry>
+ <entry>TOP LEFT PARENTHESIS</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08AC</entry>
+ <entry>U+239D</entry>
+ <entry>BOTTOM LEFT PARENTHESIS</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08AD</entry>
+ <entry>U+239E</entry>
+ <entry>TOP RIGHT PARENTHESIS</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08AE</entry>
+ <entry>U+23A0</entry>
+ <entry>BOTTOM RIGHT PARENTHESIS</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08AF</entry>
+ <entry>U+23A8</entry>
+ <entry>LEFT MIDDLE CURLY BRACE</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08B0</entry>
+ <entry>U+23AC</entry>
+ <entry>RIGHT MIDDLE CURLY BRACE</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08B1</entry>
+ <entry>-</entry>
+ <entry>TOP LEFT SUMMATION</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08B2</entry>
+ <entry>-</entry>
+ <entry>BOTTOM LEFT SUMMATION</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08B3</entry>
+ <entry>-</entry>
+ <entry>TOP VERTICAL SUMMATION CONNECTOR</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08B4</entry>
+ <entry>-</entry>
+ <entry>BOTTOM VERTICAL SUMMATION CONNECTOR</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08B5</entry>
+ <entry>-</entry>
+ <entry>TOP RIGHT SUMMATION</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08B6</entry>
+ <entry>-</entry>
+ <entry>BOTTOM RIGHT SUMMATION</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08B7</entry>
+ <entry>-</entry>
+ <entry>RIGHT MIDDLE SUMMATION</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08BC</entry>
+ <entry>U+2264</entry>
+ <entry>LESS THAN OR EQUAL SIGN</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08BD</entry>
+ <entry>U+2260</entry>
+ <entry>NOT EQUAL SIGN</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08BE</entry>
+ <entry>U+2265</entry>
+ <entry>GREATER THAN OR EQUAL SIGN</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08BF</entry>
+ <entry>U+222B</entry>
+ <entry>INTEGRAL</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08C0</entry>
+ <entry>U+2234</entry>
+ <entry>THEREFORE</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08C1</entry>
+ <entry>U+221D</entry>
+ <entry>VARIATION, PROPORTIONAL TO</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08C2</entry>
+ <entry>U+221E</entry>
+ <entry>INFINITY</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08C5</entry>
+ <entry>U+2207</entry>
+ <entry>NABLA, DEL</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08C8</entry>
+ <entry>U+223C</entry>
+ <entry>IS APPROXIMATE TO</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08C9</entry>
+ <entry>U+2243</entry>
+ <entry>SIMILAR OR EQUAL TO</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08CD</entry>
+ <entry>U+21D4</entry>
+ <entry>IF AND ONLY IF</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08CE</entry>
+ <entry>U+21D2</entry>
+ <entry>IMPLIES</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08CF</entry>
+ <entry>U+2261</entry>
+ <entry>IDENTICAL TO</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08D6</entry>
+ <entry>U+221A</entry>
+ <entry>RADICAL</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08DA</entry>
+ <entry>U+2282</entry>
+ <entry>IS INCLUDED IN</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08DB</entry>
+ <entry>U+2283</entry>
+ <entry>INCLUDES</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08DC</entry>
+ <entry>U+2229</entry>
+ <entry>INTERSECTION</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08DD</entry>
+ <entry>U+222A</entry>
+ <entry>UNION</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08DE</entry>
+ <entry>U+2227</entry>
+ <entry>LOGICAL AND</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08DF</entry>
+ <entry>U+2228</entry>
+ <entry>LOGICAL OR</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08EF</entry>
+ <entry>U+2202</entry>
+ <entry>PARTIAL DERIVATIVE</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08F6</entry>
+ <entry>U+0192</entry>
+ <entry>FUNCTION</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08FB</entry>
+ <entry>U+2190</entry>
+ <entry>LEFT ARROW</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08FC</entry>
+ <entry>U+2191</entry>
+ <entry>UPWARD ARROW</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08FD</entry>
+ <entry>U+2192</entry>
+ <entry>RIGHT ARROW</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x08FE</entry>
+ <entry>U+2193</entry>
+ <entry>DOWNWARD ARROW</entry>
+ <entry>Technical</entry>
+ </row>
+ <row>
+ <entry>#x09DF</entry>
+ <entry>-</entry>
+ <entry>BLANK</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x09E0</entry>
+ <entry>U+25C6</entry>
+ <entry>SOLID DIAMOND</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x09E1</entry>
+ <entry>U+2592</entry>
+ <entry>CHECKERBOARD</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x09E2</entry>
+ <entry>U+2409</entry>
+ <entry>"HT"</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x09E3</entry>
+ <entry>U+240C</entry>
+ <entry>"FF"</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x09E4</entry>
+ <entry>U+240D</entry>
+ <entry>"CR"</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x09E5</entry>
+ <entry>U+240A</entry>
+ <entry>"LF"</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x09E8</entry>
+ <entry>U+2424</entry>
+ <entry>"NL"</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x09E9</entry>
+ <entry>U+240B</entry>
+ <entry>"VT"</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x09EA</entry>
+ <entry>U+2518</entry>
+ <entry>LOWER-RIGHT CORNER</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x09EB</entry>
+ <entry>U+2510</entry>
+ <entry>UPPER-RIGHT CORNER</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x09EC</entry>
+ <entry>U+250C</entry>
+ <entry>UPPER-LEFT CORNER</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x09ED</entry>
+ <entry>U+2514</entry>
+ <entry>LOWER-LEFT CORNER</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x09EE</entry>
+ <entry>U+253C</entry>
+ <entry>CROSSING-LINES</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x09EF</entry>
+ <entry>U+23BA</entry>
+ <entry>HORIZONTAL LINE, SCAN 1</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x09F0</entry>
+ <entry>U+23BB</entry>
+ <entry>HORIZONTAL LINE, SCAN 3</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x09F1</entry>
+ <entry>U+2500</entry>
+ <entry>HORIZONTAL LINE, SCAN 5</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x09F2</entry>
+ <entry>U+23BC</entry>
+ <entry>HORIZONTAL LINE, SCAN 7</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x09F3</entry>
+ <entry>U+23BD</entry>
+ <entry>HORIZONTAL LINE, SCAN 9</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x09F4</entry>
+ <entry>U+251C</entry>
+ <entry>LEFT "T"</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x09F5</entry>
+ <entry>U+2524</entry>
+ <entry>RIGHT "T"</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x09F6</entry>
+ <entry>U+2534</entry>
+ <entry>BOTTOM "T"</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x09F7</entry>
+ <entry>U+252C</entry>
+ <entry>TOP "T"</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x09F8</entry>
+ <entry>U+2502</entry>
+ <entry>VERTICAL BAR</entry>
+ <entry>Special</entry>
+ </row>
+ <row>
+ <entry>#x0AA1</entry>
+ <entry>U+2003</entry>
+ <entry>EM SPACE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AA2</entry>
+ <entry>U+2002</entry>
+ <entry>EN SPACE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AA3</entry>
+ <entry>U+2004</entry>
+ <entry>3/EM SPACE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AA4</entry>
+ <entry>U+2005</entry>
+ <entry>4/EM SPACE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AA5</entry>
+ <entry>U+2007</entry>
+ <entry>DIGIT SPACE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AA6</entry>
+ <entry>U+2008</entry>
+ <entry>PUNCTUATION SPACE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AA7</entry>
+ <entry>U+2009</entry>
+ <entry>THIN SPACE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AA8</entry>
+ <entry>U+200A</entry>
+ <entry>HAIR SPACE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AA9</entry>
+ <entry>U+2014</entry>
+ <entry>EM DASH</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AAA</entry>
+ <entry>U+2013</entry>
+ <entry>EN DASH</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AAC</entry>
+ <entry>-</entry>
+ <entry>SIGNIFICANT BLANK SYMBOL</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AAE</entry>
+ <entry>U+2026</entry>
+ <entry>ELLIPSIS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AAF</entry>
+ <entry>U+2025</entry>
+ <entry>DOUBLE BASELINE DOT</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AB0</entry>
+ <entry>U+2153</entry>
+ <entry>VULGAR FRACTION ONE THIRD</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AB1</entry>
+ <entry>U+2154</entry>
+ <entry>VULGAR FRACTION TWO THIRDS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AB2</entry>
+ <entry>U+2155</entry>
+ <entry>VULGAR FRACTION ONE FIFTH</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AB3</entry>
+ <entry>U+2156</entry>
+ <entry>VULGAR FRACTION TWO FIFTHS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AB4</entry>
+ <entry>U+2157</entry>
+ <entry>VULGAR FRACTION THREE FIFTHS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AB5</entry>
+ <entry>U+2158</entry>
+ <entry>VULGAR FRACTION FOUR FIFTHS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AB6</entry>
+ <entry>U+2159</entry>
+ <entry>VULGAR FRACTION ONE SIXTH</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AB7</entry>
+ <entry>U+215A</entry>
+ <entry>VULGAR FRACTION FIVE SIXTHS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AB8</entry>
+ <entry>U+2105</entry>
+ <entry>CARE OF</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0ABB</entry>
+ <entry>U+2012</entry>
+ <entry>FIGURE DASH</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0ABC</entry>
+ <entry>-</entry>
+ <entry>LEFT ANGLE BRACKET</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0ABD</entry>
+ <entry>-</entry>
+ <entry>DECIMAL POINT</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0ABE</entry>
+ <entry>-</entry>
+ <entry>RIGHT ANGLE BRACKET</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0ABF</entry>
+ <entry>-</entry>
+ <entry>MARKER</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AC3</entry>
+ <entry>U+215B</entry>
+ <entry>VULGAR FRACTION ONE EIGHTH</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AC4</entry>
+ <entry>U+215C</entry>
+ <entry>VULGAR FRACTION THREE EIGHTHS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AC5</entry>
+ <entry>U+215D</entry>
+ <entry>VULGAR FRACTION FIVE EIGHTHS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AC6</entry>
+ <entry>U+215E</entry>
+ <entry>VULGAR FRACTION SEVEN EIGHTHS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AC9</entry>
+ <entry>U+2122</entry>
+ <entry>TRADEMARK SIGN</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0ACA</entry>
+ <entry>-</entry>
+ <entry>SIGNATURE MARK</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0ACB</entry>
+ <entry>-</entry>
+ <entry>TRADEMARK SIGN IN CIRCLE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0ACC</entry>
+ <entry>-</entry>
+ <entry>LEFT OPEN TRIANGLE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0ACD</entry>
+ <entry>-</entry>
+ <entry>RIGHT OPEN TRIANGLE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0ACE</entry>
+ <entry>-</entry>
+ <entry>EM OPEN CIRCLE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0ACF</entry>
+ <entry>-</entry>
+ <entry>EM OPEN RECTANGLE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AD0</entry>
+ <entry>U+2018</entry>
+ <entry>LEFT SINGLE QUOTATION MARK</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AD1</entry>
+ <entry>U+2019</entry>
+ <entry>RIGHT SINGLE QUOTATION MARK</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AD2</entry>
+ <entry>U+201C</entry>
+ <entry>LEFT DOUBLE QUOTATION MARK</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AD3</entry>
+ <entry>U+201D</entry>
+ <entry>RIGHT DOUBLE QUOTATION MARK</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AD4</entry>
+ <entry>U+211E</entry>
+ <entry>PRESCRIPTION, TAKE, RECIPE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AD5</entry>
+ <entry>U+2030</entry>
+ <entry>PER MILLE SIGN</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AD6</entry>
+ <entry>U+2032</entry>
+ <entry>MINUTES</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AD7</entry>
+ <entry>U+2033</entry>
+ <entry>SECONDS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AD9</entry>
+ <entry>U+271D</entry>
+ <entry>LATIN CROSS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0ADA</entry>
+ <entry>-</entry>
+ <entry>HEXAGRAM</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0ADB</entry>
+ <entry>-</entry>
+ <entry>FILLED RECTANGLE BULLET</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0ADC</entry>
+ <entry>-</entry>
+ <entry>FILLED LEFT TRIANGLE BULLET</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0ADD</entry>
+ <entry>-</entry>
+ <entry>FILLED RIGHT TRIANGLE BULLET</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0ADE</entry>
+ <entry>-</entry>
+ <entry>EM FILLED CIRCLE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0ADF</entry>
+ <entry>-</entry>
+ <entry>EM FILLED RECTANGLE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AE0</entry>
+ <entry>-</entry>
+ <entry>EN OPEN CIRCLE BULLET</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AE1</entry>
+ <entry>-</entry>
+ <entry>EN OPEN SQUARE BULLET</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AE2</entry>
+ <entry>-</entry>
+ <entry>OPEN RECTANGULAR BULLET</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AE3</entry>
+ <entry>-</entry>
+ <entry>OPEN TRIANGULAR BULLET UP</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AE4</entry>
+ <entry>-</entry>
+ <entry>OPEN TRIANGULAR BULLET DOWN</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AE5</entry>
+ <entry>-</entry>
+ <entry>OPEN STAR</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AE6</entry>
+ <entry>-</entry>
+ <entry>EN FILLED CIRCLE BULLET</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AE7</entry>
+ <entry>-</entry>
+ <entry>EN FILLED SQUARE BULLET</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AE8</entry>
+ <entry>-</entry>
+ <entry>FILLED TRIANGULAR BULLET UP</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AE9</entry>
+ <entry>-</entry>
+ <entry>FILLED TRIANGULAR BULLET DOWN</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AEA</entry>
+ <entry>-</entry>
+ <entry>LEFT POINTER</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AEB</entry>
+ <entry>-</entry>
+ <entry>RIGHT POINTER</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AEC</entry>
+ <entry>U+2663</entry>
+ <entry>CLUB</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AED</entry>
+ <entry>U+2666</entry>
+ <entry>DIAMOND</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AEE</entry>
+ <entry>U+2665</entry>
+ <entry>HEART</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AF0</entry>
+ <entry>U+2720</entry>
+ <entry>MALTESE CROSS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AF1</entry>
+ <entry>U+2020</entry>
+ <entry>DAGGER</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AF2</entry>
+ <entry>U+2021</entry>
+ <entry>DOUBLE DAGGER</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AF3</entry>
+ <entry>U+2713</entry>
+ <entry>CHECK MARK, TICK</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AF4</entry>
+ <entry>U+2717</entry>
+ <entry>BALLOT CROSS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AF5</entry>
+ <entry>U+266F</entry>
+ <entry>MUSICAL SHARP</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AF6</entry>
+ <entry>U+266D</entry>
+ <entry>MUSICAL FLAT</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AF7</entry>
+ <entry>U+2642</entry>
+ <entry>MALE SYMBOL</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AF8</entry>
+ <entry>U+2640</entry>
+ <entry>FEMALE SYMBOL</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AF9</entry>
+ <entry>U+260E</entry>
+ <entry>TELEPHONE SYMBOL</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AFA</entry>
+ <entry>U+2315</entry>
+ <entry>TELEPHONE RECORDER SYMBOL</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AFB</entry>
+ <entry>U+2117</entry>
+ <entry>PHONOGRAPH COPYRIGHT SIGN</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AFC</entry>
+ <entry>U+2038</entry>
+ <entry>CARET</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AFD</entry>
+ <entry>U+201A</entry>
+ <entry>SINGLE LOW QUOTATION MARK</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AFE</entry>
+ <entry>U+201E</entry>
+ <entry>DOUBLE LOW QUOTATION MARK</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0AFF</entry>
+ <entry>-</entry>
+ <entry>CURSOR</entry>
+ <entry>Publish</entry>
+ </row>
+ <row>
+ <entry>#x0BA3</entry>
+ <entry>-</entry>
+ <entry>LEFT CARET</entry>
+ <entry>APL</entry>
+ </row>
+ <row>
+ <entry>#x0BA6</entry>
+ <entry>-</entry>
+ <entry>RIGHT CARET</entry>
+ <entry>APL</entry>
+ </row>
+ <row>
+ <entry>#x0BA8</entry>
+ <entry>-</entry>
+ <entry>DOWN CARET</entry>
+ <entry>APL</entry>
+ </row>
+ <row>
+ <entry>#x0BA9</entry>
+ <entry>-</entry>
+ <entry>UP CARET</entry>
+ <entry>APL</entry>
+ </row>
+ <row>
+ <entry>#x0BC0</entry>
+ <entry>-</entry>
+ <entry>OVERBAR</entry>
+ <entry>APL</entry>
+ </row>
+ <row>
+ <entry>#x0BC2</entry>
+ <entry>U+22A5</entry>
+ <entry>DOWN TACK</entry>
+ <entry>APL</entry>
+ </row>
+ <row>
+ <entry>#x0BC3</entry>
+ <entry>-</entry>
+ <entry>UP SHOE (CAP)</entry>
+ <entry>APL</entry>
+ </row>
+ <row>
+ <entry>#x0BC4</entry>
+ <entry>U+230A</entry>
+ <entry>DOWN STILE</entry>
+ <entry>APL</entry>
+ </row>
+ <row>
+ <entry>#x0BC6</entry>
+ <entry>-</entry>
+ <entry>UNDERBAR</entry>
+ <entry>APL</entry>
+ </row>
+ <row>
+ <entry>#x0BCA</entry>
+ <entry>U+2218</entry>
+ <entry>JOT</entry>
+ <entry>APL</entry>
+ </row>
+ <row>
+ <entry>#x0BCC</entry>
+ <entry>U+2395</entry>
+ <entry>QUAD</entry>
+ <entry>APL</entry>
+ </row>
+ <row>
+ <entry>#x0BCE</entry>
+ <entry>U+22A4</entry>
+ <entry>UP TACK</entry>
+ <entry>APL</entry>
+ </row>
+ <row>
+ <entry>#x0BCF</entry>
+ <entry>U+25CB</entry>
+ <entry>CIRCLE</entry>
+ <entry>APL</entry>
+ </row>
+ <row>
+ <entry>#x0BD3</entry>
+ <entry>U+2308</entry>
+ <entry>UP STILE</entry>
+ <entry>APL</entry>
+ </row>
+ <row>
+ <entry>#x0BD6</entry>
+ <entry>-</entry>
+ <entry>DOWN SHOE (CUP)</entry>
+ <entry>APL</entry>
+ </row>
+ <row>
+ <entry>#x0BD8</entry>
+ <entry>-</entry>
+ <entry>RIGHT SHOE</entry>
+ <entry>APL</entry>
+ </row>
+ <row>
+ <entry>#x0BDA</entry>
+ <entry>-</entry>
+ <entry>LEFT SHOE</entry>
+ <entry>APL</entry>
+ </row>
+ <row>
+ <entry>#x0BDC</entry>
+ <entry>U+22A2</entry>
+ <entry>LEFT TACK</entry>
+ <entry>APL</entry>
+ </row>
+ <row>
+ <entry>#x0BFC</entry>
+ <entry>U+22A3</entry>
+ <entry>RIGHT TACK</entry>
+ <entry>APL</entry>
+ </row>
+ <row>
+ <entry>#x0CDF</entry>
+ <entry>U+2017</entry>
+ <entry>DOUBLE LOW LINE</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CE0</entry>
+ <entry>U+05D0</entry>
+ <entry>HEBREW LETTER ALEF</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CE1</entry>
+ <entry>U+05D1</entry>
+ <entry>HEBREW LETTER BET</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CE2</entry>
+ <entry>U+05D2</entry>
+ <entry>HEBREW LETTER GIMEL</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CE3</entry>
+ <entry>U+05D3</entry>
+ <entry>HEBREW LETTER DALET</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CE4</entry>
+ <entry>U+05D4</entry>
+ <entry>HEBREW LETTER HE</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CE5</entry>
+ <entry>U+05D5</entry>
+ <entry>HEBREW LETTER VAV</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CE6</entry>
+ <entry>U+05D6</entry>
+ <entry>HEBREW LETTER ZAYIN</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CE7</entry>
+ <entry>U+05D7</entry>
+ <entry>HEBREW LETTER HET</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CE8</entry>
+ <entry>U+05D8</entry>
+ <entry>HEBREW LETTER TET</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CE9</entry>
+ <entry>U+05D9</entry>
+ <entry>HEBREW LETTER YOD</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CEA</entry>
+ <entry>U+05DA</entry>
+ <entry>HEBREW LETTER FINAL KAF</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CEB</entry>
+ <entry>U+05DB</entry>
+ <entry>HEBREW LETTER KAF</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CEC</entry>
+ <entry>U+05DC</entry>
+ <entry>HEBREW LETTER LAMED</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CED</entry>
+ <entry>U+05DD</entry>
+ <entry>HEBREW LETTER FINAL MEM</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CEE</entry>
+ <entry>U+05DE</entry>
+ <entry>HEBREW LETTER MEM</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CEF</entry>
+ <entry>U+05DF</entry>
+ <entry>HEBREW LETTER FINAL NUN</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CF0</entry>
+ <entry>U+05E0</entry>
+ <entry>HEBREW LETTER NUN</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CF1</entry>
+ <entry>U+05E1</entry>
+ <entry>HEBREW LETTER SAMEKH</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CF2</entry>
+ <entry>U+05E2</entry>
+ <entry>HEBREW LETTER AYIN</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CF3</entry>
+ <entry>U+05E3</entry>
+ <entry>HEBREW LETTER FINAL PE</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CF4</entry>
+ <entry>U+05E4</entry>
+ <entry>HEBREW LETTER PE</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CF5</entry>
+ <entry>U+05E5</entry>
+ <entry>HEBREW LETTER FINAL TSADI</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CF6</entry>
+ <entry>U+05E6</entry>
+ <entry>HEBREW LETTER TSADI</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CF7</entry>
+ <entry>U+05E7</entry>
+ <entry>HEBREW LETTER QOF</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CF8</entry>
+ <entry>U+05E8</entry>
+ <entry>HEBREW LETTER RESH</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CF9</entry>
+ <entry>U+05E9</entry>
+ <entry>HEBREW LETTER SHIN</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0CFA</entry>
+ <entry>U+05EA</entry>
+ <entry>HEBREW LETTER TAV</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row>
+ <entry>#x0DA1</entry>
+ <entry>U+0E01</entry>
+ <entry>THAI CHARACTER KO KAI</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DA2</entry>
+ <entry>U+0E02</entry>
+ <entry>THAI CHARACTER KHO KHAI</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DA3</entry>
+ <entry>U+0E03</entry>
+ <entry>THAI CHARACTER KHO KHUAT</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DA4</entry>
+ <entry>U+0E04</entry>
+ <entry>THAI CHARACTER KHO KHWAI</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DA5</entry>
+ <entry>U+0E05</entry>
+ <entry>THAI CHARACTER KHO KHON</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DA6</entry>
+ <entry>U+0E06</entry>
+ <entry>THAI CHARACTER KHO RAKHANG</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DA7</entry>
+ <entry>U+0E07</entry>
+ <entry>THAI CHARACTER NGO NGU</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DA8</entry>
+ <entry>U+0E08</entry>
+ <entry>THAI CHARACTER CHO CHAN</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DA9</entry>
+ <entry>U+0E09</entry>
+ <entry>THAI CHARACTER CHO CHING</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DAA</entry>
+ <entry>U+0E0A</entry>
+ <entry>THAI CHARACTER CHO CHANG</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DAB</entry>
+ <entry>U+0E0B</entry>
+ <entry>THAI CHARACTER SO SO</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DAC</entry>
+ <entry>U+0E0C</entry>
+ <entry>THAI CHARACTER CHO CHOE</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DAD</entry>
+ <entry>U+0E0D</entry>
+ <entry>THAI CHARACTER YO YING</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DAE</entry>
+ <entry>U+0E0E</entry>
+ <entry>THAI CHARACTER DO CHADA</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DAF</entry>
+ <entry>U+0E0F</entry>
+ <entry>THAI CHARACTER TO PATAK</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DB0</entry>
+ <entry>U+0E10</entry>
+ <entry>THAI CHARACTER THO THAN</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DB1</entry>
+ <entry>U+0E11</entry>
+ <entry>THAI CHARACTER THO NANGMONTHO</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DB2</entry>
+ <entry>U+0E12</entry>
+ <entry>THAI CHARACTER THO PHUTHAO</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DB3</entry>
+ <entry>U+0E13</entry>
+ <entry>THAI CHARACTER NO NEN</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DB4</entry>
+ <entry>U+0E14</entry>
+ <entry>THAI CHARACTER DO DEK</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DB5</entry>
+ <entry>U+0E15</entry>
+ <entry>THAI CHARACTER TO TAO</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DB6</entry>
+ <entry>U+0E16</entry>
+ <entry>THAI CHARACTER THO THUNG</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DB7</entry>
+ <entry>U+0E17</entry>
+ <entry>THAI CHARACTER THO THAHAN</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DB8</entry>
+ <entry>U+0E18</entry>
+ <entry>THAI CHARACTER THO THONG</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DB9</entry>
+ <entry>U+0E19</entry>
+ <entry>THAI CHARACTER NO NU</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DBA</entry>
+ <entry>U+0E1A</entry>
+ <entry>THAI CHARACTER BO BAIMAI</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DBB</entry>
+ <entry>U+0E1B</entry>
+ <entry>THAI CHARACTER PO PLA</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DBC</entry>
+ <entry>U+0E1C</entry>
+ <entry>THAI CHARACTER PHO PHUNG</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DBD</entry>
+ <entry>U+0E1D</entry>
+ <entry>THAI CHARACTER FO FA</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DBE</entry>
+ <entry>U+0E1E</entry>
+ <entry>THAI CHARACTER PHO PHAN</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DBF</entry>
+ <entry>U+0E1F</entry>
+ <entry>THAI CHARACTER FO FAN</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DC0</entry>
+ <entry>U+0E20</entry>
+ <entry>THAI CHARACTER PHO SAMPHAO</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DC1</entry>
+ <entry>U+0E21</entry>
+ <entry>THAI CHARACTER MO MA</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DC2</entry>
+ <entry>U+0E22</entry>
+ <entry>THAI CHARACTER YO YAK</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DC3</entry>
+ <entry>U+0E23</entry>
+ <entry>THAI CHARACTER RO RUA</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DC4</entry>
+ <entry>U+0E24</entry>
+ <entry>THAI CHARACTER RU</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DC5</entry>
+ <entry>U+0E25</entry>
+ <entry>THAI CHARACTER LO LING</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DC6</entry>
+ <entry>U+0E26</entry>
+ <entry>THAI CHARACTER LU</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DC7</entry>
+ <entry>U+0E27</entry>
+ <entry>THAI CHARACTER WO WAEN</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DC8</entry>
+ <entry>U+0E28</entry>
+ <entry>THAI CHARACTER SO SALA</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DC9</entry>
+ <entry>U+0E29</entry>
+ <entry>THAI CHARACTER SO RUSI</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DCA</entry>
+ <entry>U+0E2A</entry>
+ <entry>THAI CHARACTER SO SUA</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DCB</entry>
+ <entry>U+0E2B</entry>
+ <entry>THAI CHARACTER HO HIP</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DCC</entry>
+ <entry>U+0E2C</entry>
+ <entry>THAI CHARACTER LO CHULA</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DCD</entry>
+ <entry>U+0E2D</entry>
+ <entry>THAI CHARACTER O ANG</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DCE</entry>
+ <entry>U+0E2E</entry>
+ <entry>THAI CHARACTER HO NOKHUK</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DCF</entry>
+ <entry>U+0E2F</entry>
+ <entry>THAI CHARACTER PAIYANNOI</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DD0</entry>
+ <entry>U+0E30</entry>
+ <entry>THAI CHARACTER SARA A</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DD1</entry>
+ <entry>U+0E31</entry>
+ <entry>THAI CHARACTER MAI HAN-AKAT</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DD2</entry>
+ <entry>U+0E32</entry>
+ <entry>THAI CHARACTER SARA AA</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DD3</entry>
+ <entry>U+0E33</entry>
+ <entry>THAI CHARACTER SARA AM</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DD4</entry>
+ <entry>U+0E34</entry>
+ <entry>THAI CHARACTER SARA I</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DD5</entry>
+ <entry>U+0E35</entry>
+ <entry>THAI CHARACTER SARA II</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DD6</entry>
+ <entry>U+0E36</entry>
+ <entry>THAI CHARACTER SARA UE</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DD7</entry>
+ <entry>U+0E37</entry>
+ <entry>THAI CHARACTER SARA UEE</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DD8</entry>
+ <entry>U+0E38</entry>
+ <entry>THAI CHARACTER SARA U</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DD9</entry>
+ <entry>U+0E39</entry>
+ <entry>THAI CHARACTER SARA UU</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DDA</entry>
+ <entry>U+0E3A</entry>
+ <entry>THAI CHARACTER PHINTHU</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DDF</entry>
+ <entry>U+0E3F</entry>
+ <entry>THAI CURRENCY SYMBOL BAHT</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DE0</entry>
+ <entry>U+0E40</entry>
+ <entry>THAI CHARACTER SARA E</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DE1</entry>
+ <entry>U+0E41</entry>
+ <entry>THAI CHARACTER SARA AE</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DE2</entry>
+ <entry>U+0E42</entry>
+ <entry>THAI CHARACTER SARA O</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DE3</entry>
+ <entry>U+0E43</entry>
+ <entry>THAI CHARACTER SARA AI MAIMUAN</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DE4</entry>
+ <entry>U+0E44</entry>
+ <entry>THAI CHARACTER SARA AI MAIMALAI</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DE5</entry>
+ <entry>U+0E45</entry>
+ <entry>THAI CHARACTER LAKKHANGYAO</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DE6</entry>
+ <entry>U+0E46</entry>
+ <entry>THAI CHARACTER MAIYAMOK</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DE7</entry>
+ <entry>U+0E47</entry>
+ <entry>THAI CHARACTER MAITAIKHU</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DE8</entry>
+ <entry>U+0E48</entry>
+ <entry>THAI CHARACTER MAI EK</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DE9</entry>
+ <entry>U+0E49</entry>
+ <entry>THAI CHARACTER MAI THO</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DEA</entry>
+ <entry>U+0E4A</entry>
+ <entry>THAI CHARACTER MAI TRI</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DEB</entry>
+ <entry>U+0E4B</entry>
+ <entry>THAI CHARACTER MAI CHATTAWA</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DEC</entry>
+ <entry>U+0E4C</entry>
+ <entry>THAI CHARACTER THANTHAKHAT</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DED</entry>
+ <entry>U+0E4D</entry>
+ <entry>THAI CHARACTER NIKHAHIT</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DF0</entry>
+ <entry>U+0E50</entry>
+ <entry>THAI DIGIT ZERO</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DF1</entry>
+ <entry>U+0E51</entry>
+ <entry>THAI DIGIT ONE</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DF2</entry>
+ <entry>U+0E52</entry>
+ <entry>THAI DIGIT TWO</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DF3</entry>
+ <entry>U+0E53</entry>
+ <entry>THAI DIGIT THREE</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DF4</entry>
+ <entry>U+0E54</entry>
+ <entry>THAI DIGIT FOUR</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DF5</entry>
+ <entry>U+0E55</entry>
+ <entry>THAI DIGIT FIVE</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DF6</entry>
+ <entry>U+0E56</entry>
+ <entry>THAI DIGIT SIX</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DF7</entry>
+ <entry>U+0E57</entry>
+ <entry>THAI DIGIT SEVEN</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DF8</entry>
+ <entry>U+0E58</entry>
+ <entry>THAI DIGIT EIGHT</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0DF9</entry>
+ <entry>U+0E59</entry>
+ <entry>THAI DIGIT NINE</entry>
+ <entry>Thai</entry>
+ </row>
+ <row>
+ <entry>#x0EA1</entry>
+ <entry>-</entry>
+ <entry>HANGUL KIYEOG</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EA2</entry>
+ <entry>-</entry>
+ <entry>HANGUL SSANG KIYEOG</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EA3</entry>
+ <entry>-</entry>
+ <entry>HANGUL KIYEOG SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EA4</entry>
+ <entry>-</entry>
+ <entry>HANGUL NIEUN</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EA5</entry>
+ <entry>-</entry>
+ <entry>HANGUL NIEUN JIEUJ</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EA6</entry>
+ <entry>-</entry>
+ <entry>HANGUL NIEUN HIEUH</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EA7</entry>
+ <entry>-</entry>
+ <entry>HANGUL DIKEUD</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EA8</entry>
+ <entry>-</entry>
+ <entry>HANGUL SSANG DIKEUD</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EA9</entry>
+ <entry>-</entry>
+ <entry>HANGUL RIEUL</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EAA</entry>
+ <entry>-</entry>
+ <entry>HANGUL RIEUL KIYEOG</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EAB</entry>
+ <entry>-</entry>
+ <entry>HANGUL RIEUL MIEUM</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EAC</entry>
+ <entry>-</entry>
+ <entry>HANGUL RIEUL PIEUB</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EAD</entry>
+ <entry>-</entry>
+ <entry>HANGUL RIEUL SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EAE</entry>
+ <entry>-</entry>
+ <entry>HANGUL RIEUL TIEUT</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EAF</entry>
+ <entry>-</entry>
+ <entry>HANGUL RIEUL PHIEUF</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EB0</entry>
+ <entry>-</entry>
+ <entry>HANGUL RIEUL HIEUH</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EB1</entry>
+ <entry>-</entry>
+ <entry>HANGUL MIEUM</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EB2</entry>
+ <entry>-</entry>
+ <entry>HANGUL PIEUB</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EB3</entry>
+ <entry>-</entry>
+ <entry>HANGUL SSANG PIEUB</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EB4</entry>
+ <entry>-</entry>
+ <entry>HANGUL PIEUB SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EB5</entry>
+ <entry>-</entry>
+ <entry>HANGUL SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EB6</entry>
+ <entry>-</entry>
+ <entry>HANGUL SSANG SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EB7</entry>
+ <entry>-</entry>
+ <entry>HANGUL IEUNG</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EB8</entry>
+ <entry>-</entry>
+ <entry>HANGUL JIEUJ</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EB9</entry>
+ <entry>-</entry>
+ <entry>HANGUL SSANG JIEUJ</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EBA</entry>
+ <entry>-</entry>
+ <entry>HANGUL CIEUC</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EBB</entry>
+ <entry>-</entry>
+ <entry>HANGUL KHIEUQ</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EBC</entry>
+ <entry>-</entry>
+ <entry>HANGUL TIEUT</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EBD</entry>
+ <entry>-</entry>
+ <entry>HANGUL PHIEUF</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EBE</entry>
+ <entry>-</entry>
+ <entry>HANGUL HIEUH</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EBF</entry>
+ <entry>-</entry>
+ <entry>HANGUL A</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EC0</entry>
+ <entry>-</entry>
+ <entry>HANGUL AE</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EC1</entry>
+ <entry>-</entry>
+ <entry>HANGUL YA</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EC2</entry>
+ <entry>-</entry>
+ <entry>HANGUL YAE</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EC3</entry>
+ <entry>-</entry>
+ <entry>HANGUL EO</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EC4</entry>
+ <entry>-</entry>
+ <entry>HANGUL E</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EC5</entry>
+ <entry>-</entry>
+ <entry>HANGUL YEO</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EC6</entry>
+ <entry>-</entry>
+ <entry>HANGUL YE</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EC7</entry>
+ <entry>-</entry>
+ <entry>HANGUL O</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EC8</entry>
+ <entry>-</entry>
+ <entry>HANGUL WA</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EC9</entry>
+ <entry>-</entry>
+ <entry>HANGUL WAE</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0ECA</entry>
+ <entry>-</entry>
+ <entry>HANGUL OE</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0ECB</entry>
+ <entry>-</entry>
+ <entry>HANGUL YO</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0ECC</entry>
+ <entry>-</entry>
+ <entry>HANGUL U</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0ECD</entry>
+ <entry>-</entry>
+ <entry>HANGUL WEO</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0ECE</entry>
+ <entry>-</entry>
+ <entry>HANGUL WE</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0ECF</entry>
+ <entry>-</entry>
+ <entry>HANGUL WI</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0ED0</entry>
+ <entry>-</entry>
+ <entry>HANGUL YU</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0ED1</entry>
+ <entry>-</entry>
+ <entry>HANGUL EU</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0ED2</entry>
+ <entry>-</entry>
+ <entry>HANGUL YI</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0ED3</entry>
+ <entry>-</entry>
+ <entry>HANGUL I</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0ED4</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG KIYEOG</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0ED5</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG SSANG KIYEOG</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0ED6</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG KIYEOG SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0ED7</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG NIEUN</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0ED8</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG NIEUN JIEUJ</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0ED9</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG NIEUN HIEUH</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EDA</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG DIKEUD</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EDB</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG RIEUL</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EDC</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG RIEUL KIYEOG</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EDD</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG RIEUL MIEUM</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EDE</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG RIEUL PIEUB</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EDF</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG RIEUL SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EE0</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG RIEUL TIEUT</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EE1</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG RIEUL PHIEUF</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EE2</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG RIEUL HIEUH</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EE3</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG MIEUM</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EE4</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG PIEUB</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EE5</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG PIEUB SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EE6</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EE7</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG SSANG SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EE8</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG IEUNG</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EE9</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG JIEUJ</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EEA</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG CIEUC</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EEB</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG KHIEUQ</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EEC</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG TIEUT</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EED</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG PHIEUF</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EEE</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG HIEUH</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EEF</entry>
+ <entry>-</entry>
+ <entry>HANGUL RIEUL YEORIN HIEUH</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EF0</entry>
+ <entry>-</entry>
+ <entry>HANGUL SUNKYEONGEUM MIEUM</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EF1</entry>
+ <entry>-</entry>
+ <entry>HANGUL SUNKYEONGEUM PIEUB</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EF2</entry>
+ <entry>-</entry>
+ <entry>HANGUL PAN SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EF3</entry>
+ <entry>-</entry>
+ <entry>HANGUL KKOGJI DALRIN IEUNG</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EF4</entry>
+ <entry>-</entry>
+ <entry>HANGUL SUNKYEONGEUM PHIEUF</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EF5</entry>
+ <entry>-</entry>
+ <entry>HANGUL YEORIN HIEUH</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EF6</entry>
+ <entry>-</entry>
+ <entry>HANGUL ARAE A</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EF7</entry>
+ <entry>-</entry>
+ <entry>HANGUL ARAE AE</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EF8</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG PAN SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EF9</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG KKOGJI DALRIN IEUNG</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EFA</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG YEORIN HIEUH</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x0EFF</entry>
+ <entry>-</entry>
+ <entry>KOREAN WON</entry>
+ <entry>Korean</entry>
+ </row>
+ <row>
+ <entry>#x13BC</entry>
+ <entry>U+0152</entry>
+ <entry>LATIN CAPITAL LIGATURE OE</entry>
+ <entry>Latin-9</entry>
+ </row>
+ <row>
+ <entry>#x13BD</entry>
+ <entry>U+0153</entry>
+ <entry>LATIN SMALL LIGATURE OE</entry>
+ <entry>Latin-9</entry>
+ </row>
+ <row>
+ <entry>#x13BE</entry>
+ <entry>U+0178</entry>
+ <entry>LATIN CAPITAL LETTER Y WITH DIAERESIS</entry>
+ <entry>Latin-9</entry>
+ </row>
+ <row>
+ <entry>#x20A0</entry>
+ <entry>-</entry>
+ <entry>CURRENCY ECU SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row>
+ <entry>#x20A1</entry>
+ <entry>-</entry>
+ <entry>CURRENCY COLON SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row>
+ <entry>#x20A2</entry>
+ <entry>-</entry>
+ <entry>CURRENCY CRUZEIRO SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row>
+ <entry>#x20A3</entry>
+ <entry>-</entry>
+ <entry>CURRENCY FRENCH FRANC SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row>
+ <entry>#x20A4</entry>
+ <entry>-</entry>
+ <entry>CURRENCY LIRA SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row>
+ <entry>#x20A5</entry>
+ <entry>-</entry>
+ <entry>CURRENCY MILL SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row>
+ <entry>#x20A6</entry>
+ <entry>-</entry>
+ <entry>CURRENCY NAIRA SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row>
+ <entry>#x20A7</entry>
+ <entry>-</entry>
+ <entry>CURRENCY PESETA SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row>
+ <entry>#x20A8</entry>
+ <entry>-</entry>
+ <entry>CURRENCY RUPEE SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row>
+ <entry>#x20A9</entry>
+ <entry>-</entry>
+ <entry>CURRENCY WON SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row>
+ <entry>#x20AA</entry>
+ <entry>-</entry>
+ <entry>CURRENCY NEW SHEQEL SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row>
+ <entry>#x20AB</entry>
+ <entry>-</entry>
+ <entry>CURRENCY DONG SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row>
+ <entry>#x20AC</entry>
+ <entry>U+20AC</entry>
+ <entry>CURRENCY EURO SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+</sect1>
+</appendix>
diff --git a/specs/sect1-9.xml b/specs/sect1-9.xml
new file mode 100644
index 0000000..f8e8b7c
--- /dev/null
+++ b/specs/sect1-9.xml
@@ -0,0 +1,15309 @@
+<part id="sect1-9">
+<preface id="acknowledgements">
+<title>Acknowledgements</title>
+<para>
+The primary contributers to the X11 protocol are:
+</para>
+
+<itemizedlist>
+<listitem><para>Dave Carver (Digital HPW)</para></listitem>
+<listitem><para>Branko Gerovac (Digital HPW)</para></listitem>
+<listitem><para>Jim Gettys (MIT/Project Athena, Digital)</para></listitem>
+<listitem><para>Phil Karlton (Digital WSL)</para></listitem>
+<listitem><para>Scott McGregor (Digital SSG)</para></listitem>
+<listitem><para>Ram Rao (Digital UEG)</para></listitem>
+<listitem><para>David Rosenthal (Sun)</para></listitem>
+<listitem><para>Dave Winchell (Digital UEG)</para></listitem>
+</itemizedlist>
+
+<para>
+The implementors of initial server who provided useful
+input are:
+</para>
+
+<itemizedlist>
+<listitem><para>Susan Angebranndt (Digital)</para></listitem>
+<listitem><para>Raymond Drewry (Digital)</para></listitem>
+<listitem><para>Todd Newman (Digital)</para></listitem>
+</itemizedlist>
+
+<para>
+The invited reviewers who provided useful input are:
+</para>
+
+<itemizedlist>
+<listitem><para>Andrew Cherenson (Berkeley)</para></listitem>
+<listitem><para>Burns Fisher (Digital)</para></listitem>
+<listitem><para>Dan Garfinkel (HP)</para></listitem>
+<listitem><para>Leo Hourvitz (Next)</para></listitem>
+<listitem><para>Brock Krizan (HP)</para></listitem>
+<listitem><para>David Laidlaw (Stellar)</para></listitem>
+<listitem><para>Dave Mellinger (Interleaf)</para></listitem>
+<listitem><para>Ron Newman (MIT)</para></listitem>
+<listitem><para>John Ousterhout (Berkeley)</para></listitem>
+<listitem><para>Andrew Palay (ITC CMU)</para></listitem>
+<listitem><para>Ralph Swick (MIT)</para></listitem>
+<listitem><para>Craig Taylor (Sun)</para></listitem>
+<listitem><para>Jeffery Vroom (Stellar)</para></listitem>
+</itemizedlist>
+
+<para>
+Thanks go to Al Mento of Digital's UEG Documentation Group for
+formatting this document.
+</para>
+
+<para>
+This document does not attempt to provide the rationale or pragmatics required
+to fully understand the protocol or to place it in perspective within a
+complete system.
+</para>
+
+<para>
+The protocol contains many management mechanisms that are not intended for
+normal applications.
+Not all mechanisms are needed to build a particular user interface.
+It is important to keep in mind that the protocol is intended to
+provide mechanism, not policy.
+</para>
+
+<para>
+Robert W. Scheifler
+</para>
+<para>
+X Consortium, Inc.
+</para>
+</preface>
+
+<chapter id='Protocol_Formats'>
+ <title>Protocol Formats</title>
+
+ <section id="request_format">
+ <title>Request Format</title>
+ <indexterm zone="request_format" significance="preferred"><primary>Request</primary><secondary>format</secondary></indexterm>
+ <para>
+Every request contains an 8-bit <firstterm id="major_opcode">major opcode</firstterm>
+<indexterm zone="major_opcode" significance="preferred"><primary>Opcode</primary><secondary>major</secondary></indexterm>
+and a 16-bit <firstterm id="request_length">length field</firstterm>
+<indexterm zone="request_length" significance="preferred"><primary>Request</primary><secondary>length</secondary></indexterm>
+expressed in units of four bytes.
+Every request consists of four bytes of a 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,
+an error is generated.
+Unused bytes in a request are not required to be zero.
+Major opcodes 128 through 255 are reserved for
+<firstterm id="extension">extensions</firstterm>.
+<indexterm zone="extension"><primary>Extension</primary></indexterm>
+Extensions are intended to contain multiple requests,
+so extension requests typically have an additional
+<firstterm id="minor_opcode">minor opcode</firstterm> encoded
+in the second data byte in the request header.
+<indexterm zone="minor_opcode" significance="preferred"><primary>Opcode</primary><secondary>minor</secondary></indexterm>
+However, the placement and interpretation of this minor opcode and of all
+other fields in extension requests are not defined by the core protocol.
+Every request on a given connection is implicitly assigned a
+<firstterm id="sequence_number">sequence number</firstterm>,
+<indexterm zone="sequence_number" significance="preferred"><primary>Sequence number</primary></indexterm>
+starting with one, that is used in replies, errors, and events.
+ </para>
+ </section>
+
+ <section id="reply_format">
+ <title>Reply Format</title>
+ <indexterm zone="reply_format" significance="preferred"><primary>Reply</primary><secondary>format</secondary></indexterm>
+ <para>
+Every <firstterm>reply</firstterm> contains a 32-bit length field
+expressed in units of four bytes.
+Every reply consists of 32 bytes followed by zero or more additional bytes of
+data, as specified in the length field.
+Unused bytes within a reply are not guaranteed to be zero.
+Every reply also contains the least significant 16 bits of the sequence number
+of the corresponding request.
+ </para>
+ </section>
+
+ <section id="error_format">
+ <title>Error Format</title>
+ <indexterm zone="error_format" significance="preferred"><primary>Error report</primary><secondary>format</secondary></indexterm>
+ <para>
+Error reports are 32 bytes long.
+Every error includes an 8-bit error code.
+<phrase id="errors:extensions">
+Error codes 128 through 255 are reserved for extensions.
+</phrase>
+<indexterm zone="errors:extensions" significance="preferred"><primary>Error Codes</primary><secondary>extensions</secondary></indexterm>
+<indexterm zone="errors:extensions" significance="preferred"><primary>Extension</primary><secondary>error codes</secondary></indexterm>
+Every error also includes the major and minor opcodes of the failed request
+and the least significant 16 bits of the sequence number of the request.
+For the following errors (see <link linkend='Errors'>section 4</link>),
+the failing resource ID is also returned:
+<emphasis role='bold'>Colormap</emphasis>,
+<emphasis role='bold'>Cursor</emphasis>,
+<emphasis role='bold'>Drawable</emphasis>,
+<emphasis role='bold'>Font</emphasis>,
+<emphasis role='bold'>GContext</emphasis>,
+<emphasis role='bold'>IDChoice</emphasis>,
+<emphasis role='bold'>Pixmap</emphasis>
+and
+<emphasis role='bold'>Window</emphasis>.
+For
+<emphasis role='bold'>Atom</emphasis>
+errors, the failing atom is returned.
+For
+<emphasis role='bold'>Value</emphasis>
+errors, the failing value is returned.
+Other core errors return no additional data.
+Unused bytes within an error are not guaranteed to be zero.
+ </para>
+ </section>
+
+ <section id="event_format">
+ <title>Event Format</title>
+ <indexterm zone="event_format" significance="preferred"><primary>Event</primary><secondary>format</secondary></indexterm>
+ <para>
+<firstterm>Events</firstterm> are 32 bytes long.
+Unused bytes within an event are not guaranteed to be zero.
+Every event contains an 8-bit type code.
+The most significant bit in this code is set if the event was generated from a
+<link linkend="requests:SendEvent"><emphasis role='bold'>SendEvent</emphasis></link>
+request.
+<phrase id="events:extensions">
+Event codes 64 through 127 are reserved for extensions, although the core
+protocol does not define a mechanism for selecting interest in such events.
+</phrase>
+<indexterm zone="events:extensions" significance="preferred"><primary>Event</primary><secondary>extension</secondary></indexterm>
+<indexterm zone="events:extensions" significance="preferred"><primary>Extension</primary><secondary>event</secondary></indexterm>
+Every core event (with the exception of
+<link linkend="events:KeymapNotify"><emphasis role='bold'>KeymapNotify</emphasis></link>)
+also contains the least significant 16 bits of the sequence number of the last
+request issued by the client that was (or is currently being) processed by
+the server.
+ </para>
+ </section>
+</chapter>
+
+<chapter id='Syntactic_Conventions'>
+<title>Syntactic Conventions</title>
+<!-- .XS -->
+<!-- (SN Syntactic Conventions -->
+<!-- .XE -->
+<para>
+<!-- .LP -->
+The rest of this document uses the following syntactic conventions.
+</para>
+<itemizedlist>
+ <listitem>
+ <para>
+The syntax {...} encloses a set of alternatives.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The syntax [...] encloses a set of structure components.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+In general, TYPEs are in uppercase and
+<emphasis role='bold'>AlternativeValues</emphasis>
+are capitalized.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Requests in <link linkend='Requests'>section 9</link> are described
+in the following format:
+<literallayout class="monospaced">
+<emphasis role='bold'>RequestName</emphasis>
+ <emphasis remap='I'>arg1</emphasis>: type1
+ ...
+ <emphasis remap='I'>argN</emphasis>: typeN
+ ▶
+ result1: type1
+ ...
+ resultM: typeM
+
+ Errors: kind1, ..., kindK
+
+ Description.
+</literallayout>
+ </para>
+ <para>
+If no ▶ is present in the description,
+then the request has no reply (it is asynchronous),
+although errors may still be reported.
+If ▶+ is used,
+then one or more replies can be generated for a single request.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Events in <link linkend='Events'>section 11</link> are described
+in the following format:
+<literallayout class="monospaced">
+<emphasis role='bold'>EventName</emphasis>
+ <emphasis remap='I'>value1</emphasis>: type1
+ ...
+ <emphasis remap='I'>valueN</emphasis>: typeN
+
+ Description.
+</literallayout>
+ </para>
+ </listitem>
+</itemizedlist>
+</chapter>
+
+<chapter id='Common_Types'>
+<title>Common Types</title>
+<!-- .XS -->
+<!-- (SN Common Types -->
+<!-- .XE -->
+<informaltable frame="topbot">
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='2.0*'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Name</entry>
+ <entry>Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry id="types:LISTofFOO">LISTofFOO<indexterm zone="types:LISTofFOO" significance="preferred"><primary>Types</primary><secondary>LISTofFOO</secondary></indexterm></entry>
+ <entry>
+
+A type name of the form LISTofFOO 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.
+It is fully specified in Appendix B.
+Except where explicitly noted,
+zero-length lists are legal.
+ </entry>
+ </row>
+ <row>
+ <entry><para id="types:BITMASK">BITMASK<indexterm zone="types:BITMASK" significance="preferred"><primary>Types</primary><secondary>BITMASK</secondary></indexterm></para><para id="types:LISTofVALUE">LISTofVALUE<indexterm zone="types:LISTofVALUE" significance="preferred"><primary>Types</primary><secondary>LISTofVALUE</secondary></indexterm></para></entry>
+ <entry>
+<para>
+The types BITMASK and LISTofVALUE are somewhat special.
+Various requests contain arguments of the form:
+</para>
+<para>
+<emphasis remap='I'>value-mask</emphasis>: BITMASK
+</para>
+<para>
+<emphasis remap='I'>value-list</emphasis>: LISTofVALUE
+</para>
+<para>
+These are used to allow the client to specify a subset of a heterogeneous
+collection of optional arguments.
+The value-mask specifies which arguments are to be provided;
+each such argument is assigned a unique bit position.
+The representation of the BITMASK will typically contain more bits than
+there are defined arguments.
+The unused bits in the value-mask must be zero (or the server generates a
+<emphasis role='bold'>Value</emphasis>
+error).
+The value-list contains one value for each bit set to 1 in the mask,
+from least significant to most significant bit in the mask.
+Each value is represented with four bytes,
+but the actual value occupies only the least significant bytes as required.
+The values of the unused bytes do not matter.
+</para>
+ </entry>
+ </row>
+ <row>
+ <entry id="types:OR">OR<indexterm zone="types:OR" significance="preferred"><primary>Types</primary><secondary>OR</secondary></indexterm></entry>
+ <entry>
+A type of the form "T1 or ... or Tn" means the union of the indicated types.
+A single-element type is given as the element without enclosing braces.
+ </entry>
+ </row>
+ <row>
+ <entry id="types:WINDOW">WINDOW<indexterm zone="types:WINDOW" significance="preferred"><primary>Types</primary><secondary>WINDOW</secondary></indexterm></entry>
+ <entry>32-bit value (top three bits guaranteed to be zero)</entry>
+ </row>
+ <row>
+ <entry id="types:PIXMAP">PIXMAP<indexterm zone="types:PIXMAP" significance="preferred"><primary>Types</primary><secondary>PIXMAP</secondary></indexterm></entry>
+ <entry>32-bit value (top three bits guaranteed to be zero)</entry>
+ </row>
+ <row>
+ <entry id="types:CURSOR">CURSOR<indexterm zone="types:CURSOR" significance="preferred"><primary>Types</primary><secondary>CURSOR</secondary></indexterm></entry>
+ <entry>32-bit value (top three bits guaranteed to be zero)</entry>
+ </row>
+ <row>
+ <entry id="types:FONT">FONT<indexterm zone="types:FONT" significance="preferred"><primary>Types</primary><secondary>FONT</secondary></indexterm></entry>
+ <entry>32-bit value (top three bits guaranteed to be zero)</entry>
+ </row>
+ <row>
+ <entry id="types:GCONTEXT">GCONTEXT<indexterm zone="types:GCONTEXT" significance="preferred"><primary>Types</primary><secondary>GCONTEXT</secondary></indexterm></entry>
+ <entry>32-bit value (top three bits guaranteed to be zero)</entry>
+ </row>
+ <row>
+ <entry id="types:COLORMAP">COLORMAP<indexterm zone="types:COLORMAP" significance="preferred"><primary>Types</primary><secondary>COLORMAP</secondary></indexterm></entry>
+ <entry>32-bit value (top three bits guaranteed to be zero)</entry>
+ </row>
+ <row>
+ <entry id="types:DRAWABLE">DRAWABLE<indexterm zone="types:DRAWABLE" significance="preferred"><primary>Types</primary><secondary>DRAWABLE</secondary></indexterm></entry>
+ <entry>WINDOW or PIXMAP</entry>
+ </row>
+ <row>
+ <entry id="types:FONTABLE">FONTABLE<indexterm zone="types:FONTABLE" significance="preferred"><primary>Types</primary><secondary>FONTABLE</secondary></indexterm></entry>
+ <entry>FONT or GCONTEXT</entry>
+ </row>
+ <row>
+ <entry id="types:ATOM">ATOM<indexterm zone="types:ATOM" significance="preferred"><primary>Types</primary><secondary>ATOM</secondary></indexterm></entry>
+ <entry>32-bit value (top three bits guaranteed to be zero)</entry>
+ </row>
+ <row>
+ <entry id="types:VISUALID">VISUALID<indexterm zone="types:VISUALID" significance="preferred"><primary>Types</primary><secondary>VISUALID</secondary></indexterm></entry>
+ <entry>32-bit value (top three bits guaranteed to be zero)</entry>
+ </row>
+ <row>
+ <entry id="types:VALUE">VALUE<indexterm zone="types:VALUE" significance="preferred"><primary>Types</primary><secondary>VALUE</secondary></indexterm></entry>
+ <entry>32-bit quantity (used only in LISTofVALUE)</entry>
+ </row>
+ <row>
+ <entry id="types:BYTE">BYTE<indexterm zone="types:BYTE" significance="preferred"><primary>Types</primary><secondary>BYTE</secondary></indexterm></entry>
+ <entry>8-bit value</entry>
+ </row>
+ <row>
+ <entry id="types:INT8">INT8<indexterm zone="types:INT8" significance="preferred"><primary>Types</primary><secondary>INT8</secondary></indexterm></entry>
+ <entry>8-bit signed integer</entry>
+ </row>
+ <row>
+ <entry id="types:INT16">INT16<indexterm zone="types:INT16" significance="preferred"><primary>Types</primary><secondary>INT16</secondary></indexterm></entry>
+ <entry>16-bit signed integer</entry>
+ </row>
+ <row>
+ <entry id="types:INT32">INT32<indexterm zone="types:INT32" significance="preferred"><primary>Types</primary><secondary>INT32</secondary></indexterm></entry>
+ <entry>32-bit signed integer</entry>
+ </row>
+ <row>
+ <entry id="types:CARD8">CARD8<indexterm zone="types:CARD8" significance="preferred"><primary>Types</primary><secondary>CARD8</secondary></indexterm></entry>
+ <entry>8-bit unsigned integer</entry>
+ </row>
+ <row>
+ <entry id="types:CARD16">CARD16<indexterm zone="types:CARD16" significance="preferred"><primary>Types</primary><secondary>CARD16</secondary></indexterm></entry>
+ <entry>16-bit unsigned integer</entry>
+ </row>
+ <row>
+ <entry id="types:CARD32">CARD32<indexterm zone="types:CARD32" significance="preferred"><primary>Types</primary><secondary>CARD32</secondary></indexterm></entry>
+ <entry>32-bit unsigned integer</entry>
+ </row>
+ <row>
+ <entry id="types:TIMESTAMP">TIMESTAMP<indexterm zone="types:TIMESTAMP" significance="preferred"><primary>Types</primary><secondary>TIMESTAMP</secondary></indexterm></entry>
+ <entry>CARD32</entry>
+ </row>
+ <row>
+ <entry id="types:BITGRAVITY">BITGRAVITY<indexterm zone="types:BITGRAVITY" significance="preferred"><primary>Types</primary><secondary>BITGRAVITY</secondary></indexterm></entry>
+ <entry>
+{ <emphasis role='bold'>Forget</emphasis>,
+<emphasis role='bold'>Static</emphasis>,
+<emphasis role='bold'>NorthWest</emphasis>,
+<emphasis role='bold'>North</emphasis>,
+<emphasis role='bold'>NorthEast</emphasis>,
+<emphasis role='bold'>West</emphasis>,
+<emphasis role='bold'>Center</emphasis>,
+<emphasis role='bold'>East</emphasis>,
+<emphasis role='bold'>SouthWest</emphasis>,
+<emphasis role='bold'>South</emphasis>,
+<emphasis role='bold'>SouthEast</emphasis> }
+ </entry>
+ </row>
+ <row>
+ <entry id="types:WINGRAVITY">WINGRAVITY<indexterm zone="types:WINGRAVITY" significance="preferred"><primary>Types</primary><secondary>WINGRAVITY</secondary></indexterm></entry>
+ <entry>
+{ <emphasis role='bold'>Unmap</emphasis>,
+<emphasis role='bold'>Static</emphasis>,
+<emphasis role='bold'>NorthWest</emphasis>,
+<emphasis role='bold'>North</emphasis>,
+<emphasis role='bold'>NorthEast</emphasis>,
+<emphasis role='bold'>West</emphasis>,
+<emphasis role='bold'>Center</emphasis>,
+<emphasis role='bold'>East</emphasis>,
+<emphasis role='bold'>SouthWest</emphasis>,
+<emphasis role='bold'>South</emphasis>,
+<emphasis role='bold'>SouthEast</emphasis> }
+ </entry>
+ </row>
+ <row>
+ <entry id="types:BOOL">BOOL<indexterm zone="types:BOOL" significance="preferred"><primary>Types</primary><secondary>BOOL</secondary></indexterm></entry>
+ <entry>
+{ <emphasis role='bold'>True</emphasis>,
+<emphasis role='bold'>False</emphasis> }
+ </entry>
+ </row>
+ <row>
+ <entry id="types:EVENT">EVENT<indexterm zone="types:EVENT" significance="preferred"><primary>Types</primary><secondary>EVENT</secondary></indexterm></entry>
+ <entry>
+{ <emphasis role='bold'>KeyPress</emphasis>,
+<emphasis role='bold'>KeyRelease</emphasis>,
+<emphasis role='bold'>OwnerGrabButton</emphasis>,
+<emphasis role='bold'>ButtonPress</emphasis>,
+<emphasis role='bold'>ButtonRelease</emphasis>,
+<emphasis role='bold'>EnterWindow</emphasis>,
+<emphasis role='bold'>LeaveWindow</emphasis>,
+<emphasis role='bold'>PointerMotion</emphasis>,
+<emphasis role='bold'>PointerMotionHint</emphasis>,
+<emphasis role='bold'>Button1Motion</emphasis>,
+<emphasis role='bold'>Button2Motion</emphasis>,
+<emphasis role='bold'>Button3Motion</emphasis>,
+<emphasis role='bold'>Button4Motion</emphasis>,
+<emphasis role='bold'>Button5Motion</emphasis>,
+<emphasis role='bold'>ButtonMotion</emphasis>,
+<emphasis role='bold'>Exposure</emphasis>,
+<emphasis role='bold'>VisibilityChange</emphasis>,
+<emphasis role='bold'>StructureNotify</emphasis>,
+<emphasis role='bold'>ResizeRedirect</emphasis>,
+<emphasis role='bold'>SubstructureNotify</emphasis>,
+<emphasis role='bold'>SubstructureRedirect</emphasis>,
+<emphasis role='bold'>FocusChange</emphasis>,
+<emphasis role='bold'>PropertyChange</emphasis>,
+<emphasis role='bold'>ColormapChange</emphasis>,
+<emphasis role='bold'>KeymapState</emphasis> }
+ </entry>
+ </row>
+ <row>
+ <entry id="types:POINTEREVENT">POINTEREVENT<indexterm zone="types:POINTEREVENT" significance="preferred"><primary>Types</primary><secondary>POINTEREVENT</secondary></indexterm></entry>
+ <entry>
+{ <emphasis role='bold'>ButtonPress</emphasis>,
+<emphasis role='bold'>ButtonRelease</emphasis>,
+<emphasis role='bold'>EnterWindow</emphasis>,
+<emphasis role='bold'>LeaveWindow</emphasis>,
+<emphasis role='bold'>PointerMotion</emphasis>,
+<emphasis role='bold'>PointerMotionHint</emphasis>,
+<emphasis role='bold'>Button1Motion</emphasis>,
+<emphasis role='bold'>Button2Motion</emphasis>,
+<emphasis role='bold'>Button3Motion</emphasis>,
+<emphasis role='bold'>Button4Motion</emphasis>,
+<emphasis role='bold'>Button5Motion</emphasis>,
+<emphasis role='bold'>ButtonMotion</emphasis>,
+<emphasis role='bold'>KeymapState</emphasis> }
+ </entry>
+ </row>
+ <row>
+ <entry id="types:DEVICEEVENT">DEVICEEVENT<indexterm zone="types:DEVICEEVENT" significance="preferred"><primary>Types</primary><secondary>DEVICEEVENT</secondary></indexterm></entry>
+ <entry>
+{ <emphasis role='bold'>KeyPress</emphasis>,
+<emphasis role='bold'>KeyRelease</emphasis>,
+<emphasis role='bold'>ButtonPress</emphasis>,
+<emphasis role='bold'>ButtonRelease</emphasis>,
+<emphasis role='bold'>PointerMotion</emphasis>,
+<emphasis role='bold'>Button1Motion</emphasis>,
+<emphasis role='bold'>Button2Motion</emphasis>,
+<emphasis role='bold'>Button3Motion</emphasis>,
+<emphasis role='bold'>Button4Motion</emphasis>,
+<emphasis role='bold'>Button5Motion</emphasis>,
+<emphasis role='bold'>ButtonMotion</emphasis> }
+ </entry>
+ </row>
+ <row>
+ <entry id="types:KEYSYM">KEYSYM<indexterm zone="types:KEYSYM" significance="preferred"><primary>Types</primary><secondary>KEYSYM</secondary></indexterm></entry>
+ <entry>32-bit value (top three bits guaranteed to be zero)</entry>
+ </row>
+ <row>
+ <entry id="types:KEYCODE">KEYCODE<indexterm zone="types:KEYCODE" significance="preferred"><primary>Types</primary><secondary>KEYCODE</secondary></indexterm></entry>
+ <entry>CARD8</entry>
+ </row>
+ <row>
+ <entry id="types:BUTTON">BUTTON<indexterm zone="types:BUTTON" significance="preferred"><primary>Types</primary><secondary>BUTTON</secondary></indexterm></entry>
+ <entry>CARD8</entry>
+ </row>
+ <row>
+ <entry id="types:KEYMASK">KEYMASK<indexterm zone="types:KEYMASK" significance="preferred"><primary>Types</primary><secondary>KEYMASK</secondary></indexterm></entry>
+ <entry>
+{ <emphasis role='bold'>Shift</emphasis>,
+<emphasis role='bold'>Lock</emphasis>,
+<emphasis role='bold'>Control</emphasis>,
+<emphasis role='bold'>Mod1</emphasis>,
+<emphasis role='bold'>Mod2</emphasis>,
+<emphasis role='bold'>Mod3</emphasis>,
+<emphasis role='bold'>Mod4</emphasis>,
+<emphasis role='bold'>Mod5</emphasis> }
+ </entry>
+ </row>
+ <row>
+ <entry id="types:BUTMASK">BUTMASK<indexterm zone="types:BUTMASK" significance="preferred"><primary>Types</primary><secondary>BUTMASK</secondary></indexterm></entry>
+ <entry>
+{ <emphasis role='bold'>Button1</emphasis>,
+<emphasis role='bold'>Button2</emphasis>,
+<emphasis role='bold'>Button3</emphasis>,
+<emphasis role='bold'>Button4</emphasis>,
+<emphasis role='bold'>Button5</emphasis> }
+ </entry>
+ </row>
+ <row>
+ <entry id="types:KEYBUTMASK">KEYBUTMASK<indexterm zone="types:KEYBUTMASK" significance="preferred"><primary>Types</primary><secondary>KEYBUTMASK</secondary></indexterm></entry>
+ <entry>KEYMASK or BUTMASK</entry>
+ </row>
+ <row>
+ <entry id="types:STRING8">STRING8<indexterm zone="types:STRING8" significance="preferred"><primary>Types</primary><secondary>STRING8</secondary></indexterm></entry>
+ <entry>LISTofCARD8</entry>
+ </row>
+ <row>
+ <entry id="types:STRING16">STRING16<indexterm zone="types:STRING16" significance="preferred"><primary>Types</primary><secondary>STRING16</secondary></indexterm></entry>
+ <entry>LISTofCHAR2B</entry>
+ </row>
+ <row>
+ <entry id="types:CHAR2B">CHAR2B<indexterm zone="types:CHAR2B" significance="preferred"><primary>Types</primary><secondary>CHAR2B</secondary></indexterm></entry>
+ <entry>[byte1, byte2: CARD8]</entry>
+ </row>
+ <row>
+ <entry id="types:POINT">POINT<indexterm zone="types:POINT" significance="preferred"><primary>Types</primary><secondary>POINT</secondary></indexterm></entry>
+ <entry>[x, y: INT16]</entry>
+ </row>
+ <row>
+ <entry id="types:RECTANGLE">RECTANGLE<indexterm zone="types:RECTANGLE" significance="preferred"><primary>Types</primary><secondary>RECTANGLE</secondary></indexterm></entry>
+ <entry>
+<para>[x, y: INT16,</para>
+<para>width, height: CARD16]</para>
+ </entry>
+ </row>
+ <row>
+ <entry id="types:ARC">ARC<indexterm zone="types:ARC" significance="preferred"><primary>Types</primary><secondary>ARC</secondary></indexterm></entry>
+ <entry>
+<para>[x, y: INT16,</para>
+<para>width, height: CARD16,</para>
+<para>angle1, angle2: INT16]</para>
+ </entry>
+ </row>
+ <row>
+ <entry id="types:HOST">HOST<indexterm zone="types:HOST" significance="preferred"><primary>Types</primary><secondary>HOST</secondary></indexterm></entry>
+ <entry>
+<para>
+[family:
+{ <emphasis role='bold'>Internet</emphasis>,
+<emphasis role='bold'>InternetV6</emphasis>,
+<emphasis role='bold'>ServerInterpreted</emphasis>,
+<emphasis role='bold'>DECnet</emphasis>,
+<emphasis role='bold'>Chaos</emphasis> }
+</para>
+<para>address: LISTofBYTE]</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The [x,y] coordinates of a RECTANGLE specify the upper-left corner.
+</para>
+
+<para>
+The primary interpretation of large characters in a STRING16 is that they
+are composed of two bytes used to index a two-dimensional matrix,
+hence, the use of CHAR2B rather than CARD16.
+This corresponds to the JIS/ISO method of indexing 2-byte characters.
+It is expected that most large fonts will be defined with 2-byte
+matrix indexing.
+For large fonts constructed with linear indexing,
+a CHAR2B can be interpreted as a 16-bit number by treating byte1 as
+the most significant byte.
+This means that clients should always transmit such
+16-bit character values most significant byte first, as the server will never
+byte-swap CHAR2B quantities.
+</para>
+
+<para>
+The length, format, and interpretation of a HOST address are specific to the
+family (see
+<link linkend="requests:ChangeHosts"><emphasis role='bold'>ChangeHosts</emphasis></link>
+request).
+</para>
+</chapter>
+
+<chapter id='Errors'>
+<title>Errors</title>
+<!-- .XS -->
+<!-- (SN Errors -->
+<!-- .XE -->
+<para>
+<!-- .LP -->
+In general, when a request terminates with an error,
+the request has no side effects (that is, there is no partial execution).
+The only requests for which this is not true are
+<link linkend="requests:ChangeWindowAttributes"><emphasis role='bold'>ChangeWindowAttributes</emphasis></link>,
+<link linkend="requests:ChangeGC"><emphasis role='bold'>ChangeGC</emphasis></link>,
+<link linkend="requests:PolyText8"><emphasis role='bold'>PolyText8</emphasis></link>,
+<link linkend="requests:PolyText16"><emphasis role='bold'>PolyText16</emphasis></link>,
+<link linkend="requests:FreeColors"><emphasis role='bold'>FreeColors</emphasis></link>,
+<link linkend="requests:StoreColors"><emphasis role='bold'>StoreColors</emphasis></link>
+and
+<link linkend="requests:ChangeKeyboardControl"><emphasis role='bold'>ChangeKeyboardControl</emphasis></link>.
+</para>
+
+<para>
+The following error codes result from various requests as follows:
+</para>
+
+<informaltable frame="topbot">
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='2.0*'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Error</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry id="errors:Access"><emphasis role='bold'>Access</emphasis><indexterm zone="errors:Access" significance="preferred"><primary>Error Codes</primary><secondary>Access</secondary></indexterm></entry>
+ <entry>
+An attempt is made to grab a key/button combination already grabbed by another
+client.
+An attempt is made to free a colormap entry not allocated by the client
+or to free an entry in a colormap that was created with all entries writable.
+An attempt is made to store into a read-only or an unallocated colormap entry.
+An attempt is made to modify the access control list from other than the local
+host (or otherwise authorized client).
+An attempt is made to select an event type that only one client can
+select at a time when another client has already selected it.
+ </entry>
+ </row>
+ <row>
+ <entry id="errors:Alloc"><emphasis role='bold'>Alloc</emphasis><indexterm zone="errors:Alloc" significance="preferred"><primary>Error Codes</primary><secondary>Alloc</secondary></indexterm></entry>
+ <entry>
+The server failed to allocate the requested resource.
+Note that the explicit listing of
+<emphasis role='bold'>Alloc</emphasis>
+errors in request only covers allocation errors at a very coarse level
+and is not intended 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 an
+<emphasis role='bold'>Alloc</emphasis>
+error on any request for this reason,
+and clients should be prepared to receive such errors and handle
+or discard them.
+ </entry>
+ </row>
+ <row>
+ <entry id="errors:Atom"><emphasis role='bold'>Atom</emphasis><indexterm zone="errors:Atom" significance="preferred"><primary>Error Codes</primary><secondary>Atom</secondary></indexterm></entry>
+ <entry>
+A value for an ATOM argument does not name a defined ATOM.
+ </entry>
+ </row>
+ <row>
+ <entry id="errors:Colormap"><emphasis role='bold'>Colormap</emphasis><indexterm zone="errors:Colormap" significance="preferred"><primary>Error Codes</primary><secondary>Colormap</secondary></indexterm></entry>
+ <entry>
+A value for a COLORMAP argument does not name a defined COLORMAP.
+ </entry>
+ </row>
+ <row>
+ <entry id="errors:Cursor"><emphasis role='bold'>Cursor</emphasis><indexterm zone="errors:Cursor" significance="preferred"><primary>Error Codes</primary><secondary>Cursor</secondary></indexterm></entry>
+ <entry>
+A value for a CURSOR argument does not name a defined CURSOR.
+ </entry>
+ </row>
+ <row>
+ <entry id="errors:Drawable"><emphasis role='bold'>Drawable</emphasis><indexterm zone="errors:Drawable" significance="preferred"><primary>Error Codes</primary><secondary>Drawable</secondary></indexterm></entry>
+ <entry>
+A value for a DRAWABLE argument does not name a defined WINDOW
+or PIXMAP.
+ </entry>
+ </row>
+ <row>
+ <entry id="errors:Font"><emphasis role='bold'>Font</emphasis><indexterm zone="errors:Font" significance="preferred"><primary>Error Codes</primary><secondary>Font</secondary></indexterm></entry>
+ <entry>
+A value for a FONT argument does not name a defined FONT.
+A value for a FONTABLE argument does not name a defined FONT or a
+defined GCONTEXT.
+ </entry>
+ </row>
+ <row>
+ <entry id="errors:GContext"><emphasis role='bold'>GContext</emphasis><indexterm zone="errors:GContext" significance="preferred"><primary>Error Codes</primary><secondary>GContext</secondary></indexterm></entry>
+ <entry>
+A value for a GCONTEXT argument does not name a defined GCONTEXT.
+ </entry>
+ </row>
+ <row>
+ <entry id="errors:IDChoice"><emphasis role='bold'>IDChoice</emphasis><indexterm zone="errors:IDChoice" significance="preferred"><primary>Error Codes</primary><secondary>IDChoice</secondary></indexterm></entry>
+ <entry>
+The value chosen for a resource identifier either is not included
+in the range assigned to the client or is already in use.
+ </entry>
+ </row>
+ <row>
+ <entry id="errors:Implementation"><emphasis role='bold'>Implementation</emphasis><indexterm zone="errors:Implementation" significance="preferred"><primary>Error Codes</primary><secondary>Implementation</secondary></indexterm></entry>
+ <entry>
+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.
+ </entry>
+ </row>
+ <row>
+ <entry id="errors:Length"><emphasis role='bold'>Length</emphasis><indexterm zone="errors:Length" significance="preferred"><primary>Error Codes</primary><secondary>Length</secondary></indexterm></entry>
+ <entry>
+The length of a request is shorter or longer than that required
+to minimally contain the arguments.
+The length of a request exceeds the maximum length accepted by the
+server.
+ </entry>
+ </row>
+ <row>
+ <entry id="errors:Match"><emphasis role='bold'>Match</emphasis><indexterm zone="errors:Match" significance="preferred"><primary>Error Codes</primary><secondary>Match</secondary></indexterm></entry>
+ <entry>
+An
+<emphasis role='bold'>InputOnly</emphasis>
+window is used as a DRAWABLE.
+In a graphics request, the GCONTEXT argument does not have the same
+root and depth as the destination DRAWABLE argument.
+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.
+ </entry>
+ </row>
+ <row>
+ <entry id="errors:Name"><emphasis role='bold'>Name</emphasis><indexterm zone="errors:Name" significance="preferred"><primary>Error Codes</primary><secondary>Name</secondary></indexterm></entry>
+ <entry>
+A font or color of the specified name does not exist.
+ </entry>
+ </row>
+ <row>
+ <entry id="errors:Pixmap"><emphasis role='bold'>Pixmap</emphasis><indexterm zone="errors:Pixmap" significance="preferred"><primary>Error Codes</primary><secondary>Pixmap</secondary></indexterm></entry>
+ <entry>
+A value for a PIXMAP argument does not name a defined PIXMAP.
+ </entry>
+ </row>
+ <row>
+ <entry id="errors:Request"><emphasis role='bold'>Request</emphasis><indexterm zone="errors:Request" significance="preferred"><primary>Error Codes</primary><secondary>Request</secondary></indexterm></entry>
+ <entry>
+The major or minor opcode does not specify a valid request.
+ </entry>
+ </row>
+ <row>
+ <entry id="errors:Value"><emphasis role='bold'>Value</emphasis><indexterm zone="errors:Value" significance="preferred"><primary>Error Codes</primary><secondary>Value</secondary></indexterm></entry>
+ <entry>
+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 typically can generate
+this error (due to the encoding).
+ </entry>
+ </row>
+ <row>
+ <entry id="errors:Window"><emphasis role='bold'>Window</emphasis><indexterm zone="errors:Window" significance="preferred"><primary>Error Codes</primary><secondary>Window</secondary></indexterm></entry>
+ <entry>
+A value for a WINDOW argument does not name a defined WINDOW.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<note><para>
+The
+<emphasis role='bold'>Atom</emphasis>,
+<emphasis role='bold'>Colormap</emphasis>,
+<emphasis role='bold'>Cursor</emphasis>,
+<emphasis role='bold'>Drawable</emphasis>,
+<emphasis role='bold'>Font</emphasis>,
+<emphasis role='bold'>GContext</emphasis>,
+<emphasis role='bold'>Pixmap</emphasis>
+and
+<emphasis role='bold'>Window</emphasis>
+errors are also used when the argument type is extended by union with a
+set of fixed alternatives, for example, &lt;WINDOW or
+<emphasis role='bold'>PointerRoot</emphasis>
+or
+<emphasis role='bold'>None</emphasis>&gt;.
+</para></note>
+</chapter>
+
+<chapter id='Keyboards'>
+<title>Keyboards</title>
+<indexterm zone="Keyboards"><primary>Keyboard</primary></indexterm>
+<!-- .XS -->
+<!-- (SN Keyboards -->
+<!-- .XE -->
+<para id="keycode">
+A KEYCODE represents a physical (or logical) key.
+<indexterm zone="keycode"><primary>Types</primary><secondary>KEYCODE</secondary></indexterm>
+<indexterm zone="keycode" significance="preferred"><primary>Keycode</primary></indexterm>
+Keycodes lie in the inclusive range [8,255].
+A keycode value carries no intrinsic information,
+although server implementors may attempt to encode geometry information
+(for example, matrix) to be interpreted in a server-dependent fashion.
+The mapping between keys and keycodes cannot be changed using the
+protocol.
+</para>
+<para id="keysym">
+A KEYSYM is an encoding of a symbol on the cap of a key.
+<indexterm zone="keysym"><primary>Types</primary><secondary>KEYSYM</secondary></indexterm>
+<indexterm zone="keysym"><primary>Keysym</primary></indexterm>
+The set of defined KEYSYMs include the character sets Latin-1, Latin-2,
+Latin-3, Latin-4, Kana, Arabic, Cyrillic, Greek, Tech, Special, Publish, APL,
+Hebrew, Thai, and Korean as well as a set of symbols common on keyboards
+(Return, Help, Tab,
+and so on).
+KEYSYMs with the most significant bit (of the 29 bits) set are reserved
+as vendor-specific.
+</para>
+<para>
+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
+<keysym>NoSymbol</keysym>
+entries) is a single KEYSYM "<emphasis remap='I'>K</emphasis>",
+then the list is treated as if it were
+the list "<emphasis remap='I'>K</emphasis> <keysym>NoSymbol</keysym>
+<emphasis remap='I'>K</emphasis> <keysym>NoSymbol</keysym>".
+If the list (ignoring trailing <keysym>NoSymbol</keysym> entries)
+is a pair of KEYSYMs
+"<emphasis remap='I'>K1 K2</emphasis>", then the list is treated as
+if it were the list
+"<emphasis remap='I'>K1 K2 K1 K2</emphasis>".
+If the list (ignoring trailing
+<keysym>NoSymbol</keysym>
+entries) is
+a triple of KEYSYMs "<emphasis remap='I'>K1 K2 K3</emphasis>",
+then the list is treated as if it were the list "
+<emphasis remap='I'>K1 K2 K3</emphasis> <keysym>NoSymbol</keysym>".
+When an explicit "void" element is desired in the list,
+the value
+<keysym>VoidSymbol</keysym>
+can be used.
+</para>
+<para>
+<!-- .LP -->
+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
+<keysym>NoSymbol</keysym>,
+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 "<emphasis remap='I'>K</emphasis>" 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 "<emphasis remap='I'>K</emphasis>" and the second
+element were the uppercase form
+of "<emphasis remap='I'>K</emphasis>".
+</para>
+
+<para id="keysym_from_keypress">
+The standard rules for obtaining a KEYSYM from a
+<link linkend="events:KeyPress"><emphasis role='bold'>KeyPress</emphasis></link>
+<indexterm zone="keysym_from_keypress"><primary>KeyPress</primary></indexterm>
+event make use of only the Group 1 and Group 2 KEYSYMs; no interpretation of
+other KEYSYMs in the list is defined. The modifier state determines which
+group to use. 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
+<emphasis role='bold'>Mod1</emphasis>
+through
+<emphasis role='bold'>Mod5</emphasis>.
+This modifier is
+<indexterm zone="group_modifier" significance="preferred"><primary>modifier</primary><secondary>group</secondary></indexterm>
+called the "<firstterm id="group_modifier">group modifier</firstterm>". For any KEYCODE, Group 1 is used when the
+group modifier is off, and Group 2 is used when the group modifier is on.
+</para>
+
+<para id="modifier:lock">
+The
+<emphasis role='bold'>Lock</emphasis>
+<indexterm zone="modifier:lock" significance="preferred"><primary>modifier</primary><secondary>Lock</secondary></indexterm>
+modifier is interpreted as CapsLock when the KEYSYM named CAPS
+LOCK is attached to some KEYCODE and that KEYCODE is attached to the
+<emphasis role='bold'>Lock</emphasis>
+modifier. The
+<emphasis role='bold'>Lock</emphasis>
+modifier is interpreted as ShiftLock when the KEYSYM
+named SHIFT LOCK is attached to some KEYCODE and that KEYCODE is attached
+to the
+<emphasis role='bold'>Lock</emphasis>
+modifier. If the
+<emphasis role='bold'>Lock</emphasis>
+modifier could be interpreted as both
+CapsLock and ShiftLock, the CapsLock interpretation is used.
+</para>
+
+<para id="modifier:numlock">
+<!-- .LP -->
+The operation of "keypad" keys is controlled by the KEYSYM named NUM LOCK,
+by attaching that KEYSYM to some KEYCODE and attaching that KEYCODE to any
+one of the modifiers
+<emphasis role='bold'>Mod1</emphasis>
+through
+<emphasis role='bold'>Mod5</emphasis>.
+This modifier is called the
+<indexterm zone="modifier:lock" significance="preferred"><primary>modifier</primary><secondary>NumLock</secondary></indexterm>
+"numlock modifier". The standard KEYSYMs with the prefix KEYPAD in their
+name are called "keypad" KEYSYMs; these are KEYSYMS with numeric value in
+the hexadecimal range #xFF80 to #xFFBD inclusive. In addition,
+vendor-specific KEYSYMS in the hexadecimal range #x11000000 to #x1100FFFF
+are also keypad KEYSYMs.
+</para>
+<para>
+<!-- .LP -->
+Within a group, the choice of KEYSYM is determined by applying the first
+rule that is satisfied from the following list:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+The numlock modifier is on and the second KEYSYM is a keypad KEYSYM. In
+this case, if the
+<emphasis role='bold'>Shift</emphasis>
+modifier is on, or if the
+<emphasis role='bold'>Lock</emphasis>
+modifier is on and
+is interpreted as ShiftLock, then the first KEYSYM is used; otherwise, the
+second KEYSYM is used.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The
+<emphasis role='bold'>Shift</emphasis>
+and
+<emphasis role='bold'>Lock</emphasis>
+modifiers are both off. In this case, the first
+KEYSYM is used.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The
+<emphasis role='bold'>Shift</emphasis>
+modifier is off, and the
+<emphasis role='bold'>Lock</emphasis>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The
+<emphasis role='bold'>Shift</emphasis>
+modifier is on, and the
+<emphasis role='bold'>Lock</emphasis>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The
+<emphasis role='bold'>Shift</emphasis>
+modifier is on, or the
+<emphasis role='bold'>Lock</emphasis>
+modifier is on and is interpreted
+as ShiftLock, or both. In this case, the second KEYSYM is used.
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+<!-- .LP -->
+The mapping between KEYCODEs and KEYSYMs is not used directly by the server;
+it is merely stored for reading and writing by clients.
+</para>
+</chapter>
+
+<chapter id='Pointers'>
+<title>Pointers</title>
+<!-- .XS -->
+<!-- (SN Pointers -->
+<!-- .XE -->
+<para id="pointers:buttons">
+Buttons are always numbered starting with one.
+<indexterm zone="pointers:buttons"><primary>Button</primary><secondary>number</secondary></indexterm>
+</para>
+</chapter>
+
+<chapter id='Predefined_Atoms'>
+<title>Predefined Atoms</title>
+<!-- .XS -->
+<!-- (SN Predefined Atoms -->
+<!-- .XE -->
+<para>
+<!-- .LP -->
+<indexterm zone="Predefined_Atoms"><primary>Atom</primary><secondary>predefined</secondary></indexterm>
+Predefined atoms are not strictly necessary and may not be useful in all
+environments, but they will eliminate many
+<link linkend="requests:InternAtom"><emphasis role='bold'>InternAtom</emphasis></link>
+requests in most applications.
+Note that they are predefined only in the sense of having numeric values,
+not in the sense of having required semantics.
+The core protocol imposes no semantics on these names,
+but semantics are specified in other X Window System standards,
+such as the
+<citetitle>Inter-Client Communication Conventions Manual</citetitle>
+and the <citetitle>X Logical Font Description Conventions</citetitle>.
+</para>
+
+<para>
+The following names have predefined atom values.
+Note that uppercase and lowercase matter.
+</para>
+
+<simplelist type='vert' columns='3'>
+ <member>ARC</member>
+ <member>ATOM</member>
+ <member>BITMAP</member>
+ <member>CAP_HEIGHT</member>
+ <member>CARDINAL</member>
+ <member>COLORMAP</member>
+ <member>COPYRIGHT</member>
+ <member>CURSOR</member>
+ <member>CUT_BUFFER0</member>
+ <member>CUT_BUFFER1</member>
+ <member>CUT_BUFFER2</member>
+ <member>CUT_BUFFER3</member>
+ <member>CUT_BUFFER4</member>
+ <member>CUT_BUFFER5</member>
+ <member>CUT_BUFFER6</member>
+ <member>CUT_BUFFER7</member>
+ <member>DRAWABLE</member>
+ <member>END_SPACE</member>
+ <member>FAMILY_NAME</member>
+ <member>FONT</member>
+ <member>FONT_NAME</member>
+ <member>FULL_NAME</member>
+ <member>INTEGER</member>
+ <member>ITALIC_ANGLE</member>
+ <member>MAX_SPACE</member>
+ <member>MIN_SPACE</member>
+ <member>NORM_SPACE</member>
+ <member>NOTICE</member>
+ <member>PIXMAP</member>
+ <member>POINT</member>
+ <member>POINT_SIZE</member>
+ <member>PRIMARY</member>
+ <member>QUAD_WIDTH</member>
+ <member>RECTANGLE</member>
+ <member>RESOLUTION</member>
+ <member>RESOURCE_MANAGER</member>
+ <member>RGB_BEST_MAP</member>
+ <member>RGB_BLUE_MAP</member>
+ <member>RGB_COLOR_MAP</member>
+ <member>RGB_DEFAULT_MAP</member>
+ <member>RGB_GRAY_MAP</member>
+ <member>RGB_GREEN_MAP</member>
+ <member>RGB_RED_MAP</member>
+ <member>SECONDARY</member>
+ <member>STRIKEOUT_ASCENT</member>
+ <member>STRIKEOUT_DESCENT</member>
+ <member>STRING</member>
+ <member>SUBSCRIPT_X</member>
+ <member>SUBSCRIPT_Y</member>
+ <member>SUPERSCRIPT_X</member>
+ <member>SUPERSCRIPT_Y</member>
+ <member>UNDERLINE_POSITION</member>
+ <member>UNDERLINE_THICKNESS</member>
+ <member>VISUALID</member>
+ <member>WEIGHT</member>
+ <member>WINDOW</member>
+ <member>WM_CLASS</member>
+ <member>WM_CLIENT_MACHINE</member>
+ <member>WM_COMMAND</member>
+ <member>WM_HINTS</member>
+ <member>WM_ICON_NAME</member>
+ <member>WM_ICON_SIZE</member>
+ <member>WM_NAME</member>
+ <member>WM_NORMAL_HINTS</member>
+ <member>WM_SIZE_HINTS</member>
+ <member>WM_TRANSIENT_FOR</member>
+ <member>WM_ZOOM_HINTS</member>
+ <member>X_HEIGHT</member>
+</simplelist>
+
+<para>
+<!-- .LP -->
+To avoid conflicts with possible future names for which semantics might be
+imposed (either at the protocol level or in terms of higher level user
+interface models),
+names beginning with an underscore should be used for atoms
+that are private to a particular vendor or organization.
+To guarantee no conflicts between vendors and organizations,
+additional prefixes need to be used.
+However, the protocol does not define the mechanism for choosing such prefixes.
+For names private to a single application or end user but stored in globally
+accessible locations,
+it is suggested that two leading underscores be used to avoid conflicts with
+other names.
+</para>
+</chapter>
+
+<chapter id='Connection_Setup'>
+ <title>Connection Setup</title>
+ <indexterm zone="Connection_Setup"><primary>Connection</primary></indexterm>
+
+ <para>
+For remote clients,
+the X protocol can be built on top of any reliable byte stream.
+ </para>
+
+ <section id="connection_initiation">
+ <title>Connection Initiation</title>
+ <indexterm zone="connection_initiation"><primary>Connection</primary><secondary>opening</secondary></indexterm>
+
+ <para id="byte-order">
+The client must send an initial byte of data to identify the byte order to be
+employed.
+<indexterm zone="byte-order"><primary>Byte order</primary></indexterm>
+The value of the byte must be octal 102 or 154.
+The value 102 (ASCII uppercase B) means values are transmitted most significant
+byte first, and value 154 (ASCII lowercase l) means values are transmitted
+least significant byte first.
+Except where explicitly noted in the protocol,
+all 16-bit and 32-bit quantities sent by the client must be transmitted with
+this byte order,
+and all 16-bit and 32-bit quantities returned by the server will be transmitted
+with this byte order.
+ </para>
+ <para>
+Following the byte-order byte,
+the client sends the following information at connection setup:
+ </para>
+ <blockquote>
+ <para>
+protocol-major-version: CARD16
+ </para>
+ <para>
+protocol-minor-version: CARD16
+ </para>
+ <para>
+authorization-protocol-name: STRING8
+ </para>
+ <para>
+authorization-protocol-data: STRING8
+ </para>
+ </blockquote>
+ <para>
+The version numbers indicate what version of the protocol the client
+expects the server to implement.
+ </para>
+ <para id="authorization">
+The authorization name indicates what authorization (and authentication)
+protocol the client
+expects the server to use, and the data is specific to that protocol.
+<indexterm zone="authorization" significance="preferred"><primary>Authorization</primary></indexterm>
+Specification of valid authorization mechanisms is not part of the core
+X protocol.
+A server that does not implement the protocol the client expects
+or that only implements the host-based mechanism may simply ignore this
+information.
+If both name and data strings are empty,
+this is to be interpreted as "no explicit authorization."
+ </para>
+ </section>
+
+ <section id="server_response">
+ <title>Server Response</title>
+
+ <para>
+The client receives the following information at connection setup:
+ </para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+success:
+{ <emphasis role='bold'>Failed</emphasis>,
+<emphasis role='bold'>Success</emphasis>,
+<emphasis role='bold'>Authenticate</emphasis>}
+ </para>
+ </listitem>
+</itemizedlist>
+
+ <para>
+The client receives the following additional data if the returned success
+value is
+<emphasis role='bold'>Failed</emphasis>,
+and the connection is not successfully established:
+ </para>
+
+<blockquote>
+ <para>
+protocol-major-version: CARD16
+ </para>
+ <para>
+protocol-minor-version: CARD16
+ </para>
+ <para>
+reason: STRING8
+ </para>
+</blockquote>
+
+ <para>
+The client receives the following additional data if the returned success
+value is
+<emphasis role='bold'>Authenticate</emphasis>,
+and further authentication negotiation is required:
+ </para>
+
+<blockquote>
+ <para>
+reason: STRING8
+ </para>
+</blockquote>
+
+ <para>
+The contents of the reason string are specific to the authorization
+protocol in use. The semantics of this authentication negotiation are
+not constrained, except that the negotiation must eventually terminate
+with a reply from the server containing a success value of
+<emphasis role='bold'>Failed</emphasis>
+or
+<emphasis role='bold'>Success</emphasis>.
+ </para>
+
+ <para>
+The client receives the following additional data if the returned success
+value is
+<emphasis role='bold'>Success</emphasis>,
+and the connection is successfully established:
+ </para>
+
+<blockquote>
+ <para>
+protocol-major-version: CARD16
+ </para>
+ <para>
+<!-- .br -->
+protocol-minor-version: CARD16
+ </para>
+ <para>
+<!-- .br -->
+vendor: STRING8
+ </para>
+ <para>
+<!-- .br -->
+release-number: CARD32
+ </para>
+ <para>
+<!-- .br -->
+resource-id-base, resource-id-mask: CARD32
+ </para>
+ <para>
+<!-- .br -->
+image-byte-order:
+{ <emphasis role='bold'>LSBFirst</emphasis>,
+<emphasis role='bold'>MSBFirst</emphasis> }
+ </para>
+ <para>
+<!-- .br -->
+bitmap-scanline-unit: {8, 16, 32}
+ </para>
+ <para>
+<!-- .br -->
+bitmap-scanline-pad: {8, 16, 32}
+ </para>
+ <para>
+<!-- .br -->
+bitmap-bit-order:
+{ <emphasis role='bold'>LeastSignificant</emphasis>,
+<emphasis role='bold'>MostSignificant</emphasis> }
+ </para>
+ <para>
+<!-- .br -->
+pixmap-formats: LISTofFORMAT
+ </para>
+ <para>
+<!-- .br -->
+roots: LISTofSCREEN
+ </para>
+ <para>
+<!-- .br -->
+motion-buffer-size: CARD32
+ </para>
+ <para>
+<!-- .br -->
+maximum-request-length: CARD16
+ </para>
+ <para>
+<!-- .br -->
+min-keycode, max-keycode: KEYCODE
+ </para>
+ <para>
+where:
+ </para>
+ <blockquote>
+<informaltable frame="none">
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='2.0*'/>
+ <tbody>
+ <row>
+ <entry>FORMAT:</entry>
+ <entry>[depth: CARD8,</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>
+bits-per-pixel: {1, 4, 8, 16, 24, 32}
+ </entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>
+scanline-pad: {8, 16, 32}]
+ </entry>
+ </row>
+ <row>
+ <entry>SCREEN:</entry>
+ <entry>[root: WINDOW</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>width-in-pixels, height-in-pixels: CARD16</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>width-in-millimeters, height-in-millimeters: CARD16</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>allowed-depths: LISTofDEPTH</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>root-depth: CARD8</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>root-visual: VISUALID</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>default-colormap: COLORMAP</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>white-pixel, black-pixel: CARD32</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>min-installed-maps, max-installed-maps: CARD16</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>backing-stores: {Never, WhenMapped, Always}</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>save-unders: BOOL</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>current-input-masks: SETofEVENT]</entry>
+ </row>
+ <row>
+ <entry>DEPTH:</entry>
+ <entry>[depth: CARD8</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>visuals: LISTofVISUALTYPE]</entry>
+ </row>
+ <row>
+ <entry>VISUALTYPE:</entry>
+ <entry>[visual-id: VISUALID</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>
+class: {StaticGray, StaticColor, TrueColor, GrayScale,
+PseudoColor, DirectColor}
+ </entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>red-mask, green-mask, blue-mask: CARD32</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>bits-per-rgb-value: CARD8</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>colormap-entries: CARD16]</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+ </blockquote>
+</blockquote>
+ </section>
+
+ <section id="server_information">
+ <title>Server Information</title>
+
+ <para>
+The information that is global to the server is:
+ </para>
+
+ <para>
+The protocol version numbers are an escape hatch in case future revisions of
+the protocol are necessary.
+In general,
+the major version would increment for incompatible changes,
+and the minor version would increment for small upward compatible changes.
+Barring changes,
+the major version will be 11, and the minor version will be 0.
+The protocol version numbers returned indicate the protocol the server
+actually supports.
+This might not equal the version sent by the client.
+The server can (but need not) refuse connections from clients that offer a
+different version than the server supports.
+A server can (but need not) support more than one version simultaneously.
+ </para>
+ <para>
+The vendor string gives some identification of the owner of the server
+implementation.
+The vendor controls the semantics of the release number.
+ </para>
+ <para id="resource-id-mask">
+The resource-id-mask contains a single contiguous set of bits (at least 18).
+The client allocates resource IDs for types WINDOW, PIXMAP,
+CURSOR, FONT, GCONTEXT, and COLORMAP by choosing a value with only
+some subset of these bits set and ORing it with resource-id-base.
+<indexterm zone="resource-id-mask"><primary>Resource</primary><secondary>ID</secondary></indexterm>
+Only values constructed in this way can be used to name newly created
+resources over this connection.
+Resource IDs never have the top three bits set.
+The client is not restricted to linear or contiguous allocation
+of resource IDs.
+Once an ID has been freed,
+it can be reused.
+An ID must be unique with respect to the IDs of all other resources,
+not just other resources of the same type.
+However, note that the value spaces of resource identifiers,
+atoms, visualids, and keysyms are distinguished by context, and
+as such, are not required to be disjoint; for example, a given numeric value
+might be both a valid window ID, a valid atom, and a valid keysym.
+ </para>
+ <para>
+Although the server is in general responsible for byte-swapping data to
+match the client,
+images are always transmitted and received in formats (including byte order)
+specified by the server.
+The byte order for images is given by image-byte-order and applies to each
+scanline unit in XY format (bitmap format) and to each pixel value in Z format.
+ </para>
+ <para id="bitmap-format">
+A bitmap is represented in <glossterm linkend="glossary:Scanline_order">scanline order</glossterm>.
+<indexterm zone="bitmap-format"><primary>Bitmap</primary><secondary>format</secondary></indexterm>
+Each <glossterm linkend="glossary:Scanline">scanline</glossterm>
+is padded to a multiple of bits as given by bitmap-scanline-pad.
+The pad bits are of arbitrary value.
+The scanline is quantized in multiples of bits as given by bitmap-scanline-unit.
+The bitmap-scanline-unit is always less than or equal to the
+bitmap-scanline-pad.
+Within each unit,
+the leftmost bit in the bitmap is either the least significant
+or most significant bit in the unit, as given by bitmap-bit-order.
+<indexterm zone="bitmap-format"><primary>XYFormat</primary></indexterm>
+If a pixmap is represented in XY format,
+each plane is represented as a bitmap, and the planes appear from
+most significant to least significant in bit order with no padding
+between planes.
+ </para>
+ <para id="pixmap-formats">
+Pixmap-formats contains one entry for each
+<glossterm linkend="glossary:Depth">depth</glossterm> value.
+<indexterm zone="pixmap-formats"><primary>Pixmap</primary><secondary>format</secondary></indexterm>
+<indexterm zone="pixmap-formats"><primary>ZFormat</primary></indexterm>
+The entry describes the <glossterm linkend="glossary:ZFormat">Z format</glossterm>
+used to represent images of that depth.
+An entry for a depth is included if any screen supports that depth,
+and all screens supporting that depth must support only that Z format for that
+depth.
+In Z format,
+the pixels are in scanline order, left to right within a scanline.
+The number of bits used to hold each pixel is given by bits-per-pixel.
+Bits-per-pixel may be larger than strictly required by the depth,
+in which case the least significant bits are used to hold
+the pixmap data, and the values of the unused high-order bits are
+undefined.
+When the bits-per-pixel is 4,
+the order of nibbles in the byte is the same as the image byte-order.
+When the bits-per-pixel is 1,
+the format is identical for bitmap format.
+Each scanline is padded to a multiple of bits as given by scanline-pad.
+When bits-per-pixel is 1,
+this will be identical to bitmap-scanline-pad.
+ </para>
+ <para>
+How a pointing device roams the screens is up to the server
+implementation and is transparent to the protocol.
+No geometry is defined among screens.
+ </para>
+ <para>
+The server may retain the recent history of pointer motion and do so to a
+finer granularity than is reported by
+<link linkend="events:MotionNotify"><emphasis role='bold'>MotionNotify</emphasis></link>
+events.
+The
+<link linkend="requests:GetMotionEvents"><emphasis role='bold'>GetMotionEvents</emphasis></link>
+request makes such history available.
+The motion-buffer-size gives the approximate maximum number
+of elements in the history buffer.
+ </para>
+ <para id="Maximum-request-length">
+Maximum-request-length specifies the maximum length of a request
+accepted by the server, in 4-byte units.
+<indexterm zone="Maximum-request-length"><primary>Request</primary><secondary>length</secondary></indexterm>
+That is, length is the maximum value that can appear in the length field of a
+request.
+Requests larger than this maximum generate a
+<emphasis role='bold'>Length</emphasis>
+error,
+and the server will read and simply discard the entire request.
+Maximum-request-length will always be at least 4096
+(that is, requests of length up to and including 16384 bytes
+will be accepted by all servers).
+ </para>
+ <para id="keycode_range">
+<indexterm zone="keycode_range"><primary>Types</primary><secondary>KEYCODE</secondary></indexterm>
+<indexterm zone="keycode_range"><primary>Keycode</primary></indexterm>
+Min-keycode and max-keycode specify the smallest and largest keycode
+values transmitted by the server.
+Min-keycode is never less than 8,
+and max-keycode is never greater than 255.
+Not all keycodes in this range are required to have corresponding keys.
+ </para>
+ </section>
+
+ <section id="screen_information">
+ <title>Screen Information</title>
+ <indexterm zone="screen_information"><primary>Screen</primary></indexterm>
+
+ <para>
+The information that applies per screen is:
+ </para>
+
+ <para>
+The allowed-depths specifies what pixmap and window depths are supported.
+Pixmaps are supported for each depth listed,
+and windows of that depth are supported if at least one visual type is listed
+for the depth.
+A pixmap depth of one is always supported and listed,
+but windows of depth one might not be supported.
+A depth of zero is never listed,
+but zero-depth
+<emphasis role='bold'>InputOnly</emphasis>
+windows are always supported.
+ </para>
+ <para>
+Root-depth and root-visual specify the depth and visual type of the
+root window.
+Width-in-pixels and height-in-pixels specify the size of
+the root window (which cannot be changed).
+The class of the root window is always
+<emphasis role='bold'>InputOutput</emphasis>.
+Width-in-millimeters and height-in-millimeters can be used to determine the
+physical size and the aspect ratio.
+ </para>
+ <para>
+The default-colormap is the one initially associated with the root window.
+Clients with minimal color requirements creating windows of
+the same depth as the root may want to allocate from this map by
+default.
+ </para>
+ <para>
+Black-pixel and white-pixel can be used in implementing a monochrome
+application.
+These pixel values are for permanently allocated entries in the
+default-colormap.
+The actual RGB values may be settable on some screens
+and, in any case, may not actually be black and white.
+The names are intended to convey the expected relative intensity of the colors.
+ </para>
+ <para>
+The border of the root window is initially a pixmap filled with the black-pixel.
+The initial background of the root window is a pixmap filled with some
+unspecified two-color pattern using black-pixel and white-pixel.
+ </para>
+ <para>
+Min-installed-maps specifies the number of maps that can be guaranteed
+to be installed simultaneously (with
+<link linkend="requests:InstallColormap"><emphasis role='bold'>InstallColormap</emphasis></link>),
+regardless of the number of entries allocated in each map.
+Max-installed-maps specifies the maximum number of maps that might possibly be
+installed simultaneously, depending on their allocations.
+Multiple static-visual colormaps with identical contents but differing in
+resource ID should be considered as a single map for the purposes of this
+number.
+For the typical case of a single hardware colormap, both values will be 1.
+ </para>
+ <para id="Backing-stores">
+<indexterm zone="Backing-stores"><primary>Backing store</primary></indexterm>
+Backing-stores indicates when the server supports backing stores for
+this screen, although it may be storage limited in the number of
+windows it can support at once.
+If save-unders is
+<emphasis role='bold'>True</emphasis>,
+the server can support the save-under mode in
+<link linkend="requests:CreateWindow"><emphasis role='bold'>CreateWindow</emphasis></link>
+and
+<link linkend="requests:ChangeWindowAttributes"><emphasis role='bold'>ChangeWindowAttributes</emphasis></link>,
+although again it may be storage limited.
+ </para>
+ <para>
+The current-input-events is what
+<link linkend="requests:GetWindowAttributes"><emphasis role='bold'>GetWindowAttributes</emphasis></link>
+would return for the all-event-masks for the root window.
+ </para>
+ </section>
+
+ <section id="visual_information">
+ <title>Visual Information</title>
+ <indexterm zone="visual_information" significance="preferred"><primary>Visual</primary><secondary>information</secondary></indexterm>
+
+ <para>
+The information that applies per visual-type is:
+ </para>
+
+ <para>
+A given visual type might be listed for more than one depth or for
+more than one screen.
+ </para>
+
+ <para id="colormap_types">
+<indexterm zone="colormap_types" significance="preferred"><primary>Colormap</primary><secondary>types</secondary></indexterm>
+<indexterm zone="colormap_types"><primary>Pixel value</primary></indexterm>
+For
+<emphasis role='bold'>PseudoColor</emphasis>,
+a pixel value indexes a colormap to produce independent RGB values;
+the RGB values can be changed dynamically.
+<emphasis role='bold'>GrayScale</emphasis>
+is treated in the same way as
+<emphasis role='bold'>PseudoColor</emphasis>
+except which primary drives the screen is undefined;
+thus, the client should always store the
+same value for red, green, and blue in colormaps.
+For
+<emphasis role='bold'>DirectColor</emphasis>,
+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.
+<emphasis role='bold'>TrueColor</emphasis>
+is treated in the same way as
+<emphasis role='bold'>DirectColor</emphasis>
+except the colormap has predefined read-only RGB values.
+These values are server-dependent but provide linear or near-linear
+increasing ramps in each primary.
+<emphasis role='bold'>StaticColor</emphasis>
+is treated in the same way as
+<emphasis role='bold'>PseudoColor</emphasis>
+except the colormap has predefined read-only RGB values,
+which are server-dependent.
+<emphasis role='bold'>StaticGray</emphasis>
+is treated in the same way as
+<emphasis role='bold'>StaticColor</emphasis>
+except the red, green, and blue values are equal for any
+single pixel value, resulting in shades of gray.
+<emphasis role='bold'>StaticGray</emphasis>
+with a two-entry colormap can be thought of as monochrome.
+ </para>
+
+ <para>
+The red-mask, green-mask, and blue-mask are only defined for
+<emphasis role='bold'>DirectColor</emphasis>
+and
+<emphasis role='bold'>TrueColor</emphasis>.
+Each has one contiguous set of bits set to 1 with no intersections.
+Usually each mask has the same number of bits set to 1.
+ </para>
+
+ <para>
+The bits-per-rgb-value specifies the log base 2 of the number of
+distinct color intensity values (individually) of red, green, and blue.
+This number need not bear any relation to the number of colormap entries.
+Actual RGB values are always passed in the protocol within a
+16-bit spectrum, with 0 being minimum intensity and 65535 being the
+maximum intensity.
+On hardware that provides a linear zero-based intensity ramp,
+the following relationship exists:
+ </para>
+
+ <para>
+<literallayout class="monospaced">
+ hw-intensity = protocol-intensity / (65536 / total-hw-intensities)
+</literallayout>
+ </para>
+
+ <para>
+Colormap entries are indexed from 0.
+The colormap-entries defines the number of available colormap entries in a
+newly created colormap.
+For
+<emphasis role='bold'>DirectColor</emphasis>
+and
+<emphasis role='bold'>TrueColor</emphasis>,
+this will usually be 2 to the power of the maximum number of bits set to 1 in
+red-mask, green-mask, and blue-mask.
+ </para>
+ </section>
+</chapter>
+
+<chapter id='Requests'>
+ <title>Requests</title>
+ <section id="requests:CreateWindow">
+ <title>CreateWindow</title>
+ <indexterm zone="requests:CreateWindow" significance="preferred"><primary>CreateWindow</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>wid</emphasis>, <emphasis remap='I'>parent</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>class</emphasis>:
+{ <emphasis role='bold'>InputOutput</emphasis>,
+<emphasis role='bold'>InputOnly</emphasis>,
+<emphasis role='bold'>CopyFromParent</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>depth</emphasis>: CARD8
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>visual</emphasis>: VISUALID or
+<emphasis role='bold'>CopyFromParent</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>, <emphasis remap='I'>border-width</emphasis>: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>value-mask</emphasis>: BITMASK
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>value-list</emphasis>: LISTofVALUE
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Alloc</emphasis>,
+<emphasis role='bold'>Colormap</emphasis>,
+<emphasis role='bold'>Cursor</emphasis>,
+<emphasis role='bold'>IDChoice</emphasis>,
+<emphasis role='bold'>Match</emphasis>,
+<emphasis role='bold'>Pixmap</emphasis>,
+<emphasis role='bold'>Value</emphasis>,
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request creates an unmapped window and assigns the identifier wid to it.
+</para>
+<para>
+A class of
+<emphasis role='bold'>CopyFromParent</emphasis>
+means the class is taken from the parent.
+A depth of zero for class
+<emphasis role='bold'>InputOutput</emphasis>
+or
+<emphasis role='bold'>CopyFromParent</emphasis>
+means the depth is taken from the parent.
+A visual of
+<emphasis role='bold'>CopyFromParent</emphasis>
+means the visual type is taken from the parent.
+For class
+<emphasis role='bold'>InputOutput</emphasis>,
+the visual type and depth must be a combination supported for the screen
+(or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+The depth need not be the same as the parent,
+but the parent must not be of class
+<emphasis role='bold'>InputOnly</emphasis>
+(or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+For class
+<emphasis role='bold'>InputOnly</emphasis>,
+the depth must be zero (or a
+<emphasis role='bold'>Match</emphasis>
+error results), and the visual must be one supported for the screen (or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+However, the parent can have any depth and class.
+</para>
+<para>
+The server essentially acts as if
+<emphasis role='bold'>InputOnly</emphasis>
+windows do not exist for the purposes of graphics requests,
+exposure processing, and
+<link linkend="events:VisibilityNotify"><emphasis role='bold'>VisibilityNotify</emphasis></link>
+events.
+An
+<emphasis role='bold'>InputOnly</emphasis>
+window cannot be used as a drawable (as a source or destination for graphics
+requests).
+<emphasis role='bold'>InputOnly</emphasis>
+and
+<emphasis role='bold'>InputOutput</emphasis>
+windows act identically in other respects-properties,
+grabs, input control, and so on.
+</para>
+<para>
+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.
+</para>
+<para>
+The x and y coordinates
+for the window are relative to the parent's origin
+and specify the position of the upper-left outer corner of the window
+(not the origin).
+The width and height specify the inside size (not including the border)
+and must be nonzero (or a
+<emphasis role='bold'>Value</emphasis>
+error results).
+The border-width for an
+<emphasis role='bold'>InputOnly</emphasis>
+window must be zero (or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+</para>
+<para>
+The window is placed on top in the stacking order with respect to siblings.
+</para>
+<para>
+The value-mask and value-list specify attributes of the window that are
+to be explicitly initialized.
+The possible values are:
+</para>
+<informaltable frame='topbot'>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='2.0*'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Attribute</entry>
+ <entry>Type</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>background-pixmap</entry>
+ <entry>
+PIXMAP or
+<emphasis role='bold'>None</emphasis>
+or
+<emphasis role='bold'>ParentRelative</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>background-pixel</entry>
+ <entry>CARD32</entry>
+ </row>
+ <row>
+ <entry>border-pixmap</entry>
+ <entry>
+PIXMAP or
+<emphasis role='bold'>CopyFromParent</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>border-pixel</entry>
+ <entry>CARD32</entry>
+ </row>
+ <row>
+ <entry>bit-gravity</entry>
+ <entry>BITGRAVITY</entry>
+ </row>
+ <row>
+ <entry>win-gravity</entry>
+ <entry>WINGRAVITY</entry>
+ </row>
+ <row>
+ <entry>backing-store</entry>
+ <entry>
+{ <emphasis role='bold'>NotUseful</emphasis>,
+<emphasis role='bold'>WhenMapped</emphasis>,
+<emphasis role='bold'>Always</emphasis> }
+ </entry>
+ </row>
+ <row>
+ <entry>backing-planes</entry>
+ <entry>CARD32</entry>
+ </row>
+ <row>
+ <entry>backing-pixel</entry>
+ <entry>CARD32</entry>
+ </row>
+ <row>
+ <entry>save-under</entry>
+ <entry>BOOL</entry>
+ </row>
+ <row>
+ <entry>event-mask</entry>
+ <entry>SETofEVENT</entry>
+ </row>
+ <row>
+ <entry>do-not-propagate-mask</entry>
+ <entry>SETofDEVICEEVENT</entry>
+ </row>
+ <row>
+ <entry>override-redirect</entry>
+ <entry>BOOL</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>
+COLORMAP or
+<emphasis role='bold'>CopyFromParent</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>cursor</entry>
+ <entry>
+CURSOR or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The default values when attributes are not explicitly initialized
+are:
+</para>
+
+<informaltable frame='topbot'>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='2.0*'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Attribute</entry>
+ <entry>Default</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>background-pixmap</entry>
+ <entry>
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>border-pixmap</entry>
+ <entry>
+<emphasis role='bold'>CopyFromParent</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>bit-gravity</entry>
+ <entry>
+<emphasis role='bold'>Forget</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>win-gravity</entry>
+ <entry>
+<emphasis role='bold'>NorthWest</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>backing-store</entry>
+ <entry>
+<emphasis role='bold'>NotUseful</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>backing-planes</entry>
+ <entry>all ones</entry>
+ </row>
+ <row>
+ <entry>backing-pixel</entry>
+ <entry>zero</entry>
+ </row>
+ <row>
+ <entry>save-under</entry>
+ <entry>
+<emphasis role='bold'>False</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>event-mask</entry>
+ <entry>{} (empty set)</entry>
+ </row>
+ <row>
+ <entry>do-not-propagate-mask</entry>
+ <entry>{} (empty set)</entry>
+ </row>
+ <row>
+ <entry>override-redirect</entry>
+ <entry>
+<emphasis role='bold'>False</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>
+<emphasis role='bold'>CopyFromParent</emphasis>
+ </entry>
+ </row>
+ <row rowsep='1'>
+ <entry>cursor</entry>
+ <entry>
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+Only the following attributes are defined for
+<emphasis role='bold'>InputOnly</emphasis>
+windows:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+win-gravity
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+event-mask
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+do-not-propagate-mask
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+override-redirect
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+cursor
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+It is a
+<emphasis role='bold'>Match</emphasis>
+error to specify any other attributes for
+<emphasis role='bold'>InputOnly</emphasis>
+windows.
+</para>
+<para id="requests:CreateWindow:background">
+<indexterm zone="requests:CreateWindow:background"><primary>Background</primary></indexterm>
+If background-pixmap is given,
+it overrides the default background-pixmap.
+The background pixmap and the window must have the
+same root and the same depth (or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+Any size pixmap can be used, although some sizes may be faster than others.
+If background
+<emphasis role='bold'>None</emphasis>
+is specified, the window has no defined background.
+If background
+<emphasis role='bold'>ParentRelative</emphasis>
+is specified, the parent's background is used,
+but the window must have the same depth as the parent (or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+If the parent has background
+<emphasis role='bold'>None</emphasis>,
+then the window will also have background
+<emphasis role='bold'>None</emphasis>.
+A copy of the parent's background is not made.
+The parent's background is reexamined each time the window background is
+required.
+If background-pixel is given, it overrides the default
+background-pixmap and any background-pixmap given explicitly,
+and a pixmap of undefined size filled with background-pixel is used for the
+background.
+Range checking is not performed on the background-pixel value;
+it is simply truncated to the appropriate number of bits.
+For a
+<emphasis role='bold'>ParentRelative</emphasis>
+background,
+the background tile origin always aligns with the parent's background tile
+origin.
+Otherwise, the background tile origin is always the window origin.
+</para>
+<para>
+When no valid contents are available for regions of a window
+and the regions are either 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
+<emphasis role='bold'>None</emphasis>.
+If the background is
+<emphasis role='bold'>None</emphasis>,
+the previous screen contents from other windows of the same depth as the window
+are simply left in place if 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.
+Exposure events are then generated for the regions, even if the background is
+<emphasis role='bold'>None</emphasis>.
+</para>
+<para>
+The border tile origin is always the same as the background tile origin.
+If border-pixmap is given,
+it overrides the default border-pixmap.
+The border pixmap and the window must have the same root
+and the same depth (or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+Any size pixmap can be used,
+although some sizes may be faster than others.
+If
+<emphasis role='bold'>CopyFromParent</emphasis>
+is given, the parent's border pixmap is copied (subsequent changes to
+the parent's border attribute do not affect the child),
+but the window must have the same depth as the parent (or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+The pixmap might be copied by sharing the same pixmap object between the
+child and parent or by making a complete copy of the pixmap contents.
+If border-pixel is given,
+it overrides the default border-pixmap and any border-pixmap given explicitly,
+and a pixmap of undefined size filled with border-pixel is used for the border.
+Range checking is not performed on the border-pixel value;
+it is simply truncated to the appropriate number of bits.
+</para>
+<para>
+Output to a window is always clipped to the inside of the window,
+so that the border is never affected.
+</para>
+<para>
+The bit-gravity defines which region of the window should be retained
+if the window is resized, and win-gravity defines how the window should
+be repositioned if the parent is resized (see
+<link linkend="requests:ConfigureWindow"><emphasis role='bold'>ConfigureWindow</emphasis></link>
+request).
+</para>
+<para>
+A backing-store of
+<emphasis role='bold'>WhenMapped</emphasis>
+advises the server that maintaining contents of obscured regions
+when the window is mapped would be beneficial.
+A backing-store of
+<emphasis role='bold'>Always</emphasis>
+advises the server that maintaining contents even when the window is
+unmapped would be beneficial.
+In this case,
+the server may generate an exposure event when the window is created.
+A value of
+<emphasis role='bold'>NotUseful</emphasis>
+advises the server that maintaining contents is unnecessary,
+although a server may still choose to maintain contents while the window
+is mapped.
+Note that if the server maintains contents,
+then the server should maintain complete contents
+not just the region within the parent boundaries,
+even if the window is larger than its parent.
+While the server maintains contents,
+exposure events will not normally be generated,
+but the server may stop maintaining contents at any time.
+</para>
+<para>
+If save-under is
+<emphasis role='bold'>True</emphasis>,
+the server is advised that when this window is
+mapped, saving the contents of windows it obscures would be beneficial.
+</para>
+<para>
+When the contents of obscured regions of a window are being maintained,
+regions obscured by noninferior windows are included in the
+destination (and source, when the window is the source) of graphics
+requests, but regions obscured by inferior windows are not included.
+</para>
+<para>
+The backing-planes indicates (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 specifies what value to use in planes not
+covered by backing-planes.
+The server is free to save only the specified bit planes in the backing-store
+or save-under and regenerate the remaining planes with the specified pixel
+value.
+Any bits beyond the specified depth of the window in these
+values are simply ignored.
+</para>
+<para id="requests:CreateWindow:event-mask">
+<indexterm zone="requests:CreateWindow:event-mask"><primary>Event</primary><secondary>mask</secondary></indexterm>
+<indexterm zone="requests:CreateWindow:event-mask"><primary>Event</primary><secondary>propagation</secondary></indexterm>
+The event-mask defines which events the client is interested in for
+this window (or for some event types, inferiors of the window).
+The do-not-propagate-mask defines which events should not be propagated to
+ancestor windows when no client has the event type selected in this
+window.
+</para>
+<para>
+The override-redirect specifies whether map and configure requests on this
+window should override a
+<emphasis role='bold'>SubstructureRedirect</emphasis>
+on the parent, typically to inform a window manager not to tamper with
+the window.
+</para>
+<para>
+The colormap specifies the colormap that best reflects the true
+colors of the window.
+Servers capable of supporting multiple hardware colormaps may use this
+information, and window managers may use it for
+<link linkend="requests:InstallColormap"><emphasis role='bold'>InstallColormap</emphasis></link>
+requests.
+The colormap must have the same visual type and root as the window (or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+If
+<emphasis role='bold'>CopyFromParent</emphasis>
+is specified,
+the parent's colormap is copied (subsequent changes to the parent's
+colormap attribute do not affect the child).
+However, the window must have the same visual type as the parent (or a
+<emphasis role='bold'>Match</emphasis>
+error results), and the parent must not have a colormap of
+<emphasis role='bold'>None</emphasis>
+(or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+For an explanation of
+<emphasis role='bold'>None</emphasis>,
+see <link linkend="requests:FreeColormap"><emphasis role='bold'>FreeColormap</emphasis></link>
+request.
+The colormap is copied by sharing the colormap object between the child
+and the parent,
+not by making a complete copy of the colormap contents.
+</para>
+<para>
+If a cursor is specified,
+it will be used whenever the pointer is in the window.
+If
+<emphasis role='bold'>None</emphasis>
+is specified,
+the parent's cursor will be used when the pointer is in the window,
+and any change in the parent's cursor will cause an immediate change
+in the displayed cursor.
+</para>
+<para>
+This request generates a
+<link linkend="events:CreateNotify"><emphasis role='bold'>CreateNotify</emphasis></link>
+event.
+</para>
+<para>
+The background and border pixmaps and the cursor may be freed
+immediately if no further explicit references to them are to be made.
+</para>
+<para>
+Subsequent drawing into the background or border pixmap has an
+undefined effect on the window state.
+The server might or might not make a copy of the pixmap.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:ChangeWindowAttributes">
+ <title>ChangeWindowAttributes</title>
+ <indexterm zone="requests:ChangeWindowAttributes" significance="preferred"><primary>ChangeWindowAttributes</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>value-mask</emphasis>: BITMASK
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>value-list</emphasis>: LISTofVALUE
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Access</emphasis>,
+<emphasis role='bold'>Colormap</emphasis>,
+<emphasis role='bold'>Cursor</emphasis>,
+<emphasis role='bold'>Match</emphasis>,
+<emphasis role='bold'>Pixmap</emphasis>,
+<emphasis role='bold'>Value</emphasis>,
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+The value-mask and value-list specify which attributes are to be changed.
+The values and restrictions are the same as for
+<link linkend="requests:CreateWindow"><emphasis role='bold'>CreateWindow</emphasis></link>.
+</para>
+<para>
+Setting a new background, whether by background-pixmap or
+background-pixel, overrides any previous background.
+Setting a new border, whether by border-pixel or border-pixmap,
+overrides any previous border.
+</para>
+<para>
+Changing the background does not cause the window contents to be changed.
+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
+<emphasis role='bold'>None</emphasis>
+or
+<emphasis role='bold'>ParentRelative</emphasis>
+restores the default background pixmap.
+Changing the border of a root window to
+<emphasis role='bold'>CopyFromParent</emphasis>
+restores the default border pixmap.
+</para>
+<para>
+Changing the win-gravity does not affect the current position of the
+window.
+</para>
+<para>
+Changing the backing-store of an obscured window to
+<emphasis role='bold'>WhenMapped</emphasis>
+or
+<emphasis role='bold'>Always</emphasis>
+or changing the backing-planes, backing-pixel, or save-under of
+a mapped window may have no immediate effect.
+</para>
+<para>
+Multiple clients can select input on the same window;
+their event-masks are disjoint.
+When an event is generated,
+it will be reported to all interested clients.
+However, only one client at a time can select for
+<emphasis role='bold'>SubstructureRedirect</emphasis>,
+only one client at a time can select for
+<emphasis role='bold'>ResizeRedirect</emphasis>,
+and only one client at a time can select for
+<link linkend="events:ButtonPress"><emphasis role='bold'>ButtonPress</emphasis></link>.
+An attempt to violate these restrictions results in an
+<emphasis role='bold'>Access</emphasis>
+error.
+</para>
+<para>
+There is only one do-not-propagate-mask for a window, not one per
+client.
+</para>
+<para>
+Changing the colormap of a window (by defining a new map, not by
+changing the contents of the existing map) generates a
+<link linkend="events:ColormapNotify"><emphasis role='bold'>ColormapNotify</emphasis></link>
+event.
+Changing the colormap of a visible window might have no immediate effect
+on the screen (see
+<link linkend="requests:InstallColormap"><emphasis role='bold'>InstallColormap</emphasis></link>
+request).
+</para>
+<para>
+Changing the cursor of a root window to
+<emphasis role='bold'>None</emphasis>
+restores the default cursor.
+</para>
+<para>
+The order in which attributes are verified and altered is server-dependent.
+If an error is generated,
+a subset of the attributes may have been altered.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:GetWindowAttributes">
+ <title>GetWindowAttributes</title>
+ <indexterm zone="requests:GetWindowAttributes" significance="preferred"><primary>GetWindowAttributes</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+visual: VISUALID
+ </entry>
+ </row>
+ <row>
+ <entry>
+class:
+{ <emphasis role='bold'>InputOutput</emphasis>,
+<emphasis role='bold'>InputOnly</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+bit-gravity: BITGRAVITY
+ </entry>
+ </row>
+ <row>
+ <entry>
+win-gravity: WINGRAVITY
+ </entry>
+ </row>
+ <row>
+ <entry>
+backing-store:
+{ <emphasis role='bold'>NotUseful</emphasis>,
+<emphasis role='bold'>WhenMapped</emphasis>,
+<emphasis role='bold'>Always</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+backing-planes: CARD32
+ </entry>
+ </row>
+ <row>
+ <entry>
+backing-pixel: CARD32
+ </entry>
+ </row>
+ <row>
+ <entry>
+save-under: BOOL
+ </entry>
+ </row>
+ <row>
+ <entry>
+colormap: COLORMAP or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+map-is-installed: BOOL
+ </entry>
+ </row>
+ <row>
+ <entry>
+map-state:
+{ <emphasis role='bold'>Unmapped</emphasis>,
+<emphasis role='bold'>Unviewable</emphasis>,
+<emphasis role='bold'>Viewable</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+all-event-masks, your-event-mask: SETofEVENT
+ </entry>
+ </row>
+ <row>
+ <entry>
+do-not-propagate-mask: SETofDEVICEEVENT
+ </entry>
+ </row>
+ <row>
+ <entry>
+override-redirect: BOOL
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns the current attributes of the window.
+A window is
+<emphasis role='bold'>Unviewable</emphasis>
+if it is mapped but some ancestor is unmapped.
+All-event-masks is the inclusive-OR of all event masks selected on the window
+by clients.
+Your-event-mask is the event mask selected by the querying client.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:DestroyWindow">
+ <title>DestroyWindow</title>
+ <indexterm zone="requests:DestroyWindow" significance="preferred"><primary>DestroyWindow</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+If the argument window is mapped,
+an
+<link linkend="requests:UnmapWindow"><emphasis role='bold'>UnmapWindow</emphasis></link>
+request is performed automatically.
+The window and all inferiors are then destroyed, and a
+<link linkend="events:DestroyNotify"><emphasis role='bold'>DestroyNotify</emphasis></link>
+event is generated for each window.
+The ordering of the
+<emphasis role='bold'>DestroyNotify</emphasis>
+events is such that for any given window,
+<emphasis role='bold'>DestroyNotify</emphasis>
+is generated on all inferiors of the window before being generated on
+the window itself.
+The ordering among siblings and across subhierarchies is not otherwise
+constrained.
+</para>
+<para>
+Normal exposure processing on formerly obscured windows is performed.
+</para>
+<para>
+If the window is a root window,
+this request has no effect.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:DestroySubwindows">
+ <title>DestroySubwindows</title>
+ <indexterm zone="requests:DestroySubwindows" significance="preferred"><primary>DestroySubwindows</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request performs a
+<link linkend="requests:DestroyWindow"><emphasis role='bold'>DestroyWindow</emphasis></link>
+request on all children of the window, in bottom-to-top stacking order.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:ChangeSaveSet">
+ <title>ChangeSaveSet</title>
+ <indexterm zone="requests:ChangeSaveSet" significance="preferred"><primary>ChangeSaveSet</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>mode</emphasis>:
+{ <emphasis role='bold'>Insert</emphasis>,
+<emphasis role='bold'>Delete</emphasis>}
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+Errors:
+<!-- .in +.2i -->
+<emphasis role='bold'>Match</emphasis>,
+<emphasis role='bold'>Value</emphasis>,
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request adds or removes the specified window from the client's
+save-set.
+The window must have been created by some other client (or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+For further information about the use of the save-set,
+see <link linkend='Connection_Close'>section 10</link>.
+</para>
+<para>
+When windows are destroyed,
+the server automatically removes them from the save-set.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:ReparentWindow">
+ <title>ReparentWindow</title>
+ <indexterm zone="requests:ReparentWindow" significance="preferred"><primary>ReparentWindow</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>, <emphasis remap='I'>parent</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Match</emphasis>,
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+If the window is mapped,
+an
+<link linkend="requests:UnmapWindow"><emphasis role='bold'>UnmapWindow</emphasis></link>
+request is performed automatically first.
+The window is then removed from its current position in the hierarchy
+and is inserted as a child of the specified parent.
+The x and y coordinates are relative to the parent's origin
+and specify the new position of the upper-left outer corner of the
+window.
+The window is placed on top in the stacking order with respect
+to siblings.
+A
+<link linkend="events:ReparentNotify"><emphasis role='bold'>ReparentNotify</emphasis></link>
+event is then generated.
+The override-redirect attribute of the window is passed on in this event;
+a value of
+<emphasis role='bold'>True</emphasis>
+indicates that a window manager should not tamper with this window.
+Finally, if the window was originally mapped, a
+<link linkend="requests:MapWindow"><emphasis role='bold'>MapWindow</emphasis></link>
+request is performed automatically.
+</para>
+<para>
+Normal exposure processing on formerly obscured windows is performed.
+The server might not generate exposure events for regions from the
+initial unmap that are immediately obscured by the final map.
+</para>
+<para>
+A
+<emphasis role='bold'>Match</emphasis>
+error is generated if:
+<!-- .IP bu 5 -->
+The new parent is not on the same screen as the old parent.
+<!-- .IP bu 5 -->
+The new parent is the window itself or an inferior of the window.
+<!-- .IP bu 5 -->
+The new parent is
+<emphasis role='bold'>InputOnly</emphasis>,
+and the window is not.
+<!-- .IP bu 5 -->
+The window has a
+<emphasis role='bold'>ParentRelative</emphasis>
+background, and the new parent is not the same depth as the window.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:MapWindow">
+ <title>MapWindow</title>
+ <indexterm zone="requests:MapWindow" significance="preferred"><primary>MapWindow</primary></indexterm>
+ <indexterm zone="requests:MapWindow"><primary>Mapped window</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+If the window is already mapped, this request has no effect.
+</para>
+<para>
+If the override-redirect attribute of the window is
+<emphasis role='bold'>False</emphasis>
+and some other client has selected
+<emphasis role='bold'>SubstructureRedirect</emphasis>
+on the parent, then a
+<link linkend="events:MapRequest"><emphasis role='bold'>MapRequest</emphasis></link>
+event is generated, but the window remains unmapped.
+Otherwise, the window is mapped,
+and a
+<link linkend="events:MapNotify"><emphasis role='bold'>MapNotify</emphasis></link>
+event is generated.
+</para>
+<para>
+If the window is now viewable and its contents have been discarded,
+the window is tiled with its background (if no background is defined,
+the existing screen contents are not altered), and zero or more exposure
+events are generated.
+If a backing-store has been maintained while the window was unmapped,
+no exposure events are generated.
+If a 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.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:MapSubwindows">
+ <title>MapSubwindows</title>
+ <indexterm zone="requests:MapSubwindows" significance="preferred"><primary>MapSubwindows</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request performs a
+<link linkend="requests:MapWindow"><emphasis role='bold'>MapWindow</emphasis></link>
+request on all unmapped children of the window,
+in top-to-bottom stacking order.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:UnmapWindow">
+ <title>UnmapWindow</title>
+ <indexterm zone="requests:UnmapWindow" significance="preferred"><primary>UnmapWindow</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+If the window is already unmapped, this request has no effect.
+Otherwise, the window is unmapped, and an
+<link linkend="events:UnmapNotify"><emphasis role='bold'>UnmapNotify</emphasis></link>
+event is generated.
+Normal exposure processing on formerly obscured windows is performed.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:UnmapSubwindows">
+ <title>UnmapSubwindows</title>
+ <indexterm zone="requests:UnmapSubwindows" significance="preferred"><primary>UnmapSubwindows</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request performs an
+<link linkend="requests:UnmapWindow"><emphasis role='bold'>UnmapWindow</emphasis></link>
+request on all mapped children of the window,
+in bottom-to-top stacking order.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:ConfigureWindow">
+ <title>ConfigureWindow</title>
+ <indexterm zone="requests:ConfigureWindow" significance="preferred"><primary>ConfigureWindow</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>value-mask</emphasis>: BITMASK
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>value-list</emphasis>: LISTofVALUE
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Match</emphasis>,
+<emphasis role='bold'>Value</emphasis>,
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request changes the configuration of the window.
+The value-mask and value-list specify which values are to be given.
+The possible values are:
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='2.0*'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Attribute</entry>
+ <entry>Type</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>x</entry>
+ <entry>INT16</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>INT16</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>CARD16</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>CARD16</entry>
+ </row>
+ <row>
+ <entry>border-width</entry>
+ <entry>CARD16</entry>
+ </row>
+ <row>
+ <entry>sibling</entry>
+ <entry>WINDOW</entry>
+ </row>
+ <row>
+ <entry>stack-mode</entry>
+ <entry>
+{ <emphasis role='bold'>Above</emphasis>,
+<emphasis role='bold'>Below</emphasis>,
+<emphasis role='bold'>TopIf</emphasis>,
+<emphasis role='bold'>BottomIf</emphasis>,
+<emphasis role='bold'>Opposite</emphasis> }
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The x and y coordinates are relative to the parent's origin
+and specify the position of the upper-left outer corner of the window.
+The width and height specify the inside size, not including the border, and
+must be nonzero (or a
+<emphasis role='bold'>Value</emphasis>
+error results).
+Those values not specified are taken from the existing geometry of the window.
+Note that changing 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.
+It is a
+<emphasis role='bold'>Match</emphasis>
+error to attempt to make the border-width of an
+<emphasis role='bold'>InputOnly</emphasis>
+window nonzero.
+</para>
+<para>
+If the override-redirect attribute of the window is
+<emphasis role='bold'>False</emphasis>
+and some other client has selected
+<emphasis role='bold'>SubstructureRedirect</emphasis>
+on the parent, a
+<link linkend="events:ConfigureRequest"><emphasis role='bold'>ConfigureRequest</emphasis></link>
+event is generated, and no further processing is performed.
+Otherwise, the following is performed:
+</para>
+<para>
+If some other client has selected
+<emphasis role='bold'>ResizeRedirect</emphasis>
+on the window and the inside width or height of the window is being changed,
+a
+<link linkend="events:ResizeRequest"><emphasis role='bold'>ResizeRequest</emphasis></link>
+event is generated,
+and the current inside width and height are used instead.
+Note that the override-redirect attribute of the window has no effect on
+<emphasis role='bold'>ResizeRedirect</emphasis>
+and that
+<emphasis role='bold'>SubstructureRedirect</emphasis>
+on the parent has precedence over
+<emphasis role='bold'>ResizeRedirect</emphasis>
+on the window.
+</para>
+<para id="requests:ConfigureWindow:gravity">
+<indexterm zone="requests:ConfigureWindow:gravity"><primary>Gravity</primary></indexterm>
+<indexterm zone="requests:ConfigureWindow:gravity"><primary>Bit</primary><secondary>gravity</secondary></indexterm>
+<indexterm zone="requests:ConfigureWindow:gravity"><primary>Window</primary><secondary>gravity</secondary></indexterm>
+The geometry of the window is changed as specified,
+the window is restacked among siblings, and a
+<link linkend="events:ConfigureNotify"><emphasis role='bold'>ConfigureNotify</emphasis></link>
+event is generated if the state of the window actually changes.
+If the inside width or height of the window has actually changed,
+then children of the window are affected,
+according to their win-gravity.
+Exposure processing is performed on formerly obscured windows
+(including the window itself and its inferiors if regions of them were
+obscured but now are not).
+Exposure processing is also performed on any new regions of the window
+(as a result of increasing the width or height)
+and on any regions where window contents are lost.
+</para>
+<para>
+If the inside width or height of a window is not changed
+but 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.
+It also causes children to be reconfigured, depending on their win-gravity.
+For a change of width and height of W and H,
+we define the [x, y] pairs as:
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='2.0*'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Direction</entry>
+ <entry>Deltas</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>
+<emphasis role='bold'>NorthWest</emphasis>
+ </entry>
+ <entry>[0, 0]</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>North</emphasis>
+ </entry>
+ <entry>[W/2, 0]</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>NorthEast</emphasis>
+ </entry>
+ <entry>[W, 0]</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>West</emphasis>
+ </entry>
+ <entry>[0, H/2]</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Center</emphasis>
+ </entry>
+ <entry>[W/2, H/2]</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>East</emphasis>
+ </entry>
+ <entry>[W, H/2]</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>SouthWest</emphasis>
+ </entry>
+ <entry>[0, H]</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>South</emphasis>
+ </entry>
+ <entry>[W/2, H]</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>SouthEast</emphasis>
+ </entry>
+ <entry>[W, H]</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+When a window with one of these bit-gravities 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.
+This repositioning generates a
+<link linkend="events:GravityNotify"><emphasis role='bold'>GravityNotify</emphasis></link>
+event.
+<emphasis role='bold'>GravityNotify</emphasis>
+events are generated after the
+<link linkend="events:ConfigureNotify"><emphasis role='bold'>ConfigureNotify</emphasis></link>
+event is generated.
+</para>
+<para>
+A gravity of
+<emphasis role='bold'>Static</emphasis>
+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 of [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
+<emphasis role='bold'>Static</emphasis>
+gravity still only takes effect when the width or height of the
+window is changed, not when the window is simply moved.
+</para>
+<para>
+A bit-gravity of
+<emphasis role='bold'>Forget</emphasis>
+indicates that the window contents are always discarded after a size change,
+even if backing-store or save-under has been requested.
+The window is tiled with its background (except, if no background is defined,
+the existing screen contents are not altered)
+and zero or more exposure events are generated.
+</para>
+<para>
+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
+<emphasis role='bold'>Forget</emphasis>
+instead.
+</para>
+<para>
+A win-gravity of
+<emphasis role='bold'>Unmap</emphasis>
+is like
+<emphasis role='bold'>NorthWest</emphasis>,
+but the child is also unmapped when the parent is resized,
+and an
+<link linkend="events:UnmapNotify"><emphasis role='bold'>UnmapNotify</emphasis></link>
+event is generated.
+<emphasis role='bold'>UnmapNotify</emphasis>
+events are generated after the
+<link linkend="events:ConfigureNotify"><emphasis role='bold'>ConfigureNotify</emphasis></link>
+event is generated.
+</para>
+<para>
+If a sibling and a stack-mode are specified,
+the window is restacked as follows:
+</para>
+
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='3.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<emphasis role='bold'>Above</emphasis>
+ </entry>
+ <entry>
+The window is placed just above the sibling.
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Below</emphasis>
+ </entry>
+ <entry>
+The window is placed just below the sibling.
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>TopIf</emphasis>
+ </entry>
+ <entry>
+If the sibling occludes the window,
+then the window is placed at the top of the stack.
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>BottomIf</emphasis>
+ </entry>
+ <entry>
+If the window occludes the sibling,
+then the window is placed at the bottom of the stack.
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Opposite</emphasis>
+ </entry>
+ <entry>
+If the sibling occludes the window,
+then the window is placed at the top of the stack.
+Otherwise, if the window occludes the sibling,
+then the window is placed at the bottom of the stack.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+If a stack-mode is specified but no sibling is specified,
+the window is restacked as follows:
+</para>
+
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='3.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<emphasis role='bold'>Above</emphasis>
+ </entry>
+ <entry>
+The window is placed at the top of the stack.
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Below</emphasis>
+ </entry>
+ <entry>
+The window is placed at the bottom of the stack.
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>TopIf</emphasis>
+ </entry>
+ <entry>
+If any sibling occludes the window,
+then the window is placed at the top of the stack.
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>BottomIf</emphasis>
+ </entry>
+ <entry>
+If the window occludes any sibling,
+then the window is placed at the bottom of the stack.
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Opposite</emphasis>
+ </entry>
+ <entry>
+If any sibling occludes the window,
+then the window is placed at the top of the stack.
+Otherwise, if the window occludes any sibling,
+then the window is placed at the bottom of the stack.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+It is a
+<emphasis role='bold'>Match</emphasis>
+error if a sibling is specified without a stack-mode
+or if the window is not actually a sibling.
+</para>
+<para>
+Note that the computations for
+<emphasis role='bold'>BottomIf</emphasis>,
+<emphasis role='bold'>TopIf</emphasis>,
+and
+<emphasis role='bold'>Opposite</emphasis>
+are performed with respect to the window's final geometry (as controlled by
+the other arguments to the request), not to its initial geometry.
+</para>
+<para>
+Attempts to configure a root window have no effect.
+</para>
+
+ </section>
+ <section id="requests:CirculateWindow">
+ <title>CirculateWindow</title>
+ <indexterm zone="requests:CirculateWindow" significance="preferred"><primary>CirculateWindow</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>direction</emphasis>:
+{ <emphasis role='bold'>RaiseLowest</emphasis>,
+<emphasis role='bold'>LowerHighest</emphasis>}
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Value</emphasis>,
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+If some other client has selected
+<emphasis role='bold'>SubstructureRedirect</emphasis>
+on the window, then a
+<link linkend="events:CirculateRequest"><emphasis role='bold'>CirculateRequest</emphasis></link>
+event is generated, and no further processing is performed.
+Otherwise, the following is performed, and then a
+<link linkend="events:CirculateNotify"><emphasis role='bold'>CirculateNotify</emphasis></link>
+event is generated if the window is actually restacked.
+</para>
+<para>
+For
+<emphasis role='bold'>RaiseLowest</emphasis>,
+<emphasis role='bold'>CirculateWindow</emphasis>
+raises the lowest mapped child (if any) that is
+occluded by another child to the top of the stack.
+For
+<emphasis role='bold'>LowerHighest</emphasis>,
+<emphasis role='bold'>CirculateWindow</emphasis>
+lowers the highest mapped child (if any) that occludes another child to
+the bottom of the stack.
+Exposure processing is performed on formerly obscured windows.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:GetGeometry">
+ <title>GetGeometry</title>
+ <indexterm zone="requests:GetGeometry" significance="preferred"><primary>GetGeometry</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>drawable</emphasis>: DRAWABLE
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+root: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+depth: CARD8
+ </entry>
+ </row>
+ <row>
+ <entry>
+x, y: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+width, height, border-width: CARD16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Drawable</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns the root and current geometry of the drawable.
+The depth is the number of bits per pixel for the object.
+The x, y, and border-width will always be zero for pixmaps.
+For a window,
+the x and y coordinates specify the upper-left outer corner of the window
+relative to its parent's origin,
+and the width and height specify the inside size, not including the border.
+</para>
+<para>
+It is legal to pass an
+<emphasis role='bold'>InputOnly</emphasis>
+window as a drawable to this request.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:QueryTree">
+ <title>QueryTree</title>
+ <indexterm zone="requests:QueryTree" significance="preferred"><primary>QueryTree</primary></indexterm>
+ <indexterm zone="requests:QueryTree"><primary>Children</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+root: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+parent: WINDOW or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+children: LISTofWINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns the root, the parent, and the children of the window.
+The children are listed in bottom-to-top stacking order.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:InternAtom">
+ <title>InternAtom</title>
+ <indexterm zone="requests:InternAtom" significance="preferred"><primary>InternAtom</primary></indexterm>
+ <indexterm zone="requests:InternAtom"><primary>Atom</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>name</emphasis>: STRING8
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>only-if-exists</emphasis>: BOOL
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+atom: ATOM or
+<emphasis role='bold'>None</emphasis>
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Alloc</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns the atom for the given name.
+If only-if-exists is
+<emphasis role='bold'>False</emphasis>,
+then the atom is created if it does not exist.
+The string should use the ISO Latin-1 encoding.
+Uppercase and lowercase matter.
+</para>
+<para>
+The lifetime of an atom is not tied to the interning client.
+Atoms remain defined until server reset (see <link linkend='Connection_Close'>section 10</link>).
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:GetAtomName">
+ <title>GetAtomName</title>
+ <indexterm zone="requests:GetAtomName" significance="preferred"><primary>GetAtomName</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>atom</emphasis>: ATOM
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+name: STRING8
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Atom</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns the name for the given atom.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:ChangeProperty">
+ <title>ChangeProperty</title>
+ <indexterm zone="requests:ChangeProperty" significance="preferred"><primary>ChangeProperty</primary></indexterm>
+ <indexterm zone="requests:ChangeProperty"><primary>Property</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>property</emphasis>, <emphasis remap='I'>type</emphasis>: ATOM
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>format</emphasis>: {8, 16, 32}
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>mode</emphasis>:
+{ <emphasis role='bold'>Replace</emphasis>,
+<emphasis role='bold'>Prepend</emphasis>,
+<emphasis role='bold'>Append</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>data</emphasis>: LISTofINT8 or LISTofINT16 or LISTofINT32
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Alloc</emphasis>,
+<emphasis role='bold'>Atom</emphasis>,
+<emphasis role='bold'>Match</emphasis>,
+<emphasis role='bold'>Value</emphasis>,
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request alters the property for the specified window.
+The type is uninterpreted by the server.
+The format specifies whether the data should be viewed as a list of 8-bit,
+16-bit, or 32-bit quantities so that the server can correctly byte-swap
+as necessary.
+</para>
+<para>
+If the mode is
+<emphasis role='bold'>Replace</emphasis>,
+the previous property value is discarded.
+If the mode is
+<emphasis role='bold'>Prepend</emphasis>
+or
+<emphasis role='bold'>Append</emphasis>,
+then the type and format must match the existing property value (or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+If the property is undefined,
+it is treated as defined with the correct type
+and format with zero-length data.
+For
+<emphasis role='bold'>Prepend</emphasis>,
+the data is tacked on to the beginning of the existing data, and for
+<emphasis role='bold'>Append</emphasis>,
+it is tacked on to the end of the existing data.
+</para>
+<para>
+This request generates a
+<link linkend="events:PropertyNotify"><emphasis role='bold'>PropertyNotify</emphasis></link>
+event on the window.
+</para>
+<para>
+The lifetime of a property is not tied to the storing client.
+Properties remain until explicitly deleted, until the window is destroyed,
+or until server reset (see <link linkend='Connection_Close'>section 10</link>).
+</para>
+<para>
+The maximum size of a property is server-dependent and may vary dynamically.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:DeleteProperty">
+ <title>DeleteProperty</title>
+ <indexterm zone="requests:DeleteProperty" significance="preferred"><primary>DeleteProperty</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>property</emphasis>: ATOM
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Atom</emphasis>,
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request deletes the property from the specified window
+if the property exists and generates a
+<link linkend="events:PropertyNotify"><emphasis role='bold'>PropertyNotify</emphasis></link>
+event on the window unless the property does not exist.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:GetProperty">
+ <title>GetProperty</title>
+ <indexterm zone="requests:GetProperty" significance="preferred"><primary>GetProperty</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>property</emphasis>: ATOM
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>type</emphasis>: ATOM or
+<emphasis role='bold'>AnyPropertyType</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>long-offset</emphasis>, <emphasis remap='I'>long-length</emphasis>: CARD32
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>delete</emphasis>: BOOL
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+type: ATOM or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+format: {0, 8, 16, 32}
+ </entry>
+ </row>
+ <row>
+ <entry>
+bytes-after: CARD32
+ </entry>
+ </row>
+ <row>
+ <entry>
+value: LISTofINT8 or LISTofINT16 or LISTofINT32
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Atom</emphasis>,
+<emphasis role='bold'>Value</emphasis>,
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+If the specified property does not exist for the specified window,
+then the return type is
+<emphasis role='bold'>None</emphasis>,
+the format and bytes-after are zero,
+and the value is empty.
+The delete argument is ignored in this case.
+If the specified property exists but its type does not match the specified type,
+then the return type is the actual type of the property,
+the format is the actual format of the property (never zero),
+the bytes-after is the length of the property in bytes
+(even if the format is 16 or 32),
+and the value is empty.
+The delete argument is ignored in this case.
+If the specified property exists and either
+<emphasis role='bold'>AnyPropertyType</emphasis>
+is specified or the specified type matches the actual type of the property,
+then the return type is the actual type of the property,
+the format is the actual format of the property (never zero),
+and the bytes-after and value are as follows, given:
+<literallayout class="monospaced">
+ 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)
+</literallayout>
+</para>
+<para>
+The returned value starts at byte index I in the property (indexing from 0),
+and its length in bytes is L.
+However, it is a
+<emphasis role='bold'>Value</emphasis>
+error if long-offset is given such that L is negative.
+The value of bytes-after is A,
+giving the number of trailing unread bytes in the stored
+property.
+If delete is
+<emphasis role='bold'>True</emphasis>
+and the bytes-after is zero,
+the property is also deleted from the window,
+and a
+<link linkend="events:PropertyNotify"><emphasis role='bold'>PropertyNotify</emphasis></link>
+event is generated on the window.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:RotateProperties">
+ <title>RotateProperties</title>
+ <indexterm zone="requests:RotateProperties" significance="preferred"><primary>RotateProperties</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>delta</emphasis>: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>properties</emphasis>: LISTofATOM
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Atom</emphasis>,
+<emphasis role='bold'>Match</emphasis>,
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+If the property names in the list are viewed as being numbered starting
+from zero, and there are N property names in the list,
+then the value associated with property name I becomes the value
+associated with property name (I + delta) mod N, for all I from zero to N - 1.
+The effect is to rotate the states by delta places around the virtual ring
+of property names (right for positive delta, left for negative delta).
+</para>
+<para>
+If delta mod N is nonzero,
+a
+<link linkend="events:PropertyNotify"><emphasis role='bold'>PropertyNotify</emphasis></link>
+event is generated for each property in the order listed.
+</para>
+<para>
+If an atom occurs more than once in the list or no property with that
+name is defined for the window,
+a
+<emphasis role='bold'>Match</emphasis>
+error is generated.
+If an
+<emphasis role='bold'>Atom</emphasis>
+or
+<emphasis role='bold'>Match</emphasis>
+error is generated, no properties are changed.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:ListProperties">
+ <title>ListProperties</title>
+ <indexterm zone="requests:ListProperties" significance="preferred"><primary>ListProperties</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+atoms: LISTofATOM
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns the atoms of properties currently defined on the window.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:SetSelectionOwner">
+ <title>SetSelectionOwner</title>
+ <indexterm zone="requests:SetSelectionOwner" significance="preferred"><primary>SetSelectionOwner</primary></indexterm>
+ <indexterm zone="requests:SetSelectionOwner"><primary>Selection</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>selection</emphasis>: ATOM
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>owner</emphasis>: WINDOW or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>time</emphasis>: TIMESTAMP or
+<emphasis role='bold'>CurrentTime</emphasis>
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Atom</emphasis>,
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request changes the owner, owner window,
+and last-change time of the specified selection.
+This request 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 server time.
+Otherwise, the last-change time is set to the specified time
+with
+<emphasis role='bold'>CurrentTime</emphasis>
+replaced by the current server time.
+If the owner window is specified as
+<emphasis role='bold'>None</emphasis>,
+then the owner of the selection becomes
+<emphasis role='bold'>None</emphasis>
+(that is, no owner).
+Otherwise, the owner of the selection becomes the client executing the request.
+If the new owner (whether a client or
+<emphasis role='bold'>None</emphasis>)
+is not the same as the current owner
+and the current owner is not
+<emphasis role='bold'>None</emphasis>,
+then the current owner is sent a
+<link linkend="events:SelectionClear"><emphasis role='bold'>SelectionClear</emphasis></link>
+event.
+</para>
+<para>
+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,
+then the owner of the selection automatically reverts to
+<emphasis role='bold'>None</emphasis>,
+but the last-change time is not affected.
+</para>
+<para>
+The selection atom is uninterpreted by the server.
+The owner window is returned by the
+<link linkend="requests:GetSelectionOwner"><emphasis role='bold'>GetSelectionOwner</emphasis></link>
+request and is reported in
+<link linkend="events:SelectionRequest"><emphasis role='bold'>SelectionRequest</emphasis></link>
+and
+<link linkend="events:SelectionClear"><emphasis role='bold'>SelectionClear</emphasis></link>
+events.
+</para>
+<para>
+Selections are global to the server.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:GetSelectionOwner">
+ <title>GetSelectionOwner</title>
+ <indexterm zone="requests:GetSelectionOwner" significance="preferred"><primary>GetSelectionOwner</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>selection</emphasis>: ATOM
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+owner: WINDOW or
+<emphasis role='bold'>None</emphasis>
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Atom</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns the current owner window of the specified selection,
+if any.
+If
+<emphasis role='bold'>None</emphasis>
+is returned, then there is no owner for the selection.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:ConvertSelection">
+ <title>ConvertSelection</title>
+ <indexterm zone="requests:ConvertSelection" significance="preferred"><primary>ConvertSelection</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>selection</emphasis>, <emphasis remap='I'>target</emphasis>: ATOM
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>property</emphasis>: ATOM or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>requestor</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>time</emphasis>: TIMESTAMP or
+<emphasis role='bold'>CurrentTime</emphasis>
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Atom</emphasis>,
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+If the specified selection has an owner,
+the server sends a
+<link linkend="events:SelectionRequest"><emphasis role='bold'>SelectionRequest</emphasis></link>
+event to that owner.
+If no owner for the specified selection exists,
+the server generates a
+<link linkend="events:SelectionNotify"><emphasis role='bold'>SelectionNotify</emphasis></link>
+event to the requestor with property
+<emphasis role='bold'>None</emphasis>.
+The arguments are passed on unchanged in either of the events.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:SendEvent">
+ <title>SendEvent</title>
+ <indexterm zone="requests:SendEvent" significance="preferred"><primary>SendEvent</primary></indexterm>
+ <indexterm zone="requests:SendEvent" significance="preferred"><primary>Event</primary><secondary>sending</secondary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>destination</emphasis>: WINDOW or
+<emphasis role='bold'>PointerWindow</emphasis>
+or
+<emphasis role='bold'>InputFocus</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>propagate</emphasis>: BOOL
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>event-mask</emphasis>: SETofEVENT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>event</emphasis>: &lt;normal-event-format&gt;
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Value</emphasis>,
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+If
+<emphasis role='bold'>PointerWindow</emphasis>
+is specified,
+destination is replaced with the window that the pointer is in.
+If
+<emphasis role='bold'>InputFocus</emphasis>
+is specified and the focus window contains the pointer,
+destination is replaced with the window that the pointer is in.
+Otherwise, destination is replaced with the focus window.
+</para>
+<para>
+If the event-mask is the empty set,
+then the event is sent to the client that created the destination window.
+If that client no longer exists, no event is sent.
+</para>
+<para>
+If propagate is
+<emphasis role='bold'>False</emphasis>,
+then the event is sent to every client selecting
+on destination any of the event types in event-mask.
+</para>
+<para>
+If propagate is
+<emphasis role='bold'>True</emphasis>
+and no clients have selected on destination any
+of the event types in event-mask,
+then destination is replaced with the
+closest ancestor of destination for which some client has selected a
+type in event-mask and 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
+<emphasis role='bold'>InputFocus</emphasis>
+was originally specified as the destination,
+then 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.
+</para>
+<para>
+The event code must be one of the core events or one of the events
+defined by an extension (or a
+<emphasis role='bold'>Value</emphasis>
+error results) so that the server can correctly byte-swap the
+contents as necessary.
+The contents of the event are otherwise unaltered and unchecked
+by the server except to force on the most significant bit of the event code
+and to set the sequence number in the event correctly.
+</para>
+<para>
+Active grabs are ignored for this request.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:GrabPointer">
+ <title>GrabPointer</title>
+ <indexterm zone="requests:GrabPointer" significance="preferred"><primary>GrabPointer</primary></indexterm>
+ <indexterm zone="requests:GrabPointer"><primary>Active grab</primary><secondary>pointer</secondary></indexterm>
+ <indexterm zone="requests:GrabPointer"><primary>Pointer</primary><secondary>grabbing</secondary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>grab-window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>owner-events</emphasis>: BOOL
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>event-mask</emphasis>: SETofPOINTEREVENT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>pointer-mode</emphasis>, <emphasis remap='I'>keyboard-mode</emphasis>:
+{ <emphasis role='bold'>Synchronous</emphasis>,
+<emphasis role='bold'>Asynchronous</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>confine-to</emphasis>: WINDOW or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>cursor</emphasis>: CURSOR or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>time</emphasis>: TIMESTAMP or
+<emphasis role='bold'>CurrentTime</emphasis>
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+status:
+{ <emphasis role='bold'>Success</emphasis>,
+<emphasis role='bold'>AlreadyGrabbed</emphasis>,
+<emphasis role='bold'>Frozen</emphasis>,
+<emphasis role='bold'>InvalidTime</emphasis>,
+<emphasis role='bold'>NotViewable</emphasis>}
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Cursor</emphasis>,
+<emphasis role='bold'>Value</emphasis>,
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request actively grabs control of the pointer.
+Further pointer events are only reported to the grabbing client.
+The request overrides any active pointer grab by this client.
+</para>
+<para>
+If owner-events is
+<emphasis role='bold'>False</emphasis>,
+all generated pointer events are reported with respect to grab-window
+and are only reported if selected by event-mask.
+If owner-events is
+<emphasis role='bold'>True</emphasis>
+and a generated pointer event would normally be reported to this client,
+it is reported normally.
+Otherwise, the event is reported with respect to the grab-window and is
+only reported if selected by event-mask.
+For either value of owner-events,
+unreported events are simply discarded.
+</para>
+<para>
+If pointer-mode is
+<emphasis role='bold'>Asynchronous</emphasis>,
+pointer event processing continues normally.
+If the pointer is currently frozen by this client,
+then processing of pointer events is resumed.
+If pointer-mode is
+<emphasis role='bold'>Synchronous</emphasis>,
+the state of the pointer (as seen by means of the protocol) appears to freeze,
+and no further pointer events are generated by the server until the
+grabbing client issues a releasing
+<link linkend="requests:AllowEvents"><emphasis role='bold'>AllowEvents</emphasis></link>
+request or until the pointer grab is released.
+Actual pointer changes are not lost while the pointer is frozen.
+They are simply queued for later processing.
+</para>
+<para>
+If keyboard-mode is
+<emphasis role='bold'>Asynchronous</emphasis>,
+keyboard event processing is unaffected by activation of the grab.
+If keyboard-mode is
+<emphasis role='bold'>Synchronous</emphasis>,
+the state of the keyboard (as seen by means of the protocol) appears to freeze,
+and no further keyboard events are generated by the server until the grabbing
+client issues a releasing
+<emphasis role='bold'>AllowEvents</emphasis>
+request or until the pointer grab is released.
+Actual keyboard changes are not lost while the keyboard is frozen.
+They are simply queued for later processing.
+</para>
+<para>
+If a cursor is specified,
+then it is displayed regardless of what window the pointer is in.
+If no cursor is specified,
+then when the pointer is in grab-window or one of its subwindows,
+the normal cursor for that window is displayed.
+Otherwise, the cursor for grab-window is displayed.
+</para>
+<para>
+If a confine-to window is specified,
+then the pointer will be 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,
+then it is warped automatically to the closest edge
+(and enter/leave events are generated normally) just before the grab activates.
+If the confine-to window is subsequently reconfigured,
+the pointer will be warped automatically as necessary to
+keep it contained in the window.
+</para>
+<para>
+This request generates
+<link linkend="events:EnterNotify"><emphasis role='bold'>EnterNotify</emphasis></link>
+and
+<link linkend="events:LeaveNotify"><emphasis role='bold'>LeaveNotify</emphasis></link>
+events.
+</para>
+<para>
+The request fails with status
+<emphasis role='bold'>AlreadyGrabbed</emphasis>
+if the pointer is actively grabbed by some other client.
+The request fails with status
+<emphasis role='bold'>Frozen</emphasis>
+if the pointer is frozen by an active grab of another client.
+The request fails with status
+<emphasis role='bold'>NotViewable</emphasis>
+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.
+The request fails with status
+<emphasis role='bold'>InvalidTime</emphasis>
+if the specified time is earlier than the last-pointer-grab time or later than
+the current server time.
+Otherwise, the last-pointer-grab time is set to the specified time, with
+<emphasis role='bold'>CurrentTime</emphasis>
+replaced by the current server time.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:UngrabPointer">
+ <title>UngrabPointer</title>
+ <indexterm zone="requests:UngrabPointer" significance="preferred"><primary>UngrabPointer</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>time</emphasis>: TIMESTAMP or
+<emphasis role='bold'>CurrentTime</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request releases the pointer if this client has it actively grabbed (from
+either
+<link linkend="requests:GrabPointer"><emphasis role='bold'>GrabPointer</emphasis></link>
+or
+<link linkend="requests:GrabButton"><emphasis role='bold'>GrabButton</emphasis></link>
+or from a normal button press) and releases any queued events.
+The request has no effect if the specified time is earlier than
+the last-pointer-grab time or is later than the current server time.
+</para>
+<para>
+This request generates
+<link linkend="events:EnterNotify"><emphasis role='bold'>EnterNotify</emphasis></link>
+and
+<link linkend="events:LeaveNotify"><emphasis role='bold'>LeaveNotify</emphasis></link>
+events.
+</para>
+<para>
+An
+<link linkend="requests:UngrabPointer"><emphasis role='bold'>UngrabPointer</emphasis></link>
+request is performed 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.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:GrabButton">
+ <title>GrabButton</title>
+ <indexterm zone="requests:GrabButton" significance="preferred"><primary>GrabButton</primary></indexterm>
+ <indexterm zone="requests:GrabButton"><primary>Button</primary><secondary>grabbing</secondary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>modifiers</emphasis>: SETofKEYMASK or
+<emphasis role='bold'>AnyModifier</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>button</emphasis>: BUTTON or
+<emphasis role='bold'>AnyButton</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>grab-window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>owner-events</emphasis>: BOOL
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>event-mask</emphasis>: SETofPOINTEREVENT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>pointer-mode</emphasis>, <emphasis remap='I'>keyboard-mode</emphasis>:
+{ <emphasis role='bold'>Synchronous</emphasis>,
+<emphasis role='bold'>Asynchronous</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>confine-to</emphasis>: WINDOW or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>cursor</emphasis>: CURSOR or
+<emphasis role='bold'>None</emphasis>
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Access</emphasis>,
+<emphasis role='bold'>Cursor</emphasis>,
+<emphasis role='bold'>Value</emphasis>,
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request establishes a passive grab.
+<indexterm zone="requests:GrabButton"><primary>Passive grab</primary><secondary>pointer</secondary></indexterm>
+In the future,
+the pointer is actively grabbed as described in
+<link linkend="requests:GrabPointer"><emphasis role='bold'>GrabPointer</emphasis></link>,
+the last-pointer-grab time is set to the time at which the button was
+pressed (as transmitted in the
+<link linkend="events:ButtonPress"><emphasis role='bold'>ButtonPress</emphasis></link>
+event), and the
+<emphasis role='bold'>ButtonPress</emphasis>
+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.
+</para>
+<para>
+The interpretation of the remaining arguments is the same as for
+<link linkend="requests:GrabPointer"><emphasis role='bold'>GrabPointer</emphasis></link>.
+The active grab is terminated automatically when
+the logical state of the pointer has all buttons released,
+independent of the logical state of modifier keys.
+Note that the logical state of a device (as seen by means of the protocol)
+may lag the physical state if device event processing is frozen.
+</para>
+<para>
+This request overrides all previous passive grabs by the same client on
+the same button/key combinations on the same window.
+A modifier of
+<emphasis role='bold'>AnyModifier</emphasis>
+is equivalent to issuing the request for all possible modifier combinations
+(including the combination of no modifiers).
+It is not required that all specified modifiers have currently assigned
+keycodes.
+A button of
+<emphasis role='bold'>AnyButton</emphasis>
+is equivalent to issuing the request for all possible buttons.
+Otherwise, it is not required that the button specified currently be assigned
+to a physical button.
+</para>
+<para>
+An
+<emphasis role='bold'>Access</emphasis>
+error is generated if some other client has already issued a
+<emphasis role='bold'>GrabButton</emphasis>
+request with the same button/key combination on the same window.
+When using
+<emphasis role='bold'>AnyModifier</emphasis>
+or
+<emphasis role='bold'>AnyButton</emphasis>,
+the request fails completely (no grabs are established), and an
+<emphasis role='bold'>Access</emphasis>
+error is generated if there is a conflicting grab for any combination.
+The request has no effect on an active grab.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:UngrabButton">
+ <title>UngrabButton</title>
+ <indexterm zone="requests:UngrabButton" significance="preferred"><primary>UngrabButton</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>modifiers</emphasis>: SETofKEYMASK or
+<emphasis role='bold'>AnyModifier</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>button</emphasis>: BUTTON or
+<emphasis role='bold'>AnyButton</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>grab-window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Value</emphasis>,
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request releases the passive button/key combination
+on the specified window if it was grabbed by this client.
+A modifiers argument of
+<emphasis role='bold'>AnyModifier</emphasis>
+is equivalent to issuing the request for all possible modifier
+combinations (including the combination of no modifiers).
+A button of
+<emphasis role='bold'>AnyButton</emphasis>
+is equivalent to issuing the request for all possible buttons.
+The request has no effect on an active grab.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:ChangeActivePointerGrab">
+ <title>ChangeActivePointerGrab</title>
+ <indexterm zone="requests:ChangeActivePointerGrab" significance="preferred"><primary>ChangeActivePointerGrab</primary></indexterm>
+ <indexterm zone="requests:ChangeActivePointerGrab"><primary>Active grab</primary><secondary>pointer</secondary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>event-mask</emphasis>: SETofPOINTEREVENT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>cursor</emphasis>: CURSOR or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>time</emphasis>: TIMESTAMP or
+<emphasis role='bold'>CurrentTime</emphasis>
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Cursor</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request changes the specified dynamic parameters if the pointer is
+actively grabbed by the client and the specified time is no earlier than the
+last-pointer-grab time and no later than the current server time.
+The interpretation of event-mask and cursor are the same as in
+<link linkend="requests:GrabPointer"><emphasis role='bold'>GrabPointer</emphasis></link>.
+This request has no effect on the parameters of any passive grabs established
+with
+<link linkend="requests:GrabButton"><emphasis role='bold'>GrabButton</emphasis></link>.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:GrabKeyboard">
+ <title>GrabKeyboard</title>
+ <indexterm zone="requests:GrabKeyboard" significance="preferred"><primary>GrabKeyboard</primary></indexterm>
+ <indexterm zone="requests:GrabKeyboard"><primary>Active grab</primary><secondary>keyboard</secondary></indexterm>
+ <indexterm zone="requests:GrabKeyboard"><primary>Keyboard</primary><secondary>grabbing</secondary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>grab-window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>owner-events</emphasis>: BOOL
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>pointer-mode</emphasis>, <emphasis remap='I'>keyboard-mode</emphasis>:
+{ <emphasis role='bold'>Synchronous</emphasis>,
+<emphasis role='bold'>Asynchronous</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>time</emphasis>: TIMESTAMP or
+<emphasis role='bold'>CurrentTime</emphasis>
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+status:
+{ <emphasis role='bold'>Success</emphasis>,
+<emphasis role='bold'>AlreadyGrabbed</emphasis>,
+<emphasis role='bold'>Frozen</emphasis>,
+<emphasis role='bold'>InvalidTime</emphasis>,
+<emphasis role='bold'>NotViewable</emphasis>}
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Value</emphasis>,
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request actively grabs control of the keyboard.
+Further key events are reported only to the grabbing client.
+This request overrides any active keyboard grab by this client.
+</para>
+<para>
+If owner-events is
+<emphasis role='bold'>False</emphasis>,
+all generated key events are reported with respect to grab-window.
+If owner-events is
+<emphasis role='bold'>True</emphasis>
+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
+<link linkend="events:KeyPress"><emphasis role='bold'>KeyPress</emphasis></link>
+and
+<link linkend="events:KeyRelease"><emphasis role='bold'>KeyRelease</emphasis></link>
+events are always reported,
+independent of any event selection made by the client.
+</para>
+<para>
+If keyboard-mode is
+<emphasis role='bold'>Asynchronous</emphasis>,
+keyboard event processing continues normally.
+If the keyboard is currently frozen by this client,
+then processing of keyboard events is resumed.
+If keyboard-mode is
+<emphasis role='bold'>Synchronous</emphasis>,
+the state of the keyboard (as seen by means of the protocol) appears to freeze.
+No further keyboard events are generated by the server until the
+grabbing client issues a releasing
+<link linkend="requests:AllowEvents"><emphasis role='bold'>AllowEvents</emphasis></link>
+request or until the keyboard grab is released.
+Actual keyboard changes are not lost while the keyboard is frozen.
+They are simply queued for later processing.
+</para>
+<para>
+If pointer-mode is
+<emphasis role='bold'>Asynchronous</emphasis>,
+pointer event processing is unaffected by activation of the grab.
+If pointer-mode is
+<emphasis role='bold'>Synchronous</emphasis>,
+the state of the pointer (as seen by means of the protocol) appears to freeze.
+No further pointer events are generated by the server
+until the grabbing client issues a releasing
+<link linkend="requests:AllowEvents"><emphasis role='bold'>AllowEvents</emphasis></link>
+request or until the keyboard grab is released.
+Actual pointer changes are not lost while the pointer is frozen.
+They are simply queued for later processing.
+</para>
+<para>
+This request generates
+<link linkend="events:FocusIn"><emphasis role='bold'>FocusIn</emphasis></link>
+and
+<link linkend="events:FocusOut"><emphasis role='bold'>FocusOut</emphasis></link>
+events.
+</para>
+<para>
+The request fails with status
+<emphasis role='bold'>AlreadyGrabbed</emphasis>
+if the keyboard is actively grabbed by some other client.
+The request fails with status
+<emphasis role='bold'>Frozen</emphasis>
+if the keyboard is frozen by an active grab of another client.
+The request fails with status
+<emphasis role='bold'>NotViewable</emphasis>
+if grab-window is not viewable.
+The request fails with status
+<emphasis role='bold'>InvalidTime</emphasis>
+if the specified time is earlier than the last-keyboard-grab time
+or later than the current server time.
+Otherwise, the last-keyboard-grab time is set to the specified time with
+<emphasis role='bold'>CurrentTime</emphasis>
+replaced by the current server time.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:UngrabKeyboard">
+ <title>UngrabKeyboard</title>
+ <indexterm zone="requests:UngrabKeyboard" significance="preferred"><primary>UngrabKeyboard</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>time</emphasis>: TIMESTAMP or
+<emphasis role='bold'>CurrentTime</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request releases the keyboard if this client has it actively grabbed
+(as a result of either
+<link linkend="requests:GrabKeyboard"><emphasis role='bold'>GrabKeyboard</emphasis></link>
+or
+<link linkend="requests:GrabKey"><emphasis role='bold'>GrabKey</emphasis></link>)
+and releases any queued events.
+The request has no effect if the specified time is earlier than the
+last-keyboard-grab time or is later than the current server time.
+</para>
+<para>
+This request generates
+<link linkend="events:FocusIn"><emphasis role='bold'>FocusIn</emphasis></link>
+and
+<link linkend="events:FocusOut"><emphasis role='bold'>FocusOut</emphasis></link>
+events.
+</para>
+<para>
+An
+<link linkend="requests:UngrabKeyboard"><emphasis role='bold'>UngrabKeyboard</emphasis></link>
+is performed automatically if the event window for an active keyboard grab
+becomes not viewable.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:GrabKey">
+ <title>GrabKey</title>
+ <indexterm zone="requests:GrabKey" significance="preferred"><primary>GrabKey</primary></indexterm>
+ <indexterm zone="requests:GrabKey"><primary>Key</primary><secondary>grabbing</secondary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>key</emphasis>: KEYCODE or
+<emphasis role='bold'>AnyKey</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>modifiers</emphasis>: SETofKEYMASK or
+<emphasis role='bold'>AnyModifier</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>grab-window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>owner-events</emphasis>: BOOL
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>pointer-mode</emphasis>, <emphasis remap='I'>keyboard-mode</emphasis>:
+{ <emphasis role='bold'>Synchronous</emphasis>,
+<emphasis role='bold'>Asynchronous</emphasis>}
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Access</emphasis>,
+<emphasis role='bold'>Value</emphasis>,
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request establishes a passive grab on the keyboard.
+<indexterm zone="requests:GrabKey"><primary>Passive grab</primary><secondary>keyboard</secondary></indexterm>
+In the future,
+the keyboard is actively grabbed as described in
+<link linkend="requests:GrabKeyboard"><emphasis role='bold'>GrabKeyboard</emphasis></link>,
+the last-keyboard-grab time is set to the time at which the key was pressed
+(as transmitted in the
+<link linkend="events:KeyPress"><emphasis role='bold'>KeyPress</emphasis></link>
+event), and the
+<emphasis role='bold'>KeyPress</emphasis>
+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 descendent 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.
+</para>
+<para>
+The interpretation of the remaining arguments is the same as for
+<link linkend="requests:GrabKeyboard"><emphasis role='bold'>GrabKeyboard</emphasis></link>.
+The active grab is terminated automatically when the logical state
+of the keyboard has the specified key released,
+independent of the logical state of modifier keys.
+Note that the logical state of a device (as seen by means of the protocol)
+may lag the physical state if device event processing is frozen.
+</para>
+<para>
+This request overrides all previous passive grabs by the same client
+on the same key combinations on the same window.
+A modifier of
+<emphasis role='bold'>AnyModifier</emphasis>
+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 key of
+<emphasis role='bold'>AnyKey</emphasis>
+is equivalent to issuing the request for all possible keycodes.
+Otherwise, the key must be in the range specified by min-keycode
+and max-keycode in the connection setup (or a
+<emphasis role='bold'>Value</emphasis>
+error results).
+</para>
+<para>
+An
+<emphasis role='bold'>Access</emphasis>
+error is generated if some other client has issued a
+<emphasis role='bold'>GrabKey</emphasis>
+with the same key combination on the same window.
+When using
+<emphasis role='bold'>AnyModifier</emphasis>
+or
+<emphasis role='bold'>AnyKey</emphasis>,
+the request fails completely (no grabs are established),
+and an
+<emphasis role='bold'>Access</emphasis>
+error is generated if there is a conflicting grab for any combination.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:UngrabKey">
+ <title>UngrabKey</title>
+ <indexterm zone="requests:UngrabKey" significance="preferred"><primary>UngrabKey</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>key</emphasis>: KEYCODE or
+<emphasis role='bold'>AnyKey</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>modifiers</emphasis>: SETofKEYMASK or
+<emphasis role='bold'>AnyModifier</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>grab-window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Value</emphasis>,
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request releases the key combination on the specified window
+if it was grabbed by this client.
+A modifiers argument of
+<emphasis role='bold'>AnyModifier</emphasis>
+is equivalent to issuing the request for all possible modifier combinations
+(including the combination of no modifiers).
+A key of
+<emphasis role='bold'>AnyKey</emphasis>
+is equivalent to issuing the request for all possible keycodes.
+This request has no effect on an active grab.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:AllowEvents">
+ <title>AllowEvents</title>
+ <indexterm zone="requests:AllowEvents" significance="preferred"><primary>AllowEvents</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>mode</emphasis>:
+{ <emphasis role='bold'>AsyncPointer</emphasis>,
+<emphasis role='bold'>SyncPointer</emphasis>,
+<emphasis role='bold'>ReplayPointer</emphasis>,
+<emphasis role='bold'>AsyncKeyboard</emphasis>,
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>SyncKeyboard</emphasis>,
+<emphasis role='bold'>ReplayKeyboard</emphasis>,
+<emphasis role='bold'>AsyncBoth</emphasis>,
+<emphasis role='bold'>SyncBoth</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>time</emphasis>: TIMESTAMP or
+<emphasis role='bold'>CurrentTime</emphasis>
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request releases some queued events if the client has caused a device to
+freeze.
+The request 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 server time.
+</para>
+<para>
+For
+<emphasis role='bold'>AsyncPointer</emphasis>,
+if the pointer is frozen by the client,
+pointer event processing continues normally.
+If the pointer is frozen twice by the client on behalf of two separate grabs,
+<emphasis role='bold'>AsyncPointer</emphasis>
+thaws for both.
+<emphasis role='bold'>AsyncPointer</emphasis>
+has no effect if the pointer is not frozen by the client,
+but the pointer need not be grabbed by the client.
+</para>
+<para>
+For
+<emphasis role='bold'>SyncPointer</emphasis>,
+if the pointer is frozen and actively grabbed by the client,
+pointer event processing continues normally until the next
+<link linkend="events:ButtonPress"><emphasis role='bold'>ButtonPress</emphasis></link>
+or
+<link linkend="events:ButtonRelease"><emphasis role='bold'>ButtonRelease</emphasis></link>
+event is reported to the client,
+at which time the pointer again appears to freeze.
+However, if the reported event causes the pointer grab to be released,
+then the pointer does not freeze.
+<emphasis role='bold'>SyncPointer</emphasis>
+has no effect if the pointer is not frozen by the
+client or if the pointer is not grabbed by the client.
+</para>
+<para>
+For
+<emphasis role='bold'>ReplayPointer</emphasis>,
+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 a
+<link linkend="requests:GrabButton"><emphasis role='bold'>GrabButton</emphasis></link>
+or from a previous
+<emphasis role='bold'>AllowEvents</emphasis>
+with mode
+<emphasis role='bold'>SyncPointer</emphasis>
+but not from a
+<link linkend="requests:GrabPointer"><emphasis role='bold'>GrabPointer</emphasis></link>),
+then the pointer grab is released and that event is completely reprocessed,
+this time ignoring any passive grabs at or above (towards the root)
+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.
+</para>
+<para>
+For
+<emphasis role='bold'>AsyncKeyboard</emphasis>,
+if the keyboard is frozen by the client,
+keyboard event processing continues normally.
+If the keyboard is frozen twice by the client on behalf of two separate grabs,
+<emphasis role='bold'>AsyncKeyboard</emphasis>
+thaws for both.
+<emphasis role='bold'>AsyncKeyboard</emphasis>
+has no effect if the keyboard is not frozen by the client,
+but the keyboard need not be grabbed by the client.
+</para>
+<para>
+For
+<emphasis role='bold'>SyncKeyboard</emphasis>,
+if the keyboard is frozen and actively grabbed by the client,
+keyboard event processing continues normally until the next
+<link linkend="events:KeyPress"><emphasis role='bold'>KeyPress</emphasis></link>
+or
+<link linkend="events:KeyRelease"><emphasis role='bold'>KeyRelease</emphasis></link>
+event is reported to the client,
+at which time the keyboard again appears to freeze.
+However, if the reported event causes the keyboard grab to be released,
+then the keyboard does not freeze.
+<emphasis role='bold'>SyncKeyboard</emphasis>
+has no effect if the keyboard is not frozen by the client or
+if the keyboard is not grabbed by the client.
+</para>
+<para>
+For
+<emphasis role='bold'>ReplayKeyboard</emphasis>,
+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 a
+<link linkend="requests:GrabKey"><emphasis role='bold'>GrabKey</emphasis></link>
+or from a previous
+<emphasis role='bold'>AllowEvents</emphasis>
+with mode
+<emphasis role='bold'>SyncKeyboard</emphasis>
+but not from a
+<link linkend="requests:GrabKeyboard"><emphasis role='bold'>GrabKeyboard</emphasis></link>),
+then the keyboard grab is released and that event is completely reprocessed,
+this time ignoring any passive grabs at or above (towards the root)
+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.
+</para>
+<para>
+For
+<emphasis role='bold'>SyncBoth</emphasis>,
+if both pointer and keyboard are frozen by the client,
+event processing (for both devices) continues normally until the next
+<link linkend="events:ButtonPress"><emphasis role='bold'>ButtonPress</emphasis></link>,
+<link linkend="events:ButtonRelease"><emphasis role='bold'>ButtonRelease</emphasis></link>,
+<link linkend="events:KeyPress"><emphasis role='bold'>KeyPress</emphasis></link>,
+or
+<link linkend="events:KeyRelease"><emphasis role='bold'>KeyRelease</emphasis></link>
+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).
+<emphasis role='bold'>SyncBoth</emphasis>
+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,
+<emphasis role='bold'>SyncBoth</emphasis>
+thaws for both (but a subsequent freeze for
+<emphasis role='bold'>SyncBoth</emphasis>
+will only freeze each device once).
+</para>
+<para>
+For
+<emphasis role='bold'>AsyncBoth</emphasis>,
+if the pointer and the keyboard are frozen by the client,
+event processing for both devices continues normally.
+If a device is frozen twice by the client on behalf of two separate grabs,
+<emphasis role='bold'>AsyncBoth</emphasis>
+thaws for both.
+<emphasis role='bold'>AsyncBoth</emphasis>
+has no effect unless both pointer and keyboard are frozen by the client.
+</para>
+<para>
+<emphasis role='bold'>AsyncPointer</emphasis>,
+<emphasis role='bold'>SyncPointer</emphasis>,
+and
+<emphasis role='bold'>ReplayPointer</emphasis>
+have no effect on processing of keyboard events.
+<emphasis role='bold'>AsyncKeyboard</emphasis>,
+<emphasis role='bold'>SyncKeyboard</emphasis>,
+and
+<emphasis role='bold'>ReplayKeyboard</emphasis>
+have no effect on processing of pointer events.
+</para>
+<para>
+It is possible for both a pointer grab and a keyboard grab to be active
+simultaneously (by the same or different clients).
+When 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
+<emphasis role='bold'>AllowEvents</emphasis>
+releases both.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:GrabServer">
+ <title>GrabServer</title>
+ <indexterm zone="requests:GrabServer" significance="preferred"><primary>GrabServer</primary></indexterm>
+ <indexterm zone="requests:GrabServer"><primary>Server</primary><secondary>grabbing</secondary></indexterm>
+<para>
+This request disables processing of requests and close-downs on all
+connections other than the one this request arrived on.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:UngrabServer">
+ <title>UngrabServer</title>
+ <indexterm zone="requests:UngrabServer" significance="preferred"><primary>UngrabServer</primary></indexterm>
+<para>
+This request restarts processing of requests and close-downs
+on other connections.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:QueryPointer">
+ <title>QueryPointer</title>
+ <indexterm zone="requests:QueryPointer" significance="preferred"><primary>QueryPointer</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+root: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+child: WINDOW or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+same-screen: BOOL
+ </entry>
+ </row>
+ <row>
+ <entry>
+root-x, root-y, win-x, win-y: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+mask: SETofKEYBUTMASK
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+The root window the pointer is logically on and the pointer coordinates
+relative to the root's origin are returned.
+If same-screen is
+<emphasis role='bold'>False</emphasis>,
+then the pointer is not on the same screen as the argument window,
+child is
+<emphasis role='bold'>None</emphasis>,
+and win-x and win-y are zero.
+If same-screen is
+<emphasis role='bold'>True</emphasis>,
+then win-x and win-y are the pointer coordinates relative to the
+argument window's origin, and child is the child containing the
+pointer, if any.
+The current logical state of the modifier keys and the buttons
+are also returned.
+Note that the logical state of a device (as seen by means of the protocol)
+may lag the physical state if device event processing is frozen.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:GetMotionEvents">
+ <title>GetMotionEvents</title>
+ <indexterm zone="requests:GetMotionEvents" significance="preferred"><primary>GetMotionEvents</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>start</emphasis>,
+<emphasis remap='I'>stop</emphasis>: TIMESTAMP or
+<emphasis role='bold'>CurrentTime</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+events: LISTofTIMECOORD
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+where:
+ </entry>
+ </row>
+ <row>
+ <entry>
+TIMECOORD: [x, y: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+ time: TIMESTAMP]
+<!-- .TE -->
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request 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 (including borders)
+the specified window at its present placement.
+The x and y coordinates are reported relative to the origin of the window.
+</para>
+<para>
+If the start time is later than the stop time or if the start time is
+in the future, no events are returned.
+If the stop time is in the future, it is equivalent to specifying
+<emphasis role='bold'>CurrentTime</emphasis>.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:TranslateCoordinates">
+ <title>TranslateCoordinates</title>
+ <indexterm zone="requests:TranslateCoordinates" significance="preferred"><primary>TranslateCoordinates</primary></indexterm>
+ <indexterm zone="glossary:Coordinate_system"><primary>Coordinate system</primary><secondary>translating</secondary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>src-window</emphasis>, <emphasis remap='I'>dst-window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>src-x</emphasis>, <emphasis remap='I'>src-y</emphasis>: INT16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+same-screen: BOOL
+ </entry>
+ </row>
+ <row>
+ <entry>
+child: WINDOW or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+dst-x, dst-y: INT16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+The src-x and src-y coordinates are taken relative to src-window's
+origin and are returned as dst-x and dst-y coordinates relative to
+dst-window's origin.
+If same-screen is
+<emphasis role='bold'>False</emphasis>,
+then src-window and dst-window are on different screens,
+and dst-x and dst-y are zero.
+If the coordinates are contained in a mapped child of dst-window,
+then that child is returned.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:WarpPointer">
+ <title>WarpPointer</title>
+ <indexterm zone="requests:WarpPointer" significance="preferred"><primary>WarpPointer</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>src-window</emphasis>: WINDOW or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>dst-window</emphasis>: WINDOW or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>src-x</emphasis>, <emphasis remap='I'>src-y</emphasis>: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>src-width</emphasis>, <emphasis remap='I'>src-height</emphasis>: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>dst-x</emphasis>, <emphasis remap='I'>dst-y</emphasis>: INT16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+If dst-window is
+<emphasis role='bold'>None</emphasis>,
+this request moves the pointer by offsets [dst-x, dst-y]
+relative to the current position of the pointer.
+If dst-window is a window,
+this request moves the pointer to [dst-x, dst-y] relative to dst-window's
+origin.
+However, if src-window is not
+<emphasis role='bold'>None</emphasis>,
+the move only takes place if src-window contains the pointer
+and the pointer is contained in the specified rectangle of src-window.
+</para>
+<para>
+The src-x and src-y coordinates are relative to src-window's origin.
+If src-height is zero,
+it is replaced with the current height of src-window minus src-y.
+If src-width is zero,
+it is replaced with the current width of src-window minus src-x.
+</para>
+<para>
+This request cannot be used to move the pointer outside the confine-to
+window of an active pointer grab.
+An attempt will only move the pointer as far as the closest edge
+of the confine-to window.
+</para>
+<para>
+This request will generate events just as if the user had instantaneously
+moved the pointer.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:SetInputFocus">
+ <title>SetInputFocus</title>
+ <indexterm zone="requests:SetInputFocus" significance="preferred"><primary>SetInputFocus</primary></indexterm>
+ <indexterm zone="requests:SetInputFocus"><primary>Input focus</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>focus</emphasis>: WINDOW or
+<emphasis role='bold'>PointerRoot</emphasis>
+or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>revert-to</emphasis>:
+{ <emphasis role='bold'>Parent</emphasis>,
+<emphasis role='bold'>PointerRoot</emphasis>,
+<emphasis role='bold'>None</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>time</emphasis>: TIMESTAMP or
+<emphasis role='bold'>CurrentTime</emphasis>
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Match</emphasis>,
+<emphasis role='bold'>Value</emphasis>,
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request changes the input focus and the last-focus-change time.
+The request has no effect if the specified time is earlier than the current
+last-focus-change time or is later than the current server time.
+Otherwise, the last-focus-change time is set to the specified time
+with
+<emphasis role='bold'>CurrentTime</emphasis>
+replaced by the current server time.
+</para>
+<para>
+If
+<emphasis role='bold'>None</emphasis>
+is specified as the focus,
+all keyboard events are discarded until a new focus window is set.
+In this case, the revert-to argument is ignored.
+</para>
+<para>
+If a window is specified as the focus,
+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 normally.
+Otherwise, the event is reported with respect to the focus window.
+</para>
+<para>
+If
+<emphasis role='bold'>PointerRoot</emphasis>
+is specified as the focus,
+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.
+</para>
+<para>
+This request generates
+<link linkend="events:FocusIn"><emphasis role='bold'>FocusIn</emphasis></link>
+and
+<link linkend="events:FocusOut"><emphasis role='bold'>FocusOut</emphasis></link>
+events.
+</para>
+<para>
+The specified focus window must be viewable at the time of the request (or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+If the focus window later becomes not viewable,
+the new focus window depends on the revert-to argument.
+If revert-to is
+<emphasis role='bold'>Parent</emphasis>,
+the focus reverts to the parent (or the closest viewable ancestor)
+and the new revert-to value is taken to be
+<emphasis role='bold'>None</emphasis>.
+If revert-to is
+<emphasis role='bold'>PointerRoot</emphasis>
+or
+<emphasis role='bold'>None</emphasis>,
+the focus reverts to that value.
+When the focus reverts,
+<link linkend="events:FocusIn"><emphasis role='bold'>FocusIn</emphasis></link>
+and
+<link linkend="events:FocusOut"><emphasis role='bold'>FocusOut</emphasis></link>
+events are generated,
+but the last-focus-change time is not affected.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:GetInputFocus">
+ <title>GetInputFocus</title>
+ <indexterm zone="requests:GetInputFocus" significance="preferred"><primary>GetInputFocus</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+focus: WINDOW or
+<emphasis role='bold'>PointerRoot</emphasis>
+or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+revert-to:
+{ <emphasis role='bold'>Parent</emphasis>,
+<emphasis role='bold'>PointerRoot</emphasis>,
+<emphasis role='bold'>None</emphasis>}
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns the current focus state.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:QueryKeymap">
+ <title>QueryKeymap</title>
+ <indexterm zone="requests:QueryKeymap" significance="preferred"><primary>QueryKeymap</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+keys: LISTofCARD8
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns a bit vector for the logical state 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.
+Note that the logical state of a device (as seen by means of the protocol)
+may lag the physical state if device event processing is frozen.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:OpenFont">
+ <title>OpenFont</title>
+ <indexterm zone="requests:OpenFont" significance="preferred"><primary>OpenFont</primary></indexterm>
+ <indexterm zone="requests:OpenFont"><primary>Font</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>fid</emphasis>: FONT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>name</emphasis>: STRING8
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Alloc</emphasis>,
+<emphasis role='bold'>IDChoice</emphasis>,
+<emphasis role='bold'>Name</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request loads the specified font, if necessary,
+and associates identifier fid with it.
+The font name should use the ISO Latin-1 encoding,
+and uppercase and lowercase do not matter.
+When the characters <quote>?</quote> and <quote>*</quote> are used in a font name, a
+pattern match is performed and any matching font is used.
+In the pattern,
+the <quote>?</quote> character (octal value 77) will match any single character,
+and the <quote>*</quote> character (octal value 52) will match any number
+of characters.
+A structured format for font names is specified in the
+X.Org standard <citetitle>X Logical Font Description Conventions</citetitle>.
+</para>
+<para>
+Fonts are not associated with a particular screen
+and can be stored as a component of any graphics context.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:CloseFont">
+ <title>CloseFont</title>
+ <indexterm zone="requests:CloseFont" significance="preferred"><primary>CloseFont</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>font</emphasis>: FONT
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Font</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request deletes the association between the resource ID and the font.
+The font itself will be freed when no other resource references it.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:QueryFont">
+ <title>QueryFont</title>
+ <indexterm zone="requests:QueryFont" significance="preferred"><primary>QueryFont</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='3' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='1.0*'/>
+ <colspec colname='c3' colwidth='1.0*'/>
+ <spanspec spanname='all' namest='c1' nameend='c3'/>
+ <tbody>
+ <row>
+ <entry spanname='all'>
+<!-- .in +.2i -->
+<emphasis remap='I'>font</emphasis>: FONTABLE
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry spanname='all'>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry spanname='all'>
+<!-- .in +.2i -->
+font-info: FONTINFO
+ </entry>
+ </row>
+ <row>
+ <entry spanname='all'>
+char-infos: LISTofCHARINFO
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry valign='top' morerows='18'>
+<!-- .in +.2i -->
+where:
+ </entry>
+ </row>
+ <row>
+ <entry valign='top' morerows='9'>
+FONTINFO:
+ </entry>
+ <entry>
+[draw-direction:
+{ <emphasis role='bold'>LeftToRight</emphasis>,
+<emphasis role='bold'>RightToLeft</emphasis> }
+ </entry>
+ </row>
+ <row>
+ <entry>
+min-char-or-byte2, max-char-or-byte2: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+min-byte1, max-byte1: CARD8
+ </entry>
+ </row>
+ <row>
+ <entry>
+all-chars-exist: BOOL
+ </entry>
+ </row>
+ <row>
+ <entry>
+default-char: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+min-bounds: CHARINFO
+ </entry>
+ </row>
+ <row>
+ <entry>
+max-bounds: CHARINFO
+ </entry>
+ </row>
+ <row>
+ <entry>
+font-ascent: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+font-descent: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+properties: LISTofFONTPROP]
+ </entry>
+ </row>
+ <row>
+ <entry valign='top' morerows='1'>
+FONTPROP:
+ </entry>
+ <entry>
+[name: ATOM
+ </entry>
+ </row>
+ <row>
+ <entry>
+value: &lt;32-bit-value&gt;]
+ </entry>
+ </row>
+ <row>
+ <entry valign='top' morerows='5'>
+CHARINFO:
+ </entry>
+ <entry>
+[left-side-bearing: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+right-side-bearing: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+character-width: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+ascent: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+descent: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+attributes: CARD16]
+ </entry>
+ </row>
+ <row>
+ <entry spanname='all'>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Font</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns logical information about a font.
+If a gcontext is given for font,
+the currently contained font is used.
+</para>
+<para>
+The draw-direction is just a hint
+and indicates whether most char-infos have a positive,
+<emphasis role='bold'>LeftToRight</emphasis>,
+or a negative,
+<emphasis role='bold'>RightToLeft</emphasis>,
+character-width metric.
+The core protocol defines no support for vertical text.
+</para>
+<para>
+If min-byte1 and max-byte1 are both zero,
+then min-char-or-byte2 specifies the linear character index corresponding
+to the first element of char-infos,
+and max-char-or-byte2 specifies the linear character index of the last element.
+If either min-byte1 or max-byte1 are nonzero,
+then both min-char-or-byte2 and max-char-or-byte2 will be less than 256,
+and the 2-byte character index values corresponding to char-infos element N
+(counting from 0) are:
+<literallayout class="monospaced">
+ byte1 = N/D + min-byte1
+ byte2 = N\\D + min-char-or-byte2
+</literallayout>
+</para>
+<para>
+where:
+<literallayout class="monospaced">
+ D = max-char-or-byte2 - min-char-or-byte2 + 1
+ / = integer division
+ \\ = integer modulus
+</literallayout>
+</para>
+<para>
+If char-infos has length zero,
+then min-bounds and max-bounds will be identical,
+and the effective char-infos is one filled with this char-info, of length:
+<literallayout class="monospaced">
+ L = D * (max-byte1 - min-byte1 + 1)
+</literallayout>
+</para>
+<para>
+That is,
+all glyphs in the specified linear or matrix range have the same information,
+as given by min-bounds (and max-bounds).
+If all-chars-exist is
+<emphasis role='bold'>True</emphasis>,
+then all characters in char-infos have nonzero bounding boxes.
+</para>
+<para>
+The default-char specifies the character that will be used when an
+undefined or nonexistent character is used.
+Note that default-char is a CARD16, not CHAR2B.
+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,
+then no printing is performed for an undefined or nonexistent character.
+</para>
+<para>
+The min-bounds and max-bounds contain the minimum and maximum values of
+each individual CHARINFO component over all char-infos (ignoring
+nonexistent characters).
+The bounding box of the font (that is, the
+smallest rectangle enclosing the shape obtained by superimposing all
+characters at the same origin [x,y]) has its upper-left coordinate at:
+<literallayout class="monospaced">
+ [x + min-bounds.left-side-bearing, y - max-bounds.ascent]
+</literallayout>
+with a width of:
+<literallayout class="monospaced">
+ max-bounds.right-side-bearing - min-bounds.left-side-bearing
+</literallayout>
+</para>
+<para>
+and a height of:
+<literallayout class="monospaced">
+ max-bounds.ascent + max-bounds.descent
+</literallayout>
+</para>
+<para>
+The font-ascent is the logical extent of the font above the baseline
+and is used for determining line spacing.
+Specific characters may extend beyond this.
+The font-descent is the logical extent of the font at or below the baseline
+and is used for determining line spacing.
+Specific characters may extend beyond this.
+If the baseline is at Y-coordinate y,
+then the logical extent of the font is inclusive
+between the Y-coordinate values (y - font-ascent) and (y + font-descent - 1).
+</para>
+<para>
+A font is not guaranteed to have any properties.
+The interpretation of the property value (for example, INT32, CARD32)
+must be derived from <emphasis remap='I'>a priori</emphasis> knowledge of the property.
+A basic set of font properties is specified in the X.Org
+standard <citetitle>X Logical Font Description Conventions</citetitle>.
+</para>
+<para>
+For a character origin at [x,y],
+the bounding box of a character (that is,
+the smallest rectangle enclosing the character's shape), described in
+terms of CHARINFO components, is a rectangle with its upper-left corner at:
+<literallayout class="monospaced">
+ [x + left-side-bearing, y - ascent]
+</literallayout>
+</para>
+<para>
+with a width of:
+<literallayout class="monospaced">
+ right-side-bearing - left-side-bearing
+</literallayout>
+</para>
+<para>
+and a height of:
+<literallayout class="monospaced">
+ ascent + descent
+</literallayout>
+</para>
+<para>
+and the origin for the next character is defined to be:
+<literallayout class="monospaced">
+ [x + character-width, y]
+</literallayout>
+</para>
+<para>
+Note that the baseline is logically viewed as being just below
+nondescending characters (when descent is zero, only pixels with
+Y-coordinates less than y are drawn) and that the origin is logically
+viewed as being coincident with the left edge of a nonkerned character
+(when left-side-bearing is zero, no pixels with X-coordinate less than
+x are drawn).
+</para>
+<para>
+Note that CHARINFO metric values can be negative.
+</para>
+<para>
+A nonexistent character is represented with all CHARINFO components
+zero.
+</para>
+<para>
+The interpretation of the per-character attributes field is
+server-dependent.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:QueryTextExtents">
+ <title>QueryTextExtents</title>
+ <indexterm zone="requests:QueryTextExtents" significance="preferred"><primary>QueryTextExtents</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>font</emphasis>: FONTABLE
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>string</emphasis>: STRING16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+draw-direction:
+{ <emphasis role='bold'>LeftToRight</emphasis>,
+<emphasis role='bold'>RightToLeft</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+font-ascent: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+font-descent: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+overall-ascent: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+overall-descent: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+overall-width: INT32
+ </entry>
+ </row>
+ <row>
+ <entry>
+overall-left: INT32
+ </entry>
+ </row>
+ <row>
+ <entry>
+overall-right: INT32
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Font</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns the logical extents of the specified string of characters
+in the specified font.
+If a gcontext is given for font,
+the currently contained font is used.
+The draw-direction, font-ascent, and font-descent are the same as
+described in
+<link linkend="requests:QueryFont"><emphasis role='bold'>QueryFont</emphasis></link>.
+The overall-ascent is the maximum of the ascent metrics of all characters
+in the string, and the overall-descent is the maximum of the descent metrics.
+The overall-width is 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,
+and let R be the right-side-bearing metric of the character plus W.
+The overall-left is the minimum L of all characters in the string,
+and the overall-right is the maximum R.
+</para>
+<para>
+For fonts defined with linear indexing rather than 2-byte matrix indexing,
+the server will interpret each CHAR2B as a 16-bit number that
+has been transmitted most significant byte first (that is, byte1 of the
+CHAR2B is taken as the most significant byte).
+</para>
+<para>
+Characters with all zero metrics are ignored.
+If the font has no defined default-char,
+then undefined characters in the string are also ignored.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:ListFonts">
+ <title>ListFonts</title>
+ <indexterm zone="requests:ListFonts" significance="preferred"><primary>ListFonts</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>pattern</emphasis>: STRING8
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>max-names</emphasis>: CARD16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+names: LISTofSTRING8
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns a list
+of available font names (as controlled by the font search path; see
+<link linkend="requests:SetFontPath"><emphasis role='bold'>SetFontPath</emphasis></link>
+request)
+that match the pattern.
+At most, max-names names will be returned.
+The pattern should use the ISO Latin-1 encoding,
+and uppercase and lowercase do not matter.
+In the pattern,
+the <quote>?</quote> character (octal value 77) will match any single character,
+and the <quote>*</quote> character (octal value 52) will match any number
+of characters.
+The returned names are in lowercase.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:ListFontsWithInfo">
+ <title>ListFontsWithInfo</title>
+ <indexterm zone="requests:ListFontsWithInfo" significance="preferred"><primary>ListFontsWithInfo</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>pattern</emphasis>: STRING8
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>max-names</emphasis>: CARD16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+name: STRING8
+ </entry>
+ </row>
+ <row>
+ <entry>
+info FONTINFO
+ </entry>
+ </row>
+ <row>
+ <entry>
+replies-hint: CARD32
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+where:
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+FONTINFO: &lt;same type definition as in
+<link linkend="requests:QueryFont"><emphasis role='bold'>QueryFont</emphasis></link>&gt;
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request is similar to
+<link linkend="requests:ListFonts"><emphasis role='bold'>ListFonts</emphasis></link>,
+but it also returns information about each font.
+The information returned for each font is identical to what
+<link linkend="requests:QueryFont"><emphasis role='bold'>QueryFont</emphasis></link>
+would return except that the per-character metrics are not returned.
+Note that this request can generate multiple replies.
+With each reply,
+replies-hint may provide an indication of how many more fonts will be returned.
+This number is a hint only and may be larger or smaller than
+the number of fonts actually returned.
+A zero value does not guarantee that no more fonts will be returned.
+After the font replies,
+a reply with a zero-length name is sent to indicate the end of the reply
+sequence.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:SetFontPath">
+ <title>SetFontPath</title>
+ <indexterm zone="requests:SetFontPath" significance="preferred"><primary>SetFontPath</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>path</emphasis>: LISTofSTRING8
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request defines the search path for font lookup.
+There is only one search path per server, not one per client.
+The interpretation of the strings is operating-system-dependent,
+but the strings are intended to specify directories to be searched in the
+order listed.
+</para>
+<para>
+Setting the path to the empty list restores the default path defined
+for the server.
+</para>
+<para>
+As a side effect of executing this request,
+the server is guaranteed to flush all cached information about fonts
+for which there currently are no explicit resource IDs allocated.
+</para>
+<para>
+The meaning of an error from this request is system specific.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:GetFontPath">
+ <title>GetFontPath</title>
+ <indexterm zone="requests:GetFontPath" significance="preferred"><primary>GetFontPath</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+path: LISTofSTRING8
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns the current search path for fonts.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:CreatePixmap">
+ <title>CreatePixmap</title>
+ <indexterm zone="requests:CreatePixmap" significance="preferred"><primary>CreatePixmap</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>pid</emphasis>: PIXMAP
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>drawable</emphasis>: DRAWABLE
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>depth</emphasis>: CARD8
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>: CARD16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Alloc</emphasis>,
+<emphasis role='bold'>Drawable</emphasis>,
+<emphasis role='bold'>IDChoice</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request creates a pixmap and assigns the identifier pid to it.
+The width and height must be nonzero (or a
+<emphasis role='bold'>Value</emphasis>
+error results).
+The depth must be one of the depths supported by the root of the specified
+drawable (or a
+<emphasis role='bold'>Value</emphasis>
+error results).
+The initial contents of the pixmap are undefined.
+</para>
+<para>
+It is legal to pass an
+<emphasis role='bold'>InputOnly</emphasis>
+window as a drawable to this request.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:FreePixmap">
+ <title>FreePixmap</title>
+ <indexterm zone="requests:FreePixmap" significance="preferred"><primary>FreePixmap</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>pixmap</emphasis>: PIXMAP
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Pixmap</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request deletes the association between the resource ID and the pixmap.
+The pixmap storage will be freed when no other resource references it.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:CreateGC">
+ <title>CreateGC</title>
+ <indexterm zone="requests:CreateGC" significance="preferred"><primary>CreateGC</primary></indexterm>
+ <indexterm zone="requests:CreateGC"><primary>Graphics context</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>cid</emphasis>: GCONTEXT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>drawable</emphasis>: DRAWABLE
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>value-mask</emphasis>: BITMASK
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>value-list</emphasis>: LISTofVALUE
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Alloc</emphasis>,
+<emphasis role='bold'>Drawable</emphasis>,
+<emphasis role='bold'>Font</emphasis>,
+<emphasis role='bold'>IDChoice</emphasis>,
+<emphasis role='bold'>Match</emphasis>,
+<emphasis role='bold'>Pixmap</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+This request creates a graphics context
+and assigns the identifier cid to it.
+The gcontext can be used with any destination drawable having the same root
+and depth as the specified drawable;
+use with other drawables results in a
+<emphasis role='bold'>Match</emphasis>
+error.
+</para>
+<para>
+The value-mask and value-list specify which components are to be
+explicitly initialized.
+The context components are:
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='2.0*'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Component</entry>
+ <entry>Type</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>function</entry>
+ <entry>
+{ <emphasis role='bold'>Clear</emphasis>,
+<emphasis role='bold'>And</emphasis>,
+<emphasis role='bold'>AndReverse</emphasis>,
+<emphasis role='bold'>Copy</emphasis>,
+<emphasis role='bold'>AndInverted</emphasis>,
+<emphasis role='bold'>NoOp</emphasis>,
+<emphasis role='bold'>Xor</emphasis>,
+<emphasis role='bold'>Or</emphasis>,
+<emphasis role='bold'>Nor</emphasis>,
+<emphasis role='bold'>Equiv</emphasis>,
+<emphasis role='bold'>Invert</emphasis>,
+<emphasis role='bold'>OrReverse</emphasis>,
+<emphasis role='bold'>CopyInverted</emphasis>,
+<emphasis role='bold'>OrInverted</emphasis>,
+<emphasis role='bold'>Nand</emphasis>,
+<emphasis role='bold'>Set</emphasis> }
+ </entry>
+ </row>
+ <row>
+ <entry>plane-mask</entry>
+ <entry>CARD32</entry>
+ </row>
+ <row>
+ <entry>foreground</entry>
+ <entry>CARD32</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>CARD32</entry>
+ </row>
+ <row>
+ <entry>line-width</entry>
+ <entry>CARD16</entry>
+ </row>
+ <row>
+ <entry>line-style</entry>
+ <entry>
+{ <emphasis role='bold'>Solid</emphasis>,
+<emphasis role='bold'>OnOffDash</emphasis>,
+<emphasis role='bold'>DoubleDash</emphasis> }
+ </entry>
+ </row>
+ <row>
+ <entry>cap-style</entry>
+ <entry>
+{ <emphasis role='bold'>NotLast</emphasis>,
+<emphasis role='bold'>Butt</emphasis>,
+<emphasis role='bold'>Round</emphasis>,
+<emphasis role='bold'>Projecting</emphasis> }
+ </entry>
+ </row>
+ <row>
+ <entry>join-style</entry>
+ <entry>
+{ <emphasis role='bold'>Miter</emphasis>,
+<emphasis role='bold'>Round</emphasis>,
+<emphasis role='bold'>Bevel</emphasis> }
+ </entry>
+ </row>
+ <row>
+ <entry>fill-style</entry>
+ <entry>
+{ <emphasis role='bold'>Solid</emphasis>,
+<emphasis role='bold'>Tiled</emphasis>,
+<emphasis role='bold'>OpaqueStippled</emphasis>,
+<emphasis role='bold'>Stippled</emphasis> }
+ </entry>
+ </row>
+ <row>
+ <entry>fill-rule</entry>
+ <entry>
+{ <emphasis role='bold'>EvenOdd</emphasis>,
+<emphasis role='bold'>Winding</emphasis> }
+ </entry>
+ </row>
+ <row>
+ <entry>arc-mode</entry>
+ <entry>
+{ <emphasis role='bold'>Chord</emphasis>,
+<emphasis role='bold'>PieSlice</emphasis> }
+ </entry>
+ </row>
+ <row>
+ <entry>tile</entry>
+ <entry>PIXMAP</entry>
+ </row>
+ <row>
+ <entry>stipple</entry>
+ <entry>PIXMAP</entry>
+ </row>
+ <row>
+ <entry>tile-stipple-x-origin</entry>
+ <entry>INT16</entry>
+ </row>
+ <row>
+ <entry>tile-stipple-y-origin</entry>
+ <entry>INT16</entry>
+ </row>
+ <row>
+ <entry>font</entry>
+ <entry>FONT</entry>
+ </row>
+ <row>
+ <entry>subwindow-mode</entry>
+ <entry>
+{ <emphasis role='bold'>ClipByChildren</emphasis>,
+<emphasis role='bold'>IncludeInferiors</emphasis> }
+ </entry>
+ </row>
+ <row>
+ <entry>graphics-exposures</entry>
+ <entry>BOOL</entry>
+ </row>
+ <row>
+ <entry>clip-x-origin</entry>
+ <entry>INT16</entry>
+ </row>
+ <row>
+ <entry>clip-y-origin</entry>
+ <entry>INT16</entry>
+ </row>
+ <row>
+ <entry>clip-mask</entry>
+ <entry>
+PIXMAP or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>dash-offset</entry>
+ <entry>CARD16</entry>
+ </row>
+ <row>
+ <entry>dashes</entry>
+ <entry>CARD8</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para id="requests:CreateGC:plane-mask">
+<indexterm zone="requests:CreateGC:plane-mask"><primary>Plane</primary><secondary>mask</secondary></indexterm>
+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,
+so the result is:
+</para>
+
+<literallayout class="monospaced">
+ ((src FUNC dst) AND plane-mask) OR (dst AND (NOT plane-mask))
+</literallayout>
+
+<para>
+Range checking is not performed on the values for foreground, background,
+or plane-mask.
+They are simply truncated to the appropriate number of bits.
+</para>
+
+<para id="requests:CreateGC:function">
+The meanings of the functions are:
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='2.0*'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Function</entry>
+ <entry>Operation</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>
+<emphasis role='bold'>Clear</emphasis>
+ </entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>And</emphasis>
+ </entry>
+ <entry>src AND dst</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>AndReverse</emphasis>
+ </entry>
+ <entry>src AND (NOT dst)</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Copy</emphasis>
+ </entry>
+ <entry>src</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>AndInverted</emphasis>
+ </entry>
+ <entry>(NOT src) AND dst</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>NoOp</emphasis>
+ </entry>
+ <entry>dst</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Xor</emphasis>
+ </entry>
+ <entry>src XOR dst</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Or</emphasis>
+ </entry>
+ <entry>src OR dst</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Nor</emphasis>
+ </entry>
+ <entry>(NOT src) AND (NOT dst)</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Equiv</emphasis>
+ </entry>
+ <entry>(NOT src) XOR dst</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Invert</emphasis>
+ </entry>
+ <entry>NOT dst</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>OrReverse</emphasis>
+ </entry>
+ <entry>src OR (NOT dst)</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>CopyInverted</emphasis>
+ </entry>
+ <entry>NOT src</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>OrInverted</emphasis>
+ </entry>
+ <entry>(NOT src) OR dst</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Nand</emphasis>
+ </entry>
+ <entry>(NOT src) OR (NOT dst)</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Set</emphasis>
+ </entry>
+ <entry>1</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para id="requests:CreateGC:line-width">
+<indexterm zone="requests:CreateGC:line-width"><primary>Line</primary><secondary>drawing</secondary></indexterm>
+The line-width is measured in pixels and can be greater than or equal to
+one, a wide line, or the special value zero, a thin line.
+</para>
+
+<para>
+Wide lines are drawn centered on the path described by the graphics request.
+Unless otherwise specified by the join 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:
+</para>
+
+<literallayout class="monospaced">
+ [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)]
+</literallayout>
+
+<para>
+The 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 hence 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 if the interior or the boundary is immediately
+to the right (x increasing direction).
+Note that this description is a mathematical model describing the pixels
+that are drawn for a wide line and does not imply that trigonometry is required
+to implement such a model.
+Real or fixed point arithmetic is recommended for computing the corners of the
+line endpoints for lines greater than one pixel in width.
+</para>
+<para>
+Thin lines (zero line-width) are nominally one pixel wide lines drawn using an
+unspecified, device-dependent algorithm.
+There are only two constraints on this algorithm.
+First, if a line is drawn unclipped from [x1,y1] to [x2,y2]
+and another line is drawn unclipped from [x1+dx,y1+dy] to [x2+dx,y2+dy],
+then 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.
+Second, the effective set of points comprising a line cannot be affected
+by clipping.
+Thus, 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.
+</para>
+<para>
+Note that 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.
+Implementors are encouraged to make this property true for thin lines,
+but it is not required.
+A line-width of zero may differ from a line-width of one in which pixels
+are drawn.
+In general,
+drawing a thin line will be faster than drawing a wide line of width one,
+but thin lines may not mix well aesthetically with wide lines
+because of the different drawing algorithms.
+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.
+</para>
+<para id="requests:CreateGC:line-style">
+The line-style defines which sections of a line are drawn:
+</para>
+
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='2.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<emphasis role='bold'>Solid</emphasis>
+ </entry>
+ <entry>
+The full path of the line is drawn.
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>DoubleDash</emphasis>
+ </entry>
+ <entry>
+The full path of the line is drawn,
+but the even dashes are filled differently than the odd dashes
+(see fill-style), with
+<emphasis role='bold'>Butt</emphasis>
+cap-style used where even and odd dashes meet.
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>OnOffDash</emphasis>
+ </entry>
+ <entry>
+Only the even dashes are drawn,
+and cap-style applies to all internal ends of the individual dashes
+(except
+<emphasis role='bold'>NotLast</emphasis>
+is treated as
+<emphasis role='bold'>Butt</emphasis>).
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para id="requests:CreateGC:cap-style">
+The cap-style defines how the endpoints of a path are drawn:
+</para>
+
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='2.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<emphasis role='bold'>NotLast</emphasis>
+ </entry>
+ <entry>
+The result is equivalent to
+<emphasis role='bold'>Butt</emphasis>,
+except that for a line-width of zero the final endpoint is not drawn.
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Butt</emphasis>
+ </entry>
+ <entry>
+The result is square at the endpoint (perpendicular to the slope of the
+line) with no projection beyond.
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Round</emphasis>
+ </entry>
+ <entry>
+The result is a circular arc with its diameter equal to the line-width,
+centered on the endpoint; it is equivalent to
+<emphasis role='bold'>Butt</emphasis>
+for line-width zero.
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Projecting</emphasis>
+ </entry>
+ <entry>
+The result is square at the end, but the path continues beyond the
+endpoint for a distance equal to half the line-width;
+it is equivalent to
+<emphasis role='bold'>Butt</emphasis>
+for line-width zero.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+
+
+<para id="requests:CreateGC:join-style">
+The join-style defines how corners are drawn for wide lines:
+</para>
+
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='2.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<emphasis role='bold'>Miter</emphasis>
+ </entry>
+ <entry>
+The outer edges of the two lines extend to meet at an angle.
+However, if the angle is less than 11 degrees, a
+<emphasis role='bold'>Bevel</emphasis>
+join-style is used instead.
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Round</emphasis>
+ </entry>
+ <entry>
+The result is a circular arc with a diameter equal to the line-width,
+centered on the joinpoint.
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Bevel</emphasis>
+ </entry>
+ <entry>
+The result is
+<emphasis role='bold'>Butt</emphasis>
+endpoint styles, and then the triangular notch is filled.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+
+<para>
+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:
+</para>
+
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='3' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='1.0*'/>
+ <colspec colname='c3' colwidth='4.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<emphasis role='bold'>NotLast</emphasis>
+ </entry>
+ <entry>thin</entry>
+ <entry>
+This is device-dependent, but the desired effect is that nothing is drawn.
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Butt</emphasis>
+ </entry>
+ <entry>thin</entry>
+ <entry>
+This is device-dependent, but the desired effect is that
+a single pixel is drawn.
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Round</emphasis>
+ </entry>
+ <entry>thin</entry>
+ <entry>
+This is the same as
+<emphasis role='bold'>Butt</emphasis>/thin.
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Projecting</emphasis>
+ </entry>
+ <entry>thin</entry>
+ <entry>
+This is the same as
+<emphasis role='bold'>Butt</emphasis>/thin.
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Butt</emphasis>
+ </entry>
+ <entry>wide</entry>
+ <entry>
+Nothing is drawn.
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Round</emphasis>
+ </entry>
+ <entry>wide</entry>
+ <entry>
+The closed path is a circle, centered at the endpoint and
+with a diameter equal to the line-width.
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Projecting</emphasis>
+ </entry>
+ <entry>wide</entry>
+ <entry>
+The closed path is a square, aligned with the coordinate axes,
+centered at the endpoint and with sides equal to the line-width.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+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.
+</para>
+<para>
+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.
+</para>
+<para>
+The tile pixmap must have the same root and depth as the gcontext (or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+The stipple pixmap must have depth one and must have the same root
+as the gcontext (or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+For fill-style
+<emphasis role='bold'>Stippled</emphasis>
+(but not fill-style
+<emphasis role='bold'>OpaqueStippled</emphasis>),
+the stipple pattern is tiled in a single plane
+and acts as an additional clip mask to be ANDed with the clip-mask.
+Any size pixmap can be used for tiling or stippling,
+although some sizes may be faster to use than others.
+</para>
+<para>
+The fill-style defines the contents of the source for line, text, and
+fill requests.
+For all text and fill requests (for example,
+<link linkend="requests:PolyText8"><emphasis role='bold'>PolyText8</emphasis></link>,
+<link linkend="requests:PolyText16"><emphasis role='bold'>PolyText16</emphasis></link>,
+<link linkend="requests:PolyFillRectangle"><emphasis role='bold'>PolyFillRectangle</emphasis></link>,
+<link linkend="requests:FillPoly"><emphasis role='bold'>FillPoly</emphasis></link>,
+and
+<link linkend="requests:PolyFillArc"><emphasis role='bold'>PolyFillArc</emphasis></link>)
+as well as for line requests with line-style
+<emphasis role='bold'>Solid</emphasis>,
+(for example,
+<link linkend="requests:PolyLine"><emphasis role='bold'>PolyLine</emphasis></link>,
+<link linkend="requests:PolySegment"><emphasis role='bold'>PolySegment</emphasis></link>,
+<link linkend="requests:PolyRectangle"><emphasis role='bold'>PolyRectangle</emphasis></link>,
+<link linkend="requests:PolyArc"><emphasis role='bold'>PolyArc</emphasis></link> )
+and for the even dashes for line requests with line-style
+<emphasis role='bold'>OnOffDash</emphasis>
+or
+<emphasis role='bold'>DoubleDash</emphasis>:
+</para>
+
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='2.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<emphasis role='bold'>Solid</emphasis>
+ </entry>
+ <entry>Foreground</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Tiled</emphasis>
+ </entry>
+ <entry>Tile</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>OpaqueStippled</emphasis>
+ </entry>
+ <entry>
+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
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Stippled</emphasis>
+ </entry>
+ <entry>
+Foreground masked by stipple
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+For the odd dashes for line requests with line-style
+<emphasis role='bold'>DoubleDash</emphasis>:
+</para>
+
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='2.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<emphasis role='bold'>Solid</emphasis>
+ </entry>
+ <entry>Background</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Tiled</emphasis>
+ </entry>
+ <entry>Same as for even dashes</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>OpaqueStippled</emphasis>
+ </entry>
+ <entry>Same as for even dashes</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>Stippled</emphasis>
+ </entry>
+ <entry>Background masked by stipple</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+
+<para>
+The dashes value allowed here is actually a simplified form of the more
+general patterns that can be set with
+<link linkend="requests:SetDashes"><emphasis role='bold'>SetDashes</emphasis></link>.
+Specifying a value of N here is equivalent to specifying
+the two element list [N, N] in
+<link linkend="requests:SetDashes"><emphasis role='bold'>SetDashes</emphasis></link>.
+The value must be nonzero (or a
+<emphasis role='bold'>Value</emphasis>
+error results).
+The meaning of dash-offset and dashes are explained in the
+<link linkend="requests:SetDashes"><emphasis role='bold'>SetDashes</emphasis></link>
+request.
+</para>
+<para id="requests:CreateGC:clip-mask">
+<indexterm zone="requests:CreateGC:clip-mask"><primary>Clipping region</primary></indexterm>
+The clip-mask restricts writes to the destination drawable.
+Only pixels where the clip-mask has bits set to 1 are drawn.
+Pixels are not drawn outside the area covered by the clip-mask
+or where the clip-mask has bits set to 0.
+The clip-mask affects all graphics requests,
+but it does not clip sources.
+The clip-mask origin is interpreted relative to the origin of whatever
+destination drawable is specified in a graphics request.
+If a pixmap is specified as the clip-mask,
+it must have depth 1 and have the same root as the gcontext (or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+If clip-mask is
+<emphasis role='bold'>None</emphasis>,
+then pixels are always drawn, regardless of the clip origin.
+The clip-mask can also be set with the
+<link linkend="requests:SetClipRectangles"><emphasis role='bold'>SetClipRectangles</emphasis></link>
+request.
+</para>
+<para>
+For
+<emphasis role='bold'>ClipByChildren</emphasis>,
+both source and destination windows are additionally clipped by all viewable
+<emphasis role='bold'>InputOutput</emphasis>
+children.
+For
+<emphasis role='bold'>IncludeInferiors</emphasis>,
+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
+<emphasis role='bold'>IncludeInferiors</emphasis>
+with a source or destination window of one depth with mapped inferiors
+of differing depth is not illegal,
+but the semantics is undefined by the core protocol.
+</para>
+<para id="requests:CreateGC:fill-rule">
+<indexterm zone="requests:CreateGC:fill-rule" significance="preferred"><primary>Winding rule</primary></indexterm>
+<indexterm zone="requests:CreateGC:fill-rule" significance="preferred"><primary>Fill rule</primary></indexterm>
+The fill-rule defines what pixels are inside (that is, are drawn) for
+paths given in
+<link linkend="requests:FillPoly"><emphasis role='bold'>FillPoly</emphasis></link>
+requests.
+<emphasis role='bold'>EvenOdd</emphasis>
+means a point is inside if an infinite ray with the point as origin crosses
+the path an odd number of times.
+For
+<emphasis role='bold'>Winding</emphasis>,
+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 counter-clockwise 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 one can simply choose a different ray that is not
+coincident with a segment.
+</para>
+<para>
+For both fill rules,
+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 along a horizontal edge are a special case
+and are inside if and only if the polygon interior is immediately below
+(y increasing direction).
+</para>
+<para>
+The arc-mode controls filling in the
+<link linkend="requests:PolyFillArc"><emphasis role='bold'>PolyFillArc</emphasis></link>
+request.
+</para>
+<para>
+The graphics-exposures flag controls
+<link linkend="events:GraphicsExposure"><emphasis role='bold'>GraphicsExposure</emphasis></link>
+event generation for
+<link linkend="requests:CopyArea"><emphasis role='bold'>CopyArea</emphasis></link>
+and
+<link linkend="requests:CopyPlane"><emphasis role='bold'>CopyPlane</emphasis></link>
+requests (and any similar requests defined by extensions).
+</para>
+<para>
+The default component values are:
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='2.0*'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Component</entry>
+ <entry>Default</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>function</entry>
+ <entry>
+<emphasis role='bold'>Copy</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>plane-mask</entry>
+ <entry>all ones</entry>
+ </row>
+ <row>
+ <entry>foreground</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>background</entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>line-width</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>line-style</entry>
+ <entry><emphasis role='bold'>Solid</emphasis></entry>
+ </row>
+ <row>
+ <entry>cap-style</entry>
+ <entry><emphasis role='bold'>Butt</emphasis></entry>
+ </row>
+ <row>
+ <entry>join-style</entry>
+ <entry><emphasis role='bold'>Miter</emphasis></entry>
+ </row>
+ <row>
+ <entry>fill-style</entry>
+ <entry><emphasis role='bold'>Solid</emphasis></entry>
+ </row>
+ <row>
+ <entry>fill-rule</entry>
+ <entry><emphasis role='bold'>EvenOdd</emphasis></entry>
+ </row>
+ <row>
+ <entry>arc-mode</entry>
+ <entry><emphasis role='bold'>PieSlice</emphasis></entry>
+ </row>
+ <row>
+ <entry>tile</entry>
+ <entry>
+<para>
+Pixmap of unspecified size filled with foreground pixel
+</para>
+<para>
+(that is, client specified pixel if any, else 0)
+</para>
+<para>
+(subsequent changes to foreground do not affect this pixmap)
+</para>
+ </entry>
+ </row>
+ <row>
+ <entry>stipple</entry>
+ <entry>
+Pixmap of unspecified size filled with ones
+ </entry>
+ </row>
+ <row>
+ <entry>tile-stipple-x-origin</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>tile-stipple-y-origin</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>font</entry>
+ <entry>&lt;server-dependent-font&gt;</entry>
+ </row>
+ <row>
+ <entry>subwindow-mode</entry>
+ <entry>
+<emphasis role='bold'>ClipByChildren</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>graphics-exposures</entry>
+ <entry>
+<emphasis role='bold'>True</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>clip-x-origin</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>clip-y-origin</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>clip-mask</entry>
+ <entry>
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>dash-offset</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>dashes</entry>
+ <entry>4 (that is, the list [4, 4])</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+Storing a pixmap in a gcontext 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 gcontext.
+If the pixmap is used simultaneously in a graphics request
+as both a destination and as a tile or stipple,
+the results are not defined.
+</para>
+<para>
+It is quite likely that some amount of gcontext information will be
+cached in display hardware and that such hardware can only cache a
+small number of gcontexts.
+Given the number and complexity of components,
+clients should view switching between gcontexts with nearly
+identical state as significantly more expensive than making minor
+changes to a single gcontext.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:ChangeGC">
+ <title>ChangeGC</title>
+ <indexterm zone="requests:ChangeGC" significance="preferred"><primary>ChangeGC</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>gc</emphasis>: GCONTEXT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>value-mask</emphasis>: BITMASK
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>value-list</emphasis>: LISTofVALUE
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Alloc</emphasis>,
+<emphasis role='bold'>Font</emphasis>,
+<emphasis role='bold'>GContext</emphasis>,
+<emphasis role='bold'>Match</emphasis>,
+<emphasis role='bold'>Pixmap</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request changes components in gc.
+The value-mask and value-list specify which components are to be changed.
+The values and restrictions are the same
+as for
+<link linkend="requests:CreateGC"><emphasis role='bold'>CreateGC</emphasis></link>.
+</para>
+<para>
+Changing the clip-mask also overrides any previous
+<link linkend="requests:SetClipRectangles"><emphasis role='bold'>SetClipRectangles</emphasis></link>
+request on the context.
+Changing dash-offset or dashes overrides any previous
+<link linkend="requests:SetDashes"><emphasis role='bold'>SetDashes</emphasis></link>
+request on the context.
+</para>
+<para>
+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.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:CopyGC">
+ <title>CopyGC</title>
+ <indexterm zone="requests:CopyGC" significance="preferred"><primary>CopyGC</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>src-gc</emphasis>, <emphasis remap='I'>dst-gc</emphasis>: GCONTEXT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>value-mask</emphasis>: BITMASK
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Alloc</emphasis>,
+<emphasis role='bold'>GContext</emphasis>,
+<emphasis role='bold'>Match</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request copies components from src-gc to dst-gc.
+The value-mask specifies which components to copy, as for
+<link linkend="requests:CreateGC"><emphasis role='bold'>CreateGC</emphasis></link>.
+The two gcontexts must have the same root and the same depth (or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:SetDashes">
+ <title>SetDashes</title>
+ <indexterm zone="requests:SetDashes" significance="preferred"><primary>SetDashes</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>gc</emphasis>: GCONTEXT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>dash-offset</emphasis>: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>dashes</emphasis>: LISTofCARD8
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Alloc</emphasis>,
+<emphasis role='bold'>GContext</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request sets dash-offset and dashes in gc for dashed line styles.
+Dashes cannot be empty (or a
+<emphasis role='bold'>Value</emphasis>
+error results).
+Specifying an odd-length list is equivalent to specifying the same list
+concatenated with itself to produce an even-length list.
+The initial and alternating elements of dashes are the even dashes;
+the others are the odd dashes.
+Each element specifies a dash length in pixels.
+All of the elements must be nonzero (or a
+<emphasis role='bold'>Value</emphasis>
+error results).
+The dash-offset defines the phase of the pattern,
+specifying how many pixels into dashes 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.
+</para>
+<para>
+The unit of measure for dashes is the same as in 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.
+</para>
+<para>
+For any graphics primitive, the computation of the endpoint of an individual
+dash only depends on the geometry of the primitive, the start position
+of the dash, the direction of the dash, and the dash length.
+</para>
+<para>
+For any graphics primitive, the total set of pixels used to render the
+primitive (both even and odd numbered dash elements) with
+<emphasis role='bold'>DoubleDash</emphasis>
+line-style is the same as the set of pixels used to render the
+primitive with
+<emphasis role='bold'>Solid</emphasis>
+line-style.
+</para>
+<para>
+For any graphics primitive, if the primitive is drawn with
+<emphasis role='bold'>OnOffDash</emphasis>
+or
+<emphasis role='bold'>DoubleDash</emphasis>
+line-style unclipped at position [x,y] and again at position
+[x+dx,y+dy], then a point [x1,y1] is included in a dash in the first
+instance if and only if the point [x1+dx,y1+dy] is included in the dash in
+the second instance. In addition, the effective set of points comprising a
+dash cannot be affected by clipping. A point is included in a clipped dash
+if and only if the point lies inside the clipping region and the point
+would be included in the dash when drawn unclipped.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:SetClipRectangles">
+ <title>SetClipRectangles</title>
+ <indexterm zone="requests:SetClipRectangles" significance="preferred"><primary>SetClipRectangles</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>gc</emphasis>: GCONTEXT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>clip-x-origin</emphasis>, <emphasis remap='I'>clip-y-origin</emphasis>: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>rectangles</emphasis>: LISTofRECTANGLE
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>ordering</emphasis>:
+{ <emphasis role='bold'>UnSorted</emphasis>,
+<emphasis role='bold'>YSorted</emphasis>,
+<emphasis role='bold'>YXSorted</emphasis>,
+<emphasis role='bold'>YXBanded</emphasis>}
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Alloc</emphasis>,
+<emphasis role='bold'>GContext</emphasis>,
+<emphasis role='bold'>Match</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request changes clip-mask in gc to the specified list of rectangles
+and sets the clip origin.
+Output will be 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 graphics results will be
+undefined.
+Note that the list of rectangles can be empty,
+which effectively disables output.
+This is the opposite of passing
+<emphasis role='bold'>None</emphasis>
+as the clip-mask in
+<link linkend="requests:CreateGC"><emphasis role='bold'>CreateGC</emphasis></link>
+and
+<link linkend="requests:ChangeGC"><emphasis role='bold'>ChangeGC</emphasis></link>.
+</para>
+<para>
+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 server may generate a
+<emphasis role='bold'>Match</emphasis>
+error, but it is not required to do so.
+If no error is generated,
+the graphics results are undefined.
+<emphasis role='bold'>UnSorted</emphasis>
+means that the rectangles are in arbitrary order.
+<emphasis role='bold'>YSorted</emphasis>
+means that the rectangles are nondecreasing in their Y origin.
+<emphasis role='bold'>YXSorted</emphasis>
+additionally constrains
+<emphasis role='bold'>YSorted</emphasis>
+order in that all rectangles with an equal Y origin are
+nondecreasing in their X origin.
+<emphasis role='bold'>YXBanded</emphasis>
+additionally constrains
+<emphasis role='bold'>YXSorted</emphasis>
+by requiring that, for every possible Y scanline,
+all rectangles that include that scanline have identical Y origins and Y
+extents.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:FreeGC">
+ <title>FreeGC</title>
+ <indexterm zone="requests:FreeGC" significance="preferred"><primary>FreeGC</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>gc</emphasis>: GCONTEXT
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>GContext</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request deletes the association between the resource ID and the gcontext
+and destroys the gcontext.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:ClearArea">
+ <title>ClearArea</title>
+ <indexterm zone="requests:ClearArea" significance="preferred"><primary>ClearArea</primary></indexterm>
+ <indexterm zone="requests:ClearArea"><primary>Background</primary></indexterm><informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>exposures</emphasis>: BOOL
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Match</emphasis>,
+<emphasis role='bold'>Value</emphasis>,
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+The x and y coordinates are relative to the window's origin
+and specify the upper-left corner of the rectangle.
+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 is tiled with a plane-mask of all ones and function of
+<emphasis role='bold'>Copy</emphasis>
+and a subwindow-mode of
+<emphasis role='bold'>ClipByChildren</emphasis>.
+If the window has background
+<emphasis role='bold'>None</emphasis>,
+the contents of the window are not changed.
+In either case,
+if exposures is
+<emphasis role='bold'>True</emphasis>,
+then one or more exposure events are generated for regions of the rectangle
+that are either visible or are being retained in a backing store.
+</para>
+<para>
+It is a
+<emphasis role='bold'>Match</emphasis>
+error to use an
+<emphasis role='bold'>InputOnly</emphasis>
+window in this request.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:CopyArea">
+ <title>CopyArea</title>
+ <indexterm zone="requests:CopyArea" significance="preferred"><primary>CopyArea</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>src-drawable</emphasis>, <emphasis remap='I'>dst-drawable</emphasis>: DRAWABLE
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>gc</emphasis>: GCONTEXT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>src-x</emphasis>, <emphasis remap='I'>src-y</emphasis>: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>dst-x</emphasis>, <emphasis remap='I'>dst-y</emphasis>: INT16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Drawable</emphasis>,
+<emphasis role='bold'>GContext</emphasis>,
+<emphasis role='bold'>Match</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request combines the specified rectangle of src-drawable with the
+specified rectangle of dst-drawable.
+The src-x and src-y coordinates are relative to src-drawable's origin.
+The dst-x and dst-y are relative to dst-drawable's origin,
+each pair specifying the upper-left corner of the rectangle.
+The src-drawable must have the same root and the same depth
+as dst-drawable (or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+</para>
+<para>
+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,
+then those regions are not copied,
+but the following occurs on all corresponding destination regions that are
+either visible or are retained in backing-store.
+If the dst-drawable is a window with a background other than
+<emphasis role='bold'>None</emphasis>,
+these corresponding destination regions are tiled
+(with plane-mask of all ones and function
+<emphasis role='bold'>Copy</emphasis>)
+with that background.
+Regardless of tiling and whether the destination is a window or a pixmap,
+if graphics-exposures in gc is
+<emphasis role='bold'>True</emphasis>,
+then
+<link linkend="events:GraphicsExposure"><emphasis role='bold'>GraphicsExposure</emphasis></link>
+events for all corresponding destination regions are generated.
+</para>
+<para>
+If graphics-exposures is
+<emphasis role='bold'>True</emphasis>
+but no
+<emphasis role='bold'>GraphicsExposure</emphasis>
+events are generated,
+then a
+<link linkend="events:NoExposure"><emphasis role='bold'>NoExposure</emphasis></link>
+event is generated.
+</para>
+<para>
+GC components: function, plane-mask, subwindow-mode,
+graphics-exposures, clip-x-origin, clip-y-origin, clip-mask
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:CopyPlane">
+ <title>CopyPlane</title>
+ <indexterm zone="requests:CopyPlane" significance="preferred"><primary>CopyPlane</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>src-drawable</emphasis>, <emphasis remap='I'>dst-drawable</emphasis>: DRAWABLE
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>gc</emphasis>: GCONTEXT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>src-x</emphasis>, <emphasis remap='I'>src-y</emphasis>: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>dst-x</emphasis>, <emphasis remap='I'>dst-y</emphasis>: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>bit-plane</emphasis>: CARD32
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Drawable</emphasis>,
+<emphasis role='bold'>GContext</emphasis>,
+<emphasis role='bold'>Match</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+The src-drawable must have the same root as dst-drawable (or a
+<emphasis role='bold'>Match</emphasis>
+error results), but it need not have the same depth.
+The bit-plane must have exactly one bit set to 1 and the value of bit-plane
+must be less than %2 sup n% where <emphasis remap='I'>n</emphasis> is the depth of src-drawable (or a
+<emphasis role='bold'>Value</emphasis>
+error results).
+Effectively, a pixmap of the same depth as dst-drawable and with size specified
+by the source region is formed using the foreground/background pixels in gc
+(foreground everywhere the bit-plane in src-drawable contains a bit set to 1,
+background everywhere the bit-plane contains a bit set to 0),
+and the equivalent of a
+<link linkend="requests:CopyArea"><emphasis role='bold'>CopyArea</emphasis></link>
+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
+<emphasis role='bold'>OpaqueStippled</emphasis>
+for filling a rectangular area of the destination.
+</para>
+<para>
+GC components: function, plane-mask, foreground, background,
+subwindow-mode, graphics-exposures, clip-x-origin, clip-y-origin,
+clip-mask
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:PolyPoint">
+ <title>PolyPoint</title>
+ <indexterm zone="requests:PolyPoint" significance="preferred"><primary>PolyPoint</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>drawable</emphasis>: DRAWABLE
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>gc</emphasis>: GCONTEXT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>coordinate-mode</emphasis>:
+{ <emphasis role='bold'>Origin</emphasis>,
+<emphasis role='bold'>Previous</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>points</emphasis>: LISTofPOINT
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Drawable</emphasis>,
+<emphasis role='bold'>GContext</emphasis>,
+<emphasis role='bold'>Match</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request combines the foreground pixel in gc with the pixel
+at each point in the drawable.
+The points are drawn in the order listed.
+</para>
+<para>
+The first point is always relative to the drawable's origin.
+The rest are relative either to that origin or the previous point,
+depending on the coordinate-mode.
+</para>
+<para>
+GC components: function, plane-mask, foreground, subwindow-mode,
+clip-x-origin, clip-y-origin, clip-mask
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:PolyLine">
+ <title>PolyLine</title>
+ <indexterm zone="requests:PolyLine" significance="preferred"><primary>PolyLine</primary></indexterm>
+ <indexterm zone="requests:PolyLine"><primary>Line</primary><secondary>drawing</secondary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>drawable</emphasis>: DRAWABLE
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>gc</emphasis>: GCONTEXT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>coordinate-mode</emphasis>:
+{ <emphasis role='bold'>Origin</emphasis>,
+<emphasis role='bold'>Previous</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>points</emphasis>: LISTofPOINT
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Drawable</emphasis>,
+<emphasis role='bold'>GContext</emphasis>,
+<emphasis role='bold'>Match</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request draws lines between each pair of points (point[i], point[i+1]).
+The lines are drawn in the order listed.
+The lines join correctly at all intermediate points,
+and if the first and last points coincide,
+the first and last lines also join correctly.
+</para>
+<para>
+For any given line,
+no pixel is drawn 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
+<emphasis role='bold'>PolyLine</emphasis>
+were a single filled shape.
+</para>
+<para>
+The first point is always relative to the drawable's origin.
+The rest are relative either to that origin or the previous point,
+depending on the coordinate-mode.
+</para>
+<para>
+When either of the two lines involved in a
+<emphasis role='bold'>Bevel</emphasis>
+join is neither vertical
+nor horizontal, then the slope and position of the line segment defining
+the bevel join edge is implementation dependent. However, the computation
+of the slope and distance (relative to the join point) only depends on
+the line width and the slopes of the two lines.
+</para>
+<para>
+GC components: function, plane-mask, line-width, line-style,
+cap-style, join-style, fill-style, subwindow-mode, clip-x-origin,
+clip-y-origin, clip-mask
+</para>
+<para>
+GC mode-dependent components: foreground, background, tile, stipple,
+tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, dashes
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:PolySegment">
+ <title>PolySegment</title>
+ <indexterm zone="requests:PolySegment" significance="preferred"><primary>PolySegment</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>drawable</emphasis>: DRAWABLE
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>gc</emphasis>: GCONTEXT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>segments</emphasis>: LISTofSEGMENT
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+where:
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+SEGMENT: [x1, y1, x2, y2: INT16]
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Drawable</emphasis>,
+<emphasis role='bold'>GContext</emphasis>,
+<emphasis role='bold'>Match</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+For each segment,
+this request draws a line between [x1, y1] and [x2, y2].
+The lines are drawn in the order listed.
+No joining is performed at coincident endpoints.
+For any given line,
+no pixel is drawn more than once.
+If lines intersect,
+the intersecting pixels are drawn multiple times.
+</para>
+<para>
+GC components: function, plane-mask, line-width, line-style,
+cap-style, fill-style, subwindow-mode, clip-x-origin, clip-y-origin,
+clip-mask
+</para>
+<para>
+GC mode-dependent components: foreground, background, tile, stipple,
+tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, dashes
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:PolyRectangle">
+ <title>PolyRectangle</title>
+ <indexterm zone="requests:PolyRectangle" significance="preferred"><primary>PolyRectangle</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>drawable</emphasis>: DRAWABLE
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>gc</emphasis>: GCONTEXT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>rectangles</emphasis>: LISTofRECTANGLE
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Drawable</emphasis>,
+<emphasis role='bold'>GContext</emphasis>,
+<emphasis role='bold'>Match</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request draws the outlines of the specified rectangles, as if a five-point
+<link linkend="requests:PolyLine"><emphasis role='bold'>PolyLine</emphasis></link>
+were specified for each rectangle:
+</para>
+<para>
+<literallayout class="monospaced">
+ [x,y] [x+width,y] [x+width,y+height] [x,y+height] [x,y]
+</literallayout>
+</para>
+<para>
+The x and y coordinates of each rectangle are relative to the drawable's origin
+and define the upper-left corner of the rectangle.
+</para>
+<para>
+The rectangles are drawn in the order listed.
+For any given rectangle,
+no pixel is drawn more than once.
+If rectangles intersect,
+the intersecting pixels are drawn multiple times.
+</para>
+<para>
+GC components: function, plane-mask, line-width, line-style,
+cap-style, join-style, fill-style, subwindow-mode, clip-x-origin,
+clip-y-origin, clip-mask
+</para>
+<para>
+GC mode-dependent components: foreground, background, tile, stipple,
+tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, dashes
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:PolyArc">
+ <title>PolyArc</title>
+ <indexterm zone="requests:PolyArc" significance="preferred"><primary>PolyArc</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>drawable</emphasis>: DRAWABLE
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>gc</emphasis>: GCONTEXT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>arcs</emphasis>: LISTofARC
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Drawable</emphasis>,
+<emphasis role='bold'>GContext</emphasis>,
+<emphasis role='bold'>Match</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request draws circular or elliptical arcs.
+Each arc is specified by a rectangle and two angles.
+The angles are signed integers in degrees scaled by 64,
+with positive indicating counterclockwise motion and
+negative indicating clockwise motion.
+The start of the arc is specified by angle1 relative to the three-o'clock
+position from the center of the rectangle,
+and the path and extent of the arc is specified by angle2 relative to the
+start of the arc.
+If the magnitude of angle2 is greater than 360 degrees,
+it is truncated to 360 degrees.
+The x and y coordinates of the rectangle are relative to the origin of
+the drawable.
+For an arc specified as [x,y,w,h,a1,a2],
+the origin of the major and minor axes is at [x+(w/2),y+(h/2)],
+and the infinitely thin path describing the entire circle/ellipse intersects
+the horizontal axis at [x,y+(h/2)] and [x+w,y+(h/2)] and intersects the
+vertical axis at [x+(w/2),y] and [x+(w/2),y+h].
+These coordinates are not necessarily integral; that is,
+they are not truncated to discrete coordinates.
+</para>
+<para>
+For a wide line with line-width lw, the ideal bounding outlines for filling
+are given by the two infinitely thin paths consisting of all points whose
+perpendicular distance from a tangent to the path of the circle/ellipse is
+equal to lw/2 (which may be a fractional value). When the width and height
+of the arc are not equal and both are nonzero, then the actual bounding
+outlines are implementation dependent. However, the computation of the
+shape and position of the bounding outlines (relative to the center of the
+arc) only depends on the width and height of the arc and the
+line-width.
+</para>
+<para>
+The cap-style is applied the same as for a line corresponding to the
+tangent of the circle/ellipse at the endpoint. When the angle of an arc
+face is not an integral multiple of 90 degrees, and the width and height of
+the arc are both are nonzero, then the shape and position of the cap at
+that face is implementation dependent. However, for a
+<emphasis role='bold'>Butt</emphasis>
+cap, the face
+is defined by a straight line, and the computation of the position
+(relative to the center of the arc) and the slope of the line only
+depends on the width and height of the arc and the angle of the arc face.
+For other cap styles, the computation of the position (relative to the
+center of the arc) and the shape of the cap only depends on the width
+and height of the arc, the line-width, the angle of the arc face, and the
+direction (clockwise or counter clockwise) of the arc from the endpoint.
+</para>
+<para>
+The join-style is applied the same as for two lines corresponding to the
+tangents of the circles/ellipses at the join point. When the width and
+height of both arcs are nonzero, and the angle of either arc face is not an
+integral multiple of 90 degrees, then the shape of the join is
+implementation dependent. However, the computation of the shape only
+depends on the width and height of each arc, the line-width, the angles of
+the two arc faces, the direction (clockwise or counter clockwise) of the
+arcs from the join point, and the relative orientation of the two arc
+center points.
+</para>
+<para>
+For an arc specified as [x,y,w,h,a1,a2],
+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:
+<literallayout class="monospaced">
+ skewed-angle = atan(tan(normal-angle) * w/h) + adjust
+</literallayout>
+</para>
+<para>
+The skewed-angle and normal-angle are expressed in radians (rather
+than in degrees scaled by 64) in the range [0,2*PI).
+The atan returns a value in the range [-PI/2,PI/2].
+The adjust is:
+<informaltable frame="none">
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='2.0*'/>
+ <tbody>
+ <row>
+ <entry>0</entry>
+ <entry>for normal-angle in the range [0,PI/2)</entry>
+ </row>
+ <row>
+ <entry>PI</entry>
+ <entry>for normal-angle in the range [PI/2,(3*PI)/2)</entry>
+ </row>
+ <row>
+ <entry>2*PI</entry>
+ <entry>for normal-angle in the range [(3*PI)/2,2*PI)</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+</para>
+<para>
+The arcs are drawn in the order listed.
+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.
+For any given arc,
+no pixel is drawn more than once.
+If two arcs join correctly and the line-width is greater than zero
+and the arcs intersect,
+no pixel is drawn 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.
+</para>
+<para>
+By specifying one axis to be zero,
+a horizontal or vertical line can be drawn.
+</para>
+<para>
+Angles are computed based solely on the coordinate system,
+ignoring the aspect ratio.
+</para>
+<para>
+GC components: function, plane-mask, line-width, line-style,
+cap-style, join-style, fill-style, subwindow-mode, clip-x-origin,
+clip-y-origin, clip-mask
+</para>
+<para>
+GC mode-dependent components: foreground, background, tile, stipple,
+tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, dashes
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:FillPoly">
+ <title>FillPoly</title>
+ <indexterm zone="requests:FillPoly" significance="preferred"><primary>FillPoly</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2in -->
+<emphasis remap='I'>drawable</emphasis>: DRAWABLE
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>gc</emphasis>: GCONTEXT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>shape</emphasis>:
+{ <emphasis role='bold'>Complex</emphasis>,
+<emphasis role='bold'>Nonconvex</emphasis>,
+<emphasis role='bold'>Convex</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>coordinate-mode</emphasis>:
+{ <emphasis role='bold'>Origin</emphasis>,
+<emphasis role='bold'>Previous</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>points</emphasis>: LISTofPOINT
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Drawable</emphasis>,
+<emphasis role='bold'>GContext</emphasis>,
+<emphasis role='bold'>Match</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request 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.
+No pixel of the region is drawn more than once.
+</para>
+<para>
+The first point is always relative to the drawable's origin.
+The rest are relative either to that origin or the previous point,
+depending on the coordinate-mode.
+</para>
+<para>
+The shape parameter may be used by the server to improve performance.
+<emphasis role='bold'>Complex</emphasis>
+means the path may self-intersect.
+Contiguous coincident points in the path are not treated
+as self-intersection.
+</para>
+<para>
+<emphasis role='bold'>Nonconvex</emphasis>
+means the path does not self-intersect,
+but the shape is not wholly convex.
+If known by the client,
+specifying
+<emphasis role='bold'>Nonconvex</emphasis>
+over
+<emphasis role='bold'>Complex</emphasis>
+may improve performance.
+If
+<emphasis role='bold'>Nonconvex</emphasis>
+is specified for a self-intersecting path,
+the graphics results are undefined.
+</para>
+<para>
+<emphasis role='bold'>Convex</emphasis>
+means that for every pair of points inside the polygon,
+the line segment connecting them does not intersect the path.
+If known by the client,
+specifying
+<emphasis role='bold'>Convex</emphasis>
+can improve performance.
+If
+<emphasis role='bold'>Convex</emphasis>
+is specified for a path that is not convex,
+the graphics results are undefined.
+</para>
+<para>
+GC components: function, plane-mask, fill-style, fill-rule,
+subwindow-mode, clip-x-origin, clip-y-origin, clip-mask
+</para>
+<para>
+GC mode-dependent components: foreground, background, tile, stipple,
+tile-stipple-x-origin, tile-stipple-y-origin
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:PolyFillRectangle">
+ <title>PolyFillRectangle</title>
+ <indexterm zone="requests:PolyFillRectangle" significance="preferred"><primary>PolyFillRectangle</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>drawable</emphasis>: DRAWABLE
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>gc</emphasis>: GCONTEXT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>rectangles</emphasis>: LISTofRECTANGLE
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Drawable</emphasis>,
+<emphasis role='bold'>GContext</emphasis>,
+<emphasis role='bold'>Match</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request fills the specified rectangles, as if a four-point
+<link linkend="requests:FillPoly"><emphasis role='bold'>FillPoly</emphasis></link>
+were specified for each rectangle:
+<literallayout class="monospaced">
+ [x,y] [x+width,y] [x+width,y+height] [x,y+height]
+</literallayout>
+</para>
+<para>
+The x and y coordinates of each rectangle are relative to the drawable's origin
+and define the upper-left corner of the rectangle.
+</para>
+<para>
+The rectangles are drawn in the order listed.
+For any given rectangle,
+no pixel is drawn more than once.
+If rectangles intersect,
+the intersecting pixels are drawn multiple times.
+</para>
+<para>
+GC components: function, plane-mask, fill-style, subwindow-mode,
+clip-x-origin, clip-y-origin, clip-mask
+</para>
+<para>
+GC mode-dependent components: foreground, background, tile, stipple,
+tile-stipple-x-origin, tile-stipple-y-origin
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:PolyFillArc">
+ <title>PolyFillArc</title>
+ <indexterm zone="requests:PolyFillArc" significance="preferred"><primary>PolyFillArc</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>drawable</emphasis>: DRAWABLE
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>gc</emphasis>: GCONTEXT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>arcs</emphasis>: LISTofARC
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Drawable</emphasis>,
+<emphasis role='bold'>GContext</emphasis>,
+<emphasis role='bold'>Match</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+For each arc,
+this request fills the region closed by the infinitely thin path
+described by the specified arc and one or two line segments,
+depending on the arc-mode.
+For
+<emphasis role='bold'>Chord</emphasis>,
+the single line segment joining the endpoints of the arc is used.
+For
+<emphasis role='bold'>PieSlice</emphasis>,
+the two line segments joining the endpoints of the arc with the center point
+are used.
+</para>
+<para>
+For an arc specified as [x,y,w,h,a1,a2], the origin of the major and minor
+axes is at [x+(w/2),y+(h/2)], and the infinitely thin path describing the
+entire circle/ellipse intersects the horizontal axis at [x,y+(h/2)] and
+[x+w,y+(h/2)] and intersects the vertical axis at [x+(w/2),y] and
+[x+(w/2),y+h]. These coordinates are not necessarily integral; that is,
+they are not truncated to discrete coordinates.
+</para>
+<para>
+The arc angles are interpreted as specified in the
+<link linkend="requests:PolyArc"><emphasis role='bold'>PolyArc</emphasis></link>
+request. When
+the angle of an arc face is not an integral multiple of 90 degrees, then
+the precise endpoint on the arc is implementation dependent. However, for
+<emphasis role='bold'>Chord</emphasis>
+arc-mode, the computation of the pair of endpoints (relative to the
+center of the arc) only depends on the width and height of the arc and
+the angles of the two arc faces. For
+<emphasis role='bold'>PieSlice</emphasis>
+arc-mode, the computation of
+an endpoint only depends on the angle of the arc face for that
+endpoint and the ratio of the arc width to arc height.
+</para>
+<para>
+The arcs are filled in the order listed.
+For any given arc,
+no pixel is drawn more than once.
+If regions intersect,
+the intersecting pixels are drawn multiple times.
+</para>
+<para>
+GC components: function, plane-mask, fill-style, arc-mode,
+subwindow-mode, clip-x-origin, clip-y-origin, clip-mask
+</para>
+<para>
+GC mode-dependent components: foreground, background, tile, stipple,
+tile-stipple-x-origin, tile-stipple-y-origin
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:PutImage">
+ <title>PutImage</title>
+ <indexterm zone="requests:PutImage" significance="preferred"><primary>PutImage</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>drawable</emphasis>: DRAWABLE
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>gc</emphasis>: GCONTEXT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>depth</emphasis>: CARD8
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>dst-x</emphasis>, <emphasis remap='I'>dst-y</emphasis>: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>left-pad</emphasis>: CARD8
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>format</emphasis>:
+{ <emphasis role='bold'>Bitmap</emphasis>,
+<emphasis role='bold'>XYPixmap</emphasis>,
+<emphasis role='bold'>ZPixmap</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>data</emphasis>: LISTofBYTE
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Drawable</emphasis>,
+<emphasis role='bold'>GContext</emphasis>,
+<emphasis role='bold'>Match</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request combines an image with a rectangle of the drawable.
+The dst-x and dst-y coordinates are relative to the drawable's origin.
+</para>
+<para>
+If
+<emphasis role='bold'>Bitmap</emphasis>
+format is used,
+then depth must be one (or a
+<emphasis role='bold'>Match</emphasis>
+error results), and the image must be in XY format.
+The foreground pixel in gc defines the source for bits set to 1 in the image,
+and the background pixel defines the source for the bits set to 0.
+</para>
+<para>
+For
+<emphasis role='bold'>XYPixmap</emphasis>
+and
+<emphasis role='bold'>ZPixmap</emphasis>,
+the depth must match the depth of the drawable (or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+For
+<emphasis role='bold'>XYPixmap</emphasis>,
+the image must be sent in XY format.
+For
+<emphasis role='bold'>ZPixmap</emphasis>,
+the image must be sent in the Z format defined for the given depth.
+</para>
+<para>
+The left-pad must be zero for
+<emphasis role='bold'>ZPixmap</emphasis>
+format (or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+For
+<emphasis role='bold'>Bitmap</emphasis>
+and
+<emphasis role='bold'>XYPixmap</emphasis>
+format,
+left-pad must be less than bitmap-scanline-pad as given in the server
+connection setup information (or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+The first left-pad bits in every scanline are to be ignored by the server.
+The actual image begins that many bits into the data.
+The width argument defines the width of the actual image
+and does not include left-pad.
+</para>
+<para>
+GC components: function, plane-mask, subwindow-mode, clip-x-origin,
+clip-y-origin, clip-mask
+</para>
+<para>
+GC mode-dependent components: foreground, background
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:GetImage">
+ <title>GetImage</title>
+ <indexterm zone="requests:GetImage" significance="preferred"><primary>GetImage</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>drawable</emphasis>: DRAWABLE
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>plane-mask</emphasis>: CARD32
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>format</emphasis>:
+{ <emphasis role='bold'>XYPixmap</emphasis>,
+<emphasis role='bold'>ZPixmap</emphasis>}
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+depth: CARD8
+ </entry>
+ </row>
+ <row>
+ <entry>
+visual: VISUALID or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+data: LISTofBYTE
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Drawable</emphasis>,
+<emphasis role='bold'>Match</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns the contents of the given rectangle of the drawable in the
+given format.
+The x and y coordinates are relative to the drawable's origin
+and define the upper-left corner of the rectangle.
+If
+<emphasis role='bold'>XYPixmap</emphasis>
+is specified,
+only the bit planes specified in plane-mask are transmitted,
+with the planes appearing from most significant to least significant
+in bit order.
+If
+<emphasis role='bold'>ZPixmap</emphasis>
+is specified, then bits in all planes not specified in plane-mask are
+transmitted as zero.
+Range checking is not performed on plane-mask;
+extraneous bits are simply ignored.
+The returned depth is as specified when the drawable was created
+and is the same as a depth component in a FORMAT structure (in the connection
+setup), not a bits-per-pixel component.
+If the drawable is a window,
+its visual type is returned.
+If the drawable is a pixmap,
+the visual is
+<emphasis role='bold'>None</emphasis>.
+</para>
+<para>
+If the drawable is a pixmap,
+then the given rectangle must be wholly contained within the pixmap (or a
+<emphasis role='bold'>Match</emphasis>
+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
+<emphasis role='bold'>Match</emphasis>
+error results).
+Note that the borders of the window can be included and read with this request.
+If the window has a backing store,
+then the backing-store contents are returned for regions of the window
+that are obscured by noninferior windows;
+otherwise, the returned contents of such obscured regions are undefined.
+Also undefined are the returned contents of visible
+regions of inferiors of different depth than the specified window.
+The pointer cursor image is not included in the contents returned.
+</para>
+<para>
+This request is not general-purpose in the same sense as other
+graphics-related requests.
+It is intended specifically for rudimentary hardcopy support.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:PolyText8">
+ <title>PolyText8</title>
+ <indexterm zone="requests:PolyText8" significance="preferred"><primary>PolyText8</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='3' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='1.0*'/>
+ <colspec colname='c3' colwidth='1.0*'/>
+ <spanspec spanname='all' namest='c1' nameend='c3'/>
+ <tbody>
+ <row>
+ <entry spanname='all'>
+<!-- .in +.2i -->
+<emphasis remap='I'>drawable</emphasis>: DRAWABLE
+ </entry>
+ </row>
+ <row>
+ <entry spanname='all'>
+<emphasis remap='I'>gc</emphasis>: GCONTEXT
+ </entry>
+ </row>
+ <row>
+ <entry spanname='all'>
+<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16
+ </entry>
+ </row>
+ <row>
+ <entry spanname='all'>
+<emphasis remap='I'>items</emphasis>: LISTofTEXTITEM8
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry valign='top' morerows='3'>
+<!-- .in +.2i -->
+where:
+ </entry>
+ </row>
+ <row>
+ <entry>
+TEXTITEM8:
+ </entry>
+ <entry>
+TEXTELT8 or FONT
+ </entry>
+ </row>
+ <row>
+ <entry valign='top' morerows='1'>
+TEXTELT8:
+ </entry>
+ <entry>
+[delta: INT8
+ </entry>
+ </row>
+ <row>
+ <entry>
+string: STRING8]
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry spanname='all'>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Drawable</emphasis>,
+<emphasis role='bold'>Font</emphasis>,
+<emphasis role='bold'>GContext</emphasis>,
+<emphasis role='bold'>Match</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+The x and y coordinates are relative to the drawable's origin
+and specify the baseline starting position (the initial character origin).
+Each text item is processed in turn.
+A font item causes the font to be stored in gc
+and to be used for subsequent text.
+Switching among fonts does not affect the next character origin.
+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.
+Each character image, as defined by the font in gc,
+is treated as an additional mask for a fill operation on the drawable.
+</para>
+<para>
+All contained FONTs are always transmitted most significant byte first.
+</para>
+<para>
+If a
+<emphasis role='bold'>Font</emphasis>
+error is generated for an item,
+the previous items may have been drawn.
+</para>
+<para>
+For fonts defined with 2-byte matrix indexing,
+each STRING8 byte is interpreted as a byte2 value of a CHAR2B with a byte1
+value of zero.
+</para>
+<para>
+GC components: function, plane-mask, fill-style, font,
+subwindow-mode, clip-x-origin, clip-y-origin, clip-mask
+</para>
+<para>
+GC mode-dependent components: foreground, background, tile, stipple,
+tile-stipple-x-origin, tile-stipple-y-origin
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:PolyText16">
+ <title>PolyText16</title>
+ <indexterm zone="requests:PolyText16" significance="preferred"><primary>PolyText16</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='3' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='1.0*'/>
+ <colspec colname='c3' colwidth='1.0*'/>
+ <spanspec spanname='all' namest='c1' nameend='c3'/>
+ <tbody>
+ <row>
+ <entry spanname='all'>
+<!-- .in +.2i -->
+<emphasis remap='I'>drawable</emphasis>: DRAWABLE
+ </entry>
+ </row>
+ <row>
+ <entry spanname='all'>
+<emphasis remap='I'>gc</emphasis>: GCONTEXT
+ </entry>
+ </row>
+ <row>
+ <entry spanname='all'>
+<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16
+ </entry>
+ </row>
+ <row>
+ <entry spanname='all'>
+<emphasis remap='I'>items</emphasis>: LISTofTEXTITEM16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry valign='top' morerows='3'>
+<!-- .in +.2i -->
+where:
+ </entry>
+ </row>
+ <row>
+ <entry>
+TEXTITEM16:
+ </entry>
+ <entry>
+TEXTELT16 or FONT
+ </entry>
+ </row>
+ <row>
+ <entry valign='top' morerows='1'>
+TEXTELT16:
+ </entry>
+ <entry>
+[delta: INT8
+ </entry>
+ </row>
+ <row>
+ <entry>
+string: STRING16]
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry spanname='all'>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Drawable</emphasis>,
+<emphasis role='bold'>Font</emphasis>,
+<emphasis role='bold'>GContext</emphasis>,
+<emphasis role='bold'>Match</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request is similar to
+<link linkend="requests:PolyText8"><emphasis role='bold'>PolyText8</emphasis></link>,
+except 2-byte (or 16-bit) characters are used.
+For fonts defined with linear indexing rather than 2-byte matrix indexing,
+the server will interpret each CHAR2B as a 16-bit number that
+has been transmitted most significant byte first (that is, byte1 of the
+CHAR2B is taken as the most significant byte).
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:ImageText8">
+ <title>ImageText8</title>
+ <indexterm zone="requests:ImageText8" significance="preferred"><primary>ImageText8</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>drawable</emphasis>: DRAWABLE
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>gc</emphasis>: GCONTEXT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>string</emphasis>: STRING8
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Drawable</emphasis>,
+<emphasis role='bold'>GContext</emphasis>,
+<emphasis role='bold'>Match</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+The x and y coordinates are relative to the drawable's origin
+and specify the baseline starting position (the initial character origin).
+The effect is first to fill a destination rectangle with the background
+pixel defined in gc and then to paint the text with the foreground pixel.
+The upper-left corner of the filled rectangle is at:
+<literallayout class="monospaced">
+ [x, y - font-ascent]
+</literallayout>
+</para>
+<para>
+the width is:
+<literallayout class="monospaced">
+ overall-width
+</literallayout>
+</para>
+<para>
+and the height is:
+<literallayout class="monospaced">
+ font-ascent + font-descent
+</literallayout>
+</para>
+<para>
+The overall-width, font-ascent, and font-descent are as
+they would be returned by a
+<link linkend="requests:QueryTextExtents"><emphasis role='bold'>QueryTextExtents</emphasis></link>
+call using gc and string.
+</para>
+<para>
+The function and fill-style defined in gc are ignored for this request.
+The effective function is
+<emphasis role='bold'>Copy</emphasis>,
+and the effective fill-style
+<emphasis role='bold'>Solid</emphasis>.
+</para>
+<para>
+For fonts defined with 2-byte matrix indexing,
+each STRING8 byte is interpreted as a byte2 value of a CHAR2B with a byte1
+value of zero.
+</para>
+<para>
+GC components: plane-mask, foreground, background, font,
+subwindow-mode, clip-x-origin, clip-y-origin, clip-mask
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:ImageText16">
+ <title>ImageText16</title>
+ <indexterm zone="requests:ImageText16" significance="preferred"><primary>ImageText16</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>drawable</emphasis>: DRAWABLE
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>gc</emphasis>: GCONTEXT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>string</emphasis>: STRING16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Drawable</emphasis>,
+<emphasis role='bold'>GContext</emphasis>,
+<emphasis role='bold'>Match</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request is similar to
+<link linkend="requests:ImageText8"><emphasis role='bold'>ImageText8</emphasis></link>,
+except 2-byte (or 16-bit) characters are used.
+For fonts defined with linear indexing rather than 2-byte matrix indexing,
+the server will interpret each CHAR2B as a 16-bit number that
+has been transmitted most significant byte first (that is, byte1 of the
+CHAR2B is taken as the most significant byte).
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:CreateColormap">
+ <title>CreateColormap</title>
+ <indexterm zone="requests:CreateColormap" significance="preferred"><primary>CreateColormap</primary></indexterm>
+ <indexterm zone="requests:CreateColormap"><primary>Colormap</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>mid</emphasis>: COLORMAP
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>visual</emphasis>: VISUALID
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>alloc</emphasis>:
+{ <emphasis role='bold'>None</emphasis>,
+<emphasis role='bold'>All</emphasis>}
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Alloc</emphasis>,
+<emphasis role='bold'>IDChoice</emphasis>,
+<emphasis role='bold'>Match</emphasis>,
+<emphasis role='bold'>Value</emphasis>,
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request creates a colormap of the specified visual type for the screen
+on which the window resides and associates the identifier mid with it.
+The visual type must be one supported by the screen (or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+The initial values of the colormap entries are undefined for classes
+<emphasis role='bold'>GrayScale</emphasis>,
+<emphasis role='bold'>PseudoColor</emphasis>,
+and
+<emphasis role='bold'>DirectColor</emphasis>.
+For
+<emphasis role='bold'>StaticGray</emphasis>,
+<emphasis role='bold'>StaticColor</emphasis>,
+and
+<emphasis role='bold'>TrueColor</emphasis>,
+the entries will have defined values,
+but those values are specific to the visual and are not defined
+by the core protocol.
+For
+<emphasis role='bold'>StaticGray</emphasis>,
+<emphasis role='bold'>StaticColor</emphasis>,
+and
+<emphasis role='bold'>TrueColor</emphasis>,
+alloc must be specified as
+<emphasis role='bold'>None</emphasis>
+(or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+For the other classes, if alloc is
+<emphasis role='bold'>None</emphasis>,
+the colormap initially has no allocated entries,
+and clients can allocate entries.
+</para>
+<para>
+If alloc is
+<emphasis role='bold'>All</emphasis>,
+then the entire colormap is allocated writable.
+The initial values of all allocated entries are undefined.
+For
+<emphasis role='bold'>GrayScale</emphasis>
+and
+<emphasis role='bold'>PseudoColor</emphasis>,
+the effect is as if an
+<link linkend="requests:AllocColorCells"><emphasis role='bold'>AllocColorCells</emphasis></link>
+request returned all pixel values from zero to N - 1,
+where N is the colormap-entries value in the specified visual.
+For
+<emphasis role='bold'>DirectColor</emphasis>,
+the effect is as if an
+<link linkend="requests:AllocColorPlanes"><emphasis role='bold'>AllocColorPlanes</emphasis></link>
+request 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 with
+<link linkend="requests:FreeColors"><emphasis role='bold'>FreeColors</emphasis></link>.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:FreeColormap">
+ <title>FreeColormap</title>
+ <indexterm zone="requests:FreeColormap" significance="preferred"><primary>FreeColormap</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>cmap</emphasis>: COLORMAP
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Colormap</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request deletes the association between the resource ID and the colormap
+and frees the colormap storage.
+If the colormap is an installed map for a screen,
+it is uninstalled (see
+<link linkend="requests:UninstallColormap"><emphasis role='bold'>UninstallColormap</emphasis></link>
+request).
+If the colormap is defined as the colormap for a window (by means of
+<link linkend="requests:CreateWindow"><emphasis role='bold'>CreateWindow</emphasis></link>
+or
+<link linkend="requests:ChangeWindowAttributes"><emphasis role='bold'>ChangeWindowAttributes</emphasis></link>),
+the colormap for the window is changed to
+<emphasis role='bold'>None</emphasis>,
+and a
+<link linkend="events:ColormapNotify"><emphasis role='bold'>ColormapNotify</emphasis></link>
+event is generated.
+The protocol does not define the colors displayed for a window with a colormap of
+<emphasis role='bold'>None</emphasis>.
+</para>
+<para>
+This request has no effect on a default colormap for a screen.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:CopyColormapAndFree">
+ <title>CopyColormapAndFree</title>
+ <indexterm zone="requests:CopyColormapAndFree" significance="preferred"><primary>CopyColormapAndFree</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>mid</emphasis>, <emphasis remap='I'>src-cmap</emphasis>: COLORMAP
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Alloc</emphasis>,
+<emphasis role='bold'>Colormap</emphasis>,
+<emphasis role='bold'>IDChoice</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request creates a colormap of the same visual type
+and for the same screen as src-cmap,
+and it associates identifier mid with it.
+It also moves all of the client's existing allocations from src-cmap
+to the new colormap with their color values intact
+and their read-only or writable characteristics intact,
+and it frees those entries in src-cmap.
+Color values in other entries in the new colormap are undefined.
+If src-cmap was created by the client with alloc
+<emphasis role='bold'>All</emphasis>
+(see
+<link linkend="requests:CreateColormap"><emphasis role='bold'>CreateColormap</emphasis></link>
+request),
+then the new colormap is also created with alloc
+<emphasis role='bold'>All</emphasis>,
+all color values for all entries are copied from src-cmap,
+and then all entries in src-cmap are freed.
+If src-cmap was not created by the client with alloc
+<emphasis role='bold'>All</emphasis>,
+then the allocations to be moved are all those pixels and planes that have
+been allocated by the client using either
+<link linkend="requests:AllocColor"><emphasis role='bold'>AllocColor</emphasis></link>,
+<link linkend="requests:AllocNamedColor"><emphasis role='bold'>AllocNamedColor</emphasis></link>,
+<link linkend="requests:AllocColorCells"><emphasis role='bold'>AllocColorCells</emphasis></link>,
+or
+<link linkend="requests:AllocColorPlanes"><emphasis role='bold'>AllocColorPlanes</emphasis></link>
+and that have not been freed since they were allocated.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:InstallColormap">
+ <title>InstallColormap</title>
+ <indexterm zone="requests:InstallColormap" significance="preferred"><primary>InstallColormap</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>cmap</emphasis>: COLORMAP
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Colormap</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request makes this colormap an installed map for its screen.
+All windows associated with this colormap immediately display with true colors.
+As a side effect,
+additional colormaps might be implicitly installed
+or uninstalled by the server.
+Which other colormaps get installed or uninstalled is server-dependent
+except that the required list must remain installed.
+</para>
+<para>
+If cmap is not already an installed map, a
+<link linkend="events:ColormapNotify"><emphasis role='bold'>ColormapNotify</emphasis></link>
+event is generated on every window having cmap as an attribute.
+In addition,
+for every other colormap that is installed or uninstalled as a result
+of the request, a
+<emphasis role='bold'>ColormapNotify</emphasis>
+event is generated on every window having that colormap as an attribute.
+</para>
+<para>
+At any time, there is a subset of the installed maps that are viewed as an
+ordered list and are called the required list.
+The length of the required list is at most M,
+where M is the min-installed-maps specified for the screen in the
+connection setup.
+The required list is maintained as follows.
+When a colormap is an explicit argument to
+<emphasis role='bold'>InstallColormap</emphasis>,
+it is added to the head of the list; the list is truncated at the
+tail, if necessary, to keep the length of the list to at most M.
+When a colormap is an explicit argument to
+<link linkend="requests:UninstallColormap"><emphasis role='bold'>UninstallColormap</emphasis></link>
+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 installed implicitly
+by the server, and the server cannot implicitly uninstall a colormap that is
+in the required list.
+</para>
+<para>
+Initially the default colormap for a screen is installed (but is not in
+the required list).
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:UninstallColormap">
+ <title>UninstallColormap</title>
+ <indexterm zone="requests:UninstallColormap" significance="preferred"><primary>UninstallColormap</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>cmap</emphasis>: COLORMAP
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Colormap</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+If cmap is on the required list for its screen (see
+<link linkend="requests:InstallColormap"><emphasis role='bold'>InstallColormap</emphasis></link>
+request),
+it is removed from the list.
+As a side effect,
+cmap might be uninstalled,
+and additional colormaps might be implicitly installed or uninstalled.
+Which colormaps get installed or uninstalled is server-dependent
+except that the required list must remain installed.
+</para>
+<para>
+If cmap becomes uninstalled, a
+<link linkend="events:ColormapNotify"><emphasis role='bold'>ColormapNotify</emphasis></link>
+event is generated on every window having cmap as an attribute.
+In addition,
+for every other colormap that is installed or uninstalled as a result of
+the request, a
+<emphasis role='bold'>ColormapNotify</emphasis>
+event is generated on every window having that colormap as an attribute.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:ListInstalledColormaps">
+ <title>ListInstalledColormaps</title>
+ <indexterm zone="requests:ListInstalledColormaps" significance="preferred"><primary>ListInstalledColormaps</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+cmaps: LISTofCOLORMAP
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns a list of the currently installed colormaps for the
+screen of the specified window.
+The order of colormaps is not significant,
+and there is no explicit indication of the required list (see
+<link linkend="requests:InstallColormap"><emphasis role='bold'>InstallColormap</emphasis></link>
+request).
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:AllocColor">
+ <title>AllocColor</title>
+ <indexterm zone="requests:AllocColor" significance="preferred"><primary>AllocColor</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>cmap</emphasis>: COLORMAP
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>red</emphasis>, <emphasis remap='I'>green</emphasis>, <emphasis remap='I'>blue</emphasis>: CARD16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+pixel: CARD32
+ </entry>
+ </row>
+ <row>
+ <entry>
+red, green, blue: CARD16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Alloc</emphasis>,
+<emphasis role='bold'>Colormap</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request allocates a read-only colormap entry corresponding to the closest
+RGB values provided by the hardware.
+It also returns the pixel and the RGB values actually used.
+Multiple clients requesting the same effective RGB values can be assigned
+the same read-only entry, allowing entries to be shared.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:AllocNamedColor">
+ <title>AllocNamedColor</title>
+ <indexterm zone="requests:AllocNamedColor" significance="preferred"><primary>AllocNamedColor</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>cmap</emphasis>: COLORMAP
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>name</emphasis>: STRING8
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+pixel: CARD32
+ </entry>
+ </row>
+ <row>
+ <entry>
+exact-red, exact-green, exact-blue: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+visual-red, visual-green, visual-blue: CARD16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Alloc</emphasis>,
+<emphasis role='bold'>Colormap</emphasis>,
+<emphasis role='bold'>Name</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request looks up the named color with respect to the screen associated
+with the colormap.
+Then, it does an
+<link linkend="requests:AllocColor"><emphasis role='bold'>AllocColor</emphasis></link>
+on cmap.
+The name should use the ISO Latin-1 encoding,
+and uppercase and lowercase do not matter.
+The exact RGB values specify the true values for the color,
+and the visual values specify the values actually used in the colormap.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:AllocColorCells">
+ <title>AllocColorCells</title>
+ <indexterm zone="requests:AllocColorCells" significance="preferred"><primary>AllocColorCells</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>cmap</emphasis>: COLORMAP
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>colors</emphasis>, <emphasis remap='I'>planes</emphasis>: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>contiguous</emphasis>: BOOL
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+pixels, masks: LISTofCARD32
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Alloc</emphasis>,
+<emphasis role='bold'>Colormap</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+The number of colors must be positive,
+and the number of planes must be nonnegative (or a
+<emphasis role='bold'>Value</emphasis>
+error results).
+If C colors and P planes are requested,
+then C pixels and P masks are returned.
+No mask will have any bits in common with any other mask
+or with any of the pixels.
+By ORing together masks and pixels,
+C*%2 sup P% distinct pixels can be produced;
+all of these are allocated writable by the request.
+For
+<emphasis role='bold'>GrayScale</emphasis>
+or
+<emphasis role='bold'>PseudoColor</emphasis>,
+each mask will have exactly one bit set to 1; for
+<emphasis role='bold'>DirectColor</emphasis>,
+each will have exactly three bits set to 1.
+If contiguous is
+<emphasis role='bold'>True</emphasis>
+and if all masks are ORed together,
+a single contiguous set of bits will be formed for
+<emphasis role='bold'>GrayScale</emphasis>
+or
+<emphasis role='bold'>PseudoColor</emphasis>,
+and three contiguous sets of bits (one within each pixel subfield) for
+<emphasis role='bold'>DirectColor</emphasis>.
+The RGB values of the allocated entries are undefined.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:AllocColorPlanes">
+ <title>AllocColorPlanes</title>
+ <indexterm zone="requests:AllocColorPlanes" significance="preferred"><primary>AllocColorPlanes</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>cmap</emphasis>: COLORMAP
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>colors</emphasis>, <emphasis remap='I'>reds</emphasis>, <emphasis remap='I'>greens</emphasis>, <emphasis remap='I'>blues</emphasis>: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>contiguous</emphasis>: BOOL
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+pixels: LISTofCARD32
+ </entry>
+ </row>
+ <row>
+ <entry>
+red-mask, green-mask, blue-mask: CARD32
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Alloc</emphasis>,
+<emphasis role='bold'>Colormap</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+The number of colors must be positive,
+and the reds, greens, and blues must be nonnegative (or a
+<emphasis role='bold'>Value</emphasis>
+error results).
+If C colors, R reds, G greens, and B blues are requested,
+then C pixels are returned, and the masks have R, G, and B bits set,
+respectively.
+If contiguous is
+<emphasis role='bold'>True</emphasis>,
+then each mask will have a contiguous set of bits.
+No mask will have any bits in common with any other mask
+or with any of the pixels.
+For
+<emphasis role='bold'>DirectColor</emphasis>,
+each mask will lie within the corresponding pixel subfield.
+By ORing together subsets of masks with pixels,
+C*%2 sup R+G+B% distinct pixels can be produced;
+all of these are allocated writable by the request.
+The initial RGB values of the allocated entries are undefined.
+In the colormap,
+there are only C*%2 sup R% independent red entries,
+C*%2 sup G% independent green entries,
+and C*%2 sup B% independent blue entries.
+This is true even for
+<emphasis role='bold'>PseudoColor</emphasis>.
+When the colormap entry for a pixel value is changed using
+<link linkend="requests:StoreColors"><emphasis role='bold'>StoreColors</emphasis></link>
+or
+<link linkend="requests:StoreNamedColor"><emphasis role='bold'>StoreNamedColor</emphasis></link>,
+the pixel is decomposed according to the masks and the
+corresponding independent entries are updated.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:FreeColors">
+ <title>FreeColors</title>
+ <indexterm zone="requests:FreeColors" significance="preferred"><primary>FreeColors</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>cmap</emphasis>: COLORMAP
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>pixels</emphasis>: LISTofCARD32
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>plane-mask</emphasis>: CARD32
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Access</emphasis>,
+<emphasis role='bold'>Colormap</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+The plane-mask should not have any bits in common with any of the
+pixels.
+The set of all pixels is produced by ORing together subsets of
+plane-mask with the pixels.
+The request frees all of these pixels that
+were allocated by the client (using
+<link linkend="requests:AllocColor"><emphasis role='bold'>AllocColor</emphasis></link>,
+<link linkend="requests:AllocNamedColor"><emphasis role='bold'>AllocNamedColor</emphasis></link>,
+<link linkend="requests:AllocColorCells"><emphasis role='bold'>AllocColorCells</emphasis></link>,
+and
+<link linkend="requests:AllocColorPlanes"><emphasis role='bold'>AllocColorPlanes</emphasis></link>).
+Note that freeing an
+individual pixel obtained from
+<link linkend="requests:AllocColorPlanes"><emphasis role='bold'>AllocColorPlanes</emphasis></link>
+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.
+</para>
+<para>
+All specified pixels that are allocated by the client in cmap are freed,
+even if one or more pixels produce an error.
+A
+<emphasis role='bold'>Value</emphasis>
+error is generated if a specified pixel is not a valid index into cmap.
+An
+<emphasis role='bold'>Access</emphasis>
+error is generated 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 (using an alloc
+value of
+<emphasis role='bold'>All</emphasis>
+in
+<link linkend="requests:CreateColormap"><emphasis role='bold'>CreateColormap</emphasis></link>).
+If more than one pixel is in error,
+it is arbitrary as to which pixel is reported.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:StoreColors">
+ <title>StoreColors</title>
+ <indexterm zone="requests:StoreColors" significance="preferred"><primary>StoreColors</primary></indexterm>
+
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<emphasis remap='I'>cmap</emphasis>: COLORMAP
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>items</emphasis>: LISTofCOLORITEM
+ </entry>
+ </row>
+ <row>
+ <entry>
+where:
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <para>
+ <informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='2.0*'/>
+ <tbody>
+ <row>
+ <entry>COLORITEM:</entry>
+ <entry>[pixel: CARD32</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>
+do-red, do-green, do-blue: BOOL
+ </entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>
+red, green, blue: CARD16]
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </para>
+ </entry>
+ </row>
+ <row>
+ <entry>
+Errors:
+<emphasis role='bold'>Access</emphasis>,
+<emphasis role='bold'>Colormap</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+This request changes the colormap entries of the specified pixels.
+The do-red, do-green, and do-blue fields indicate which components
+should actually be changed.
+If the colormap is an installed map for its screen,
+the changes are visible immediately.
+</para>
+<para>
+All specified pixels that are allocated writable in cmap (by any client)
+are changed, even if one or more pixels produce an error.
+A
+<emphasis role='bold'>Value</emphasis>
+error is generated if a specified pixel is not a valid index into cmap, and an
+<emphasis role='bold'>Access</emphasis>
+error is generated if a specified pixel is unallocated or is allocated
+read-only.
+If more than one pixel is in error,
+it is arbitrary as to which pixel is reported.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:StoreNamedColor">
+ <title>StoreNamedColor</title>
+ <indexterm zone="requests:StoreNamedColor" significance="preferred"><primary>StoreNamedColor</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>cmap</emphasis>: COLORMAP
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>pixel</emphasis>: CARD32
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>name</emphasis>: STRING8
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>do-red</emphasis>, <emphasis remap='I'>do-green</emphasis>, <emphasis remap='I'>do-blue</emphasis>: BOOL
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Access</emphasis>,
+<emphasis role='bold'>Colormap</emphasis>,
+<emphasis role='bold'>Name</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request looks up the named color with respect to the screen associated
+with cmap and then does a
+<link linkend="requests:StoreColors"><emphasis role='bold'>StoreColors</emphasis></link>
+in cmap.
+The name should use the ISO Latin-1 encoding,
+and uppercase and lowercase do not matter.
+The
+<emphasis role='bold'>Access</emphasis>
+and
+<emphasis role='bold'>Value</emphasis>
+errors are the same as in
+<emphasis role='bold'>StoreColors</emphasis>.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:QueryColors">
+ <title>QueryColors</title>
+ <indexterm zone="requests:QueryColors" significance="preferred"><primary>QueryColors</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>cmap</emphasis>: COLORMAP
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>pixels</emphasis>: LISTofCARD32
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+colors: LISTofRGB
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+where:
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+RGB: [red, green, blue: CARD16]
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Colormap</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns the hardware-specific color values stored in cmap for
+the specified pixels.
+The values returned for an unallocated entry are undefined.
+A
+<emphasis role='bold'>Value</emphasis>
+error is generated if a pixel is not a valid index into cmap.
+If more than one pixel is in error,
+it is arbitrary as to which pixel is reported.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:LookupColor">
+ <title>LookupColor</title>
+ <indexterm zone="requests:LookupColor" significance="preferred"><primary>LookupColor</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>cmap</emphasis>: COLORMAP
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>name</emphasis>: STRING8
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+exact-red, exact-green, exact-blue: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+visual-red, visual-green, visual-blue: CARD16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Colormap</emphasis>,
+<emphasis role='bold'>Name</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request looks up the string name of a color with respect to the screen
+associated with cmap and returns both the exact color values and
+the closest values provided by the hardware with respect to the visual
+type of cmap.
+The name should use the ISO Latin-1 encoding,
+and uppercase and lowercase do not matter.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:CreateCursor">
+ <title>CreateCursor</title>
+ <indexterm zone="requests:CreateCursor" significance="preferred"><primary>CreateCursor</primary></indexterm>
+ <indexterm zone="requests:CreateCursor"><primary>Cursor</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>cid</emphasis>: CURSOR
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>source</emphasis>: PIXMAP
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>mask</emphasis>: PIXMAP or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>fore-red</emphasis>, <emphasis remap='I'>fore-green</emphasis>, <emphasis remap='I'>fore-blue</emphasis>: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>back-red</emphasis>, <emphasis remap='I'>back-green</emphasis>, <emphasis remap='I'>back-blue</emphasis>: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: CARD16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Alloc</emphasis>,
+<emphasis role='bold'>IDChoice</emphasis>,
+<emphasis role='bold'>Match</emphasis>,
+<emphasis role='bold'>Pixmap</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request creates a cursor and associates identifier cid with it.
+The foreground and background RGB values must be specified,
+even if the server only has a
+<emphasis role='bold'>StaticGray</emphasis>
+or
+<emphasis role='bold'>GrayScale</emphasis>
+screen.
+The foreground is used for the bits set to 1 in the source,
+and the background is used for the bits set to 0.
+Both source and mask (if specified) must have depth one (or a
+<emphasis role='bold'>Match</emphasis>
+error results), but they can have any root.
+The mask pixmap defines the shape of the cursor.
+That is,
+the bits set to 1 in the mask define which source pixels will be displayed,
+and where the mask has bits set to 0,
+the corresponding bits of the source pixmap 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 source (or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+The x and y coordinates define the hotspot relative to the source's origin
+and must be a point within the source (or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+</para>
+<para>
+The components of the cursor may be transformed arbitrarily to meet
+display limitations.
+</para>
+<para>
+The pixmaps can be freed immediately if no further explicit references
+to them are to be made.
+</para>
+<para>
+Subsequent drawing in the source or mask pixmap has an undefined effect
+on the cursor.
+The server might or might not make a copy of the pixmap.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:CreateGlyphCursor">
+ <title>CreateGlyphCursor</title>
+ <indexterm zone="requests:CreateGlyphCursor" significance="preferred"><primary>CreateGlyphCursor</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>cid</emphasis>: CURSOR
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>source-font</emphasis>: FONT
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>mask-font</emphasis>: FONT or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>source-char</emphasis>, <emphasis remap='I'>mask-char</emphasis>: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>fore-red</emphasis>, <emphasis remap='I'>fore-green</emphasis>, <emphasis remap='I'>fore-blue</emphasis>: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>back-red</emphasis>, <emphasis remap='I'>back-green</emphasis>, <emphasis remap='I'>back-blue</emphasis>: CARD16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Alloc</emphasis>,
+<emphasis role='bold'>Font</emphasis>,
+<emphasis role='bold'>IDChoice</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request is similar to
+<link linkend="requests:CreateCursor"><emphasis role='bold'>CreateCursor</emphasis></link>,
+except the source and mask bitmaps are obtained from the specified font glyphs.
+The source-char must be a defined glyph in source-font,
+and if mask-font is given, mask-char must be a defined glyph in mask-font
+(or a
+<emphasis role='bold'>Value</emphasis>
+error results).
+The mask font and character are optional.
+The origins of the source and mask (if it is defined) glyphs
+are positioned coincidently and define the hotspot.
+The source and mask 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 is given,
+all pixels of the source are displayed.
+Note that source-char and mask-char are CARD16, not CHAR2B.
+For 2-byte matrix fonts,
+the 16-bit value should be formed with byte1 in the most significant byte
+and byte2 in the least significant byte.
+</para>
+<para>
+The components of the cursor may be transformed arbitrarily to meet
+display limitations.
+</para>
+<para>
+The fonts can be freed immediately if no further explicit references to
+them are to be made.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:FreeCursor">
+ <title>FreeCursor</title>
+ <indexterm zone="requests:FreeCursor" significance="preferred"><primary>FreeCursor</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>cursor</emphasis>: CURSOR
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Cursor</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request deletes the association between the resource ID and the cursor.
+The cursor storage will be freed when no other resource references it.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:RecolorCursor">
+ <title>RecolorCursor</title>
+ <indexterm zone="requests:RecolorCursor" significance="preferred"><primary>RecolorCursor</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>cursor</emphasis>: CURSOR
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>fore-red</emphasis>, <emphasis remap='I'>fore-green</emphasis>, <emphasis remap='I'>fore-blue</emphasis>: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>back-red</emphasis>, <emphasis remap='I'>back-green</emphasis>, <emphasis remap='I'>back-blue</emphasis>: CARD16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Cursor</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request changes the color of a cursor.
+If the cursor is being displayed on a screen,
+the change is visible immediately.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:QueryBestSize">
+ <title>QueryBestSize</title>
+ <indexterm zone="requests:QueryBestSize" significance="preferred"><primary>QueryBestSize</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>class</emphasis>:
+{ <emphasis role='bold'>Cursor</emphasis>,
+<emphasis role='bold'>Tile</emphasis>,
+<emphasis role='bold'>Stipple</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>drawable</emphasis>: DRAWABLE
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>: CARD16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+width, height: CARD16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Drawable</emphasis>,
+<emphasis role='bold'>Match</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns the best size that is closest to the argument size.
+For
+<emphasis role='bold'>Cursor</emphasis>,
+this is the largest size that can be fully displayed.
+For
+<emphasis role='bold'>Tile</emphasis>,
+this is the size that can be tiled fastest.
+For
+<emphasis role='bold'>Stipple</emphasis>,
+this is the size that can be stippled fastest.
+</para>
+<para>
+For
+<emphasis role='bold'>Cursor</emphasis>,
+the drawable indicates the desired screen.
+For
+<emphasis role='bold'>Tile</emphasis>
+and
+<emphasis role='bold'>Stipple</emphasis>,
+the drawable indicates the screen and also possibly the window class and depth.
+An
+<emphasis role='bold'>InputOnly</emphasis>
+window cannot be used as the drawable for
+<emphasis role='bold'>Tile</emphasis>
+or
+<emphasis role='bold'>Stipple</emphasis>
+(or a
+<emphasis role='bold'>Match</emphasis>
+error results).
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:QueryExtension">
+ <title>QueryExtension</title>
+ <indexterm zone="requests:QueryExtension" significance="preferred"><primary>QueryExtension</primary></indexterm>
+ <indexterm zone="requests:QueryExtension"><primary>Extension</primary><secondary>querying</secondary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>name</emphasis>: STRING8
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+present: BOOL
+ </entry>
+ </row>
+ <row>
+ <entry>
+major-opcode: CARD8
+ </entry>
+ </row>
+ <row>
+ <entry>
+first-event: CARD8
+ </entry>
+ </row>
+ <row>
+ <entry>
+first-error: CARD8
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request determines if the named extension is present.
+If so,
+the major opcode for the extension is returned, if it has one.
+Otherwise, zero is returned.
+Any minor opcode and the request formats are specific to the extension.
+If the extension involves additional event types,
+the base event type code is returned.
+Otherwise, zero is returned.
+The format of the events is specific to the extension.
+If the extension involves additional error codes,
+the base error code is returned.
+Otherwise, zero is returned.
+The format of additional data in the errors is specific to the extension.
+</para>
+<para>
+The extension name should use the ISO Latin-1 encoding,
+and uppercase and lowercase matter.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:ListExtensions">
+ <title>ListExtensions</title>
+ <indexterm zone="requests:ListExtensions" significance="preferred"><primary>ListExtensions</primary></indexterm>
+ <indexterm zone="requests:ListExtensions"><primary>Extension</primary><secondary>listing</secondary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+names: LISTofSTRING8
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns a list of all extensions supported by the server.
+</para>
+ </section>
+ <section id="requests:SetModifierMapping">
+ <title>SetModifierMapping</title>
+ <indexterm zone="requests:SetModifierMapping" significance="preferred"><primary>SetModifierMapping</primary></indexterm>
+ <indexterm zone="requests:SetModifierMapping"><primary>Modifier keys</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>keycodes-per-modifier</emphasis>: CARD8
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>keycodes</emphasis>: LISTofKEYCODE
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+status:
+{ <emphasis role='bold'>Success</emphasis>,
+<emphasis role='bold'>Busy</emphasis>,
+<emphasis role='bold'>Failed</emphasis>}
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Alloc</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request specifies the keycodes (if any) of the keys to be used as
+modifiers.
+The number of keycodes in the list must be 8*keycodes-per-modifier (or a
+<emphasis role='bold'>Length</emphasis>
+error results).
+The keycodes are divided into eight sets,
+with each set containing keycodes-per-modifier elements.
+The sets are assigned to the modifiers
+<emphasis role='bold'>Shift</emphasis>,
+<emphasis role='bold'>Lock</emphasis>,
+<emphasis role='bold'>Control</emphasis>,
+<emphasis role='bold'>Mod1</emphasis>,
+<emphasis role='bold'>Mod2</emphasis>,
+<emphasis role='bold'>Mod3</emphasis>,
+<emphasis role='bold'>Mod4</emphasis>,
+and
+<emphasis role='bold'>Mod5</emphasis>,
+in order.
+Only nonzero keycode values are used within each set;
+zero values are ignored.
+All of the nonzero keycodes must be in the range specified by min-keycode
+and max-keycode in the connection setup (or a
+<emphasis role='bold'>Value</emphasis>
+error results).
+The order of keycodes within a set does not matter.
+If no nonzero values are specified in a set,
+the use of the corresponding modifier is disabled,
+and the modifier bit will always be zero.
+Otherwise, the modifier bit will be one whenever
+at least one of the keys in the corresponding set is in the down
+position.
+</para>
+<para>
+A 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 keys per modifier are not supported).
+The status reply is
+<emphasis role='bold'>Failed</emphasis>
+if some such restriction is violated,
+and none of the modifiers is changed.
+</para>
+<para>
+If the new nonzero keycodes specified for a modifier differ from those
+currently defined and any (current or new) keys for that modifier are
+logically in the down state, then the status reply is
+<emphasis role='bold'>Busy</emphasis>,
+and none of the modifiers is changed.
+</para>
+<para>
+This request generates a
+<link linkend="events:MappingNotify"><emphasis role='bold'>MappingNotify</emphasis></link>
+event on a
+<emphasis role='bold'>Success</emphasis>
+status.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:GetModifierMapping">
+ <title>GetModifierMapping</title>
+ <indexterm zone="requests:GetModifierMapping" significance="preferred"><primary>GetModifierMapping</primary></indexterm>
+ <indexterm zone="requests:GetModifierMapping"><primary>Modifier keys</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+keycodes-per-modifier: CARD8
+ </entry>
+ </row>
+ <row>
+ <entry>
+keycodes: LISTofKEYCODE
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns the keycodes of the keys being used as modifiers.
+The number of keycodes in the list is 8*keycodes-per-modifier.
+The keycodes are divided into eight sets,
+with each set containing keycodes-per-modifier elements.
+The sets are assigned to the modifiers
+<emphasis role='bold'>Shift</emphasis>,
+<emphasis role='bold'>Lock</emphasis>,
+<emphasis role='bold'>Control</emphasis>,
+<emphasis role='bold'>Mod1</emphasis>,
+<emphasis role='bold'>Mod2</emphasis>,
+<emphasis role='bold'>Mod3</emphasis>,
+<emphasis role='bold'>Mod4</emphasis>,
+and
+<emphasis role='bold'>Mod5</emphasis>,
+in order.
+The keycodes-per-modifier value is chosen arbitrarily by the server;
+zeroes are used to fill in unused elements within each set.
+If only zero values are given in a set,
+the use of the corresponding modifier has been disabled.
+The order of keycodes within each set is chosen arbitrarily by the server.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:ChangeKeyboardMapping">
+ <title>ChangeKeyboardMapping</title>
+ <indexterm zone="requests:ChangeKeyboardMapping" significance="preferred"><primary>ChangeKeyboardMapping</primary></indexterm>
+ <indexterm zone="requests:ChangeKeyboardMapping"><primary>Keysym</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>first-keycode</emphasis>: KEYCODE
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>keysyms-per-keycode</emphasis>: CARD8
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>keysyms</emphasis>: LISTofKEYSYM
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Alloc</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request defines the symbols for the specified number of keycodes,
+starting with the specified keycode.
+The symbols for keycodes outside this range remained unchanged.
+The number of elements in the keysyms list must be a multiple of
+keysyms-per-keycode (or a
+<emphasis role='bold'>Length</emphasis>
+error results).
+The first-keycode must be greater than or equal to min-keycode as returned
+in the connection setup (or a
+<emphasis role='bold'>Value</emphasis>
+error results) and:
+<literallayout class="monospaced">
+ first-keycode + (keysyms-length / keysyms-per-keycode) - 1
+</literallayout>
+</para>
+<para>
+must be less than or equal to max-keycode as returned in the connection
+setup (or a
+<emphasis role='bold'>Value</emphasis>
+error results).
+KEYSYM number N (counting from zero) for keycode K has an index
+(counting from zero) of:
+<literallayout class="monospaced">
+ (K - first-keycode) * keysyms-per-keycode + N
+</literallayout>
+</para>
+<para>
+in keysyms.
+The keysyms-per-keycode can be chosen arbitrarily by the client
+to be large enough to hold all desired symbols.
+A special KEYSYM value of
+<keysym>NoSymbol</keysym>
+should be used to fill in unused elements for individual keycodes.
+It is legal for
+<keysym>NoSymbol</keysym>
+to appear in nontrailing positions of the effective list for a keycode.
+</para>
+<para>
+This request generates a
+<link linkend="events:MappingNotify"><emphasis role='bold'>MappingNotify</emphasis></link>
+event.
+</para>
+<para>
+There is no requirement that the server interpret this mapping;
+it is merely stored for reading and writing by clients
+(see <link linkend='Keyboards'>section 5</link>).
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:GetKeyboardMapping">
+ <title>GetKeyboardMapping</title>
+ <indexterm zone="requests:GetKeyboardMapping" significance="preferred"><primary>GetKeyboardMapping</primary></indexterm>
+ <indexterm zone="requests:GetKeyboardMapping"><primary>Keysym</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>first-keycode</emphasis>: KEYCODE
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>count</emphasis>: CARD8
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+keysyms-per-keycode: CARD8
+ </entry>
+ </row>
+ <row>
+ <entry>
+keysyms: LISTofKEYSYM
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns the symbols for the specified number of keycodes,
+starting with the specified keycode.
+The first-keycode must be greater than or equal to
+min-keycode as returned in the connection setup (or a
+<emphasis role='bold'>Value</emphasis>
+error results), and:
+<literallayout class="monospaced">
+ first-keycode + count - 1
+</literallayout>
+</para>
+<para>
+must be less than or equal to max-keycode as returned in the connection setup
+(or a
+<emphasis role='bold'>Value</emphasis>
+error results).
+The number of elements in the keysyms list is:
+<literallayout class="monospaced">
+ count * keysyms-per-keycode
+</literallayout>
+</para>
+<para>
+and KEYSYM number N (counting from zero) for keycode K has an index
+(counting from zero) of:
+<literallayout class="monospaced">
+ (K - first-keycode) * keysyms-per-keycode + N
+</literallayout>
+</para>
+<para>
+in keysyms.
+The keysyms-per-keycode value is chosen arbitrarily by the server
+to be large enough to report all requested symbols.
+A special KEYSYM value of
+<keysym>NoSymbol</keysym>
+is used to fill in unused elements for individual keycodes.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:ChangeKeyboardControl">
+ <title>ChangeKeyboardControl</title>
+ <indexterm zone="requests:ChangeKeyboardControl" significance="preferred"><primary>ChangeKeyboardControl</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>value-mask</emphasis>: BITMASK
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>value-list</emphasis>: LISTofVALUE
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+Errors:
+<emphasis role='bold'>Match</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+This request controls various aspects of the keyboard.
+The value-mask and value-list specify which controls are to be changed.
+The possible values are:
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='2.0*'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Control</entry>
+ <entry>Type</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>key-click-percent</entry>
+ <entry>INT8</entry>
+ </row>
+ <row>
+ <entry>bell-percent</entry>
+ <entry>INT8</entry>
+ </row>
+ <row>
+ <entry>bell-pitch</entry>
+ <entry>INT16</entry>
+ </row>
+ <row>
+ <entry>bell-duration</entry>
+ <entry>INT16</entry>
+ </row>
+ <row>
+ <entry>led</entry>
+ <entry>CARD8</entry>
+ </row>
+ <row>
+ <entry>led-mode</entry>
+ <entry>
+{ <emphasis role='bold'>On</emphasis>,
+<emphasis role='bold'>Off</emphasis> }
+ </entry>
+ </row>
+ <row>
+ <entry>key </entry>
+ <entry>KEYCODE</entry>
+ </row>
+ <row>
+ <entry>auto-repeat-mode</entry>
+ <entry>
+{ <emphasis role='bold'>On</emphasis>,
+<emphasis role='bold'>Off</emphasis>,
+<emphasis role='bold'>Default</emphasis> }
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The key-click-percent sets the volume for key clicks between 0 (off) and
+100 (loud) inclusive, if possible.
+Setting to -1 restores the default.
+Other negative values generate a
+<emphasis role='bold'>Value</emphasis>
+error.
+</para>
+<para>
+The bell-percent sets the base volume for the bell between 0 (off) and 100
+(loud) inclusive, if possible.
+Setting to -1 restores the default.
+Other negative values generate a
+<emphasis role='bold'>Value</emphasis>
+error.
+</para>
+<para>
+The bell-pitch sets the pitch (specified in Hz) of the bell, if possible.
+Setting to -1 restores the default.
+Other negative values generate a
+<emphasis role='bold'>Value</emphasis>
+error.
+</para>
+<para>
+The bell-duration sets the duration of the bell (specified in milliseconds),
+if possible.
+Setting to -1 restores the default.
+Other negative values generate a
+<emphasis role='bold'>Value</emphasis>
+error.
+</para>
+<para>
+If both led-mode and led are specified,
+then the state of that LED is changed, if possible.
+If only led-mode is specified,
+then 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.
+It is a
+<emphasis role='bold'>Match</emphasis>
+error if an led is specified without an led-mode.
+</para>
+<para>
+If both auto-repeat-mode and key are specified,
+then the auto-repeat mode of that key is changed, if possible.
+If only auto-repeat-mode is specified,
+then the global auto-repeat mode for the entire keyboard is changed,
+if possible, without affecting the per-key settings.
+It is a
+<emphasis role='bold'>Match</emphasis>
+error if a key is specified without an auto-repeat-mode.
+Each key has an individual mode of whether or not it should auto-repeat
+and a default setting for that 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 the global mode is
+<emphasis role='bold'>On</emphasis>,
+keys should obey their individual auto-repeat modes.
+When the global mode is
+<emphasis role='bold'>Off</emphasis>,
+no keys should auto-repeat.
+An auto-repeating key generates alternating
+<link linkend="events:KeyPress"><emphasis role='bold'>KeyPress</emphasis></link>
+and
+<link linkend="events:KeyRelease"><emphasis role='bold'>KeyRelease</emphasis></link>
+events.
+When a key is used as a modifier,
+it is desirable for the key not to auto-repeat,
+regardless of the auto-repeat setting for that key.
+</para>
+<para>
+A bell generator connected with the console but not directly on the
+keyboard is treated as if it were part of the keyboard.
+</para>
+<para>
+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.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:GetKeyboardControl">
+ <title>GetKeyboardControl</title>
+ <indexterm zone="requests:GetKeyboardControl" significance="preferred"><primary>GetKeyboardControl</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+key-click-percent: CARD8
+ </entry>
+ </row>
+ <row>
+ <entry>
+bell-percent: CARD8
+ </entry>
+ </row>
+ <row>
+ <entry>
+bell-pitch: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+bell-duration: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+led-mask: CARD32
+ </entry>
+ </row>
+ <row>
+ <entry>
+global-auto-repeat:
+{ <emphasis role='bold'>On</emphasis>,
+<emphasis role='bold'>Off</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+auto-repeats: LISTofCARD8
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns the current control values for the keyboard.
+For the LEDs,
+the least significant bit of led-mask corresponds to LED one,
+and each one bit in led-mask indicates an LED that is lit.
+The auto-repeats is a bit vector;
+each one bit 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.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:Bell">
+ <title>Bell</title>
+ <indexterm zone="requests:Bell" significance="preferred"><primary>Bell</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>percent</emphasis>: INT8
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request rings the bell on the keyboard at a volume relative to the
+base volume for the keyboard, if possible.
+Percent can range from -100 to 100 inclusive (or a
+<emphasis role='bold'>Value</emphasis>
+error results).
+The volume at which the bell is rung when percent is nonnegative is:
+<literallayout class="monospaced">
+ base - [(base * percent) / 100] + percent
+</literallayout>
+</para>
+<para>
+When percent is negative, it is:
+<literallayout class="monospaced">
+ base + [(base * percent) / 100]
+</literallayout>
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:SetPointerMapping">
+ <title>SetPointerMapping</title>
+ <indexterm zone="requests:SetPointerMapping" significance="preferred"><primary>SetPointerMapping</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>map</emphasis>: LISTofCARD8
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+status:
+{ <emphasis role='bold'>Success</emphasis>,
+<emphasis role='bold'>Busy</emphasis>}
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request sets the mapping of the pointer.
+Elements of the list are indexed starting from one.
+The length of the list must be the same as
+<link linkend="requests:GetPointerMapping"><emphasis role='bold'>GetPointerMapping</emphasis></link>
+would return (or a
+<emphasis role='bold'>Value</emphasis>
+error results).
+The index is a core button number,
+and the element of the list defines the effective number.
+</para>
+<para>
+A zero element disables a button.
+Elements are not restricted in value by the number of physical buttons,
+but no two elements can have the same nonzero value (or a
+<emphasis role='bold'>Value</emphasis>
+error results).
+</para>
+<para>
+If any of the buttons to be altered are logically in the down state,
+the status reply is
+<emphasis role='bold'>Busy</emphasis>,
+and the mapping is not changed.
+</para>
+<para>
+This request generates a
+<link linkend="events:MappingNotify"><emphasis role='bold'>MappingNotify</emphasis></link>
+event on a
+<emphasis role='bold'>Success</emphasis>
+status.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:GetPointerMapping">
+ <title>GetPointerMapping</title>
+ <indexterm zone="requests:GetPointerMapping" significance="preferred"><primary>GetPointerMapping</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+map: LISTofCARD8
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns the current mapping of the pointer.
+Elements of the list are indexed starting from one.
+The length of the list indicates the number of physical buttons.
+</para>
+<para>
+The nominal mapping for a pointer is the identity mapping: map[i]=i.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:ChangePointerControl">
+ <title>ChangePointerControl</title>
+ <indexterm zone="requests:ChangePointerControl" significance="preferred"><primary>ChangePointerControl</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>do-acceleration</emphasis>, <emphasis remap='I'>do-threshold</emphasis>: BOOL
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>acceleration-numerator</emphasis>, <emphasis remap='I'>acceleration-denominator</emphasis>: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>threshold</emphasis>: INT16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request defines how the pointer moves.
+The acceleration is a multiplier for movement expressed as a fraction.
+For example,
+specifying 3/1 means the pointer moves three times as fast as normal.
+The fraction can be rounded arbitrarily by the server.
+Acceleration only takes effect if the pointer moves more than threshold
+number of pixels at once and only applies to the amount beyond the threshold.
+Setting a value to -1 restores the default.
+Other negative values generate a
+<emphasis role='bold'>Value</emphasis>
+error, as does a zero value for acceleration-denominator.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:GetPointerControl">
+ <title>GetPointerControl</title>
+ <indexterm zone="requests:GetPointerControl" significance="preferred"><primary>GetPointerControl</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+acceleration-numerator, acceleration-denominator: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+threshold: CARD16
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns the current acceleration and threshold for the pointer.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:SetScreenSaver">
+ <title>SetScreenSaver</title>
+ <indexterm zone="requests:SetScreenSaver" significance="preferred"><primary>SetScreenSaver</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>timeout</emphasis>, <emphasis remap='I'>interval</emphasis>: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>prefer-blanking</emphasis>:
+{ <emphasis role='bold'>Yes</emphasis>,
+<emphasis role='bold'>No</emphasis>,
+<emphasis role='bold'>Default</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>allow-exposures</emphasis>:
+{ <emphasis role='bold'>Yes</emphasis>,
+<emphasis role='bold'>No</emphasis>,
+<emphasis role='bold'>Default</emphasis>}
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+The timeout and interval are specified in seconds;
+setting a value to -1 restores the default.
+Other negative values generate a
+<emphasis role='bold'>Value</emphasis>
+error.
+If the timeout value is zero,
+screen-saver is disabled (but an activated screen-saver is not deactivated).
+If the timeout value is nonzero,
+screen-saver is enabled.
+Once screen-saver is enabled,
+if no input from the keyboard or pointer is generated for timeout seconds,
+screen-saver is activated.
+For each screen,
+if blanking is preferred and the hardware supports video blanking,
+the screen will simply go blank.
+Otherwise,
+if either exposures are allowed or the screen can be regenerated without
+sending exposure events to clients,
+the screen is changed in a server-dependent fashion to avoid phosphor burn.
+Otherwise,
+the state of the screens does not change, and screen-saver is not activated.
+At the next keyboard or pointer input or at the next
+<link linkend="requests:ForceScreenSaver"><emphasis role='bold'>ForceScreenSaver</emphasis></link>
+with mode
+<emphasis role='bold'>Reset</emphasis>,
+screen-saver is deactivated, and all screen states are restored.
+</para>
+<para>
+If the server-dependent screen-saver method is amenable to periodic change,
+interval serves as a hint about how long the change period should be,
+with zero hinting that no periodic change should be made.
+Examples of ways to change the screen include scrambling the color map
+periodically, moving an icon image about the screen periodically, or
+tiling the screen with the root window background tile,
+randomly reorigined periodically.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:GetScreenSaver">
+ <title>GetScreenSaver</title>
+ <indexterm zone="requests:GetScreenSaver" significance="preferred"><primary>GetScreenSaver</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+timeout, interval: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+prefer-blanking:
+{ <emphasis role='bold'>Yes</emphasis>,
+<emphasis role='bold'>No</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+allow-exposures:
+{ <emphasis role='bold'>Yes</emphasis>,
+<emphasis role='bold'>No</emphasis>}
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns the current screen-saver control values.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:ForceScreenSaver">
+ <title>ForceScreenSaver</title>
+ <indexterm zone="requests:ForceScreenSaver" significance="preferred"><primary>ForceScreenSaver</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>mode</emphasis>:
+{ <emphasis role='bold'>Activate</emphasis>,
+<emphasis role='bold'>Reset</emphasis>}
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+If the mode is
+<emphasis role='bold'>Activate</emphasis>
+and screen-saver is currently deactivated,
+then screen-saver is activated (even if screen-saver has been disabled with
+a timeout value of zero).
+If the mode is
+<emphasis role='bold'>Reset</emphasis>
+and screen-saver is currently enabled,
+then screen-saver is deactivated (if it was activated),
+and the activation timer is reset to its initial state
+as if device input had just been received.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:ChangeHosts">
+ <title>ChangeHosts</title>
+ <indexterm zone="requests:ChangeHosts" significance="preferred"><primary>ChangeHosts</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>mode</emphasis>:
+{ <emphasis role='bold'>Insert</emphasis>,
+<emphasis role='bold'>Delete</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>host</emphasis>: HOST
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Access</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request adds or removes the specified host from the access control list.
+<indexterm zone="requests:ChangeHosts"><primary>Access control list</primary></indexterm>
+When the access control mechanism is enabled and a client attempts to
+establish a connection to the server,
+the host on which the client resides must be in the access control list,
+or the client must have been granted permission by a server-dependent
+method, or the server will refuse the connection.
+</para>
+<para>
+The client must reside on the same host as the server and/or have been granted
+permission by a server-dependent method to execute this request (or an
+<emphasis role='bold'>Access</emphasis>
+error results).
+</para>
+<para>
+An initial access control list can usually be specified,
+typically by naming a file that the server reads at startup and reset.
+</para>
+<para id="address_families">
+The following address families are defined.
+<indexterm zone="address_families"><primary>Types</primary><secondary>HOST</secondary></indexterm>
+A server is not required to support these families
+and may support families not listed here.
+Use of an unsupported family, an improper address format,
+or an improper address length within a supported family results in a
+<emphasis role='bold'>Value</emphasis>
+error.
+</para>
+<para>
+For the Internet family,
+the address must be four bytes long.
+The address bytes are in standard IP order;
+the server performs no automatic swapping on the address bytes.
+The Internet family supports IP version 4 addresses only.
+</para>
+<para>
+For the InternetV6 family, the address must be sixteen bytes
+long. The address bytes are in standard IP order; the
+server performs no automatic swapping on the address bytes.
+The InternetV6 family supports IP version 6 addresses only.
+</para>
+<para>
+For the DECnet family,
+the server performs no automatic swapping on the address bytes.
+A Phase IV address is two bytes long:
+the first byte contains the least significant eight bits of the node number,
+and the second byte contains the most significant two bits of the node number in
+the least significant two bits of the byte and the area in the most
+significant six bits of the byte.
+</para>
+<para>
+For the Chaos family,
+the address must be two bytes long.
+The host number is always the first byte in the address,
+and the subnet number is always the second byte.
+The server performs no automatic swapping on the address bytes.
+</para>
+<para>
+For the ServerInterpreted family, the address may be of any
+length up to 65535 bytes. The address consists of two strings
+of ASCII characters, separated by a byte with a value of 0.
+The first string represents the type of address, and the second
+string contains the address value. Address types and the syntax
+for their associated values will be registered via the X.Org Registry.
+Implementors who wish to add implementation specific types may register
+a unique prefix with the X.Org registry to prevent namespace
+collisions.
+</para>
+<para>
+Use of a host address in the ChangeHosts request is deprecated. It is
+only useful when a host has a unique, constant address, a requirement
+that is increasingly unmet as sites adopt dynamically assigned
+addresses, network address translation gateways, IPv6 link local
+addresses, and various other technologies. It also assumes all users of
+a host share equivalent access rights, and as such has never been
+suitable for many multi-user machine environments. Instead, more
+secure forms of authentication, such as those based on shared secrets
+or public key encryption, are recommended.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:ListHosts">
+ <title>ListHosts</title>
+ <indexterm zone="requests:ListHosts" significance="preferred"><primary>ListHosts</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ ▶
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+mode:
+{ <emphasis role='bold'>Enabled</emphasis>,
+<emphasis role='bold'>Disabled</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+hosts: LISTofHOST
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request returns the hosts on the access control list
+and whether use of the list at connection setup is currently
+enabled or disabled.
+</para>
+<para>
+Each HOST is padded to a multiple of four bytes.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:SetAccessControl">
+ <title>SetAccessControl</title>
+ <indexterm zone="requests:SetAccessControl" significance="preferred"><primary>SetAccessControl</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>mode</emphasis>:
+{ <emphasis role='bold'>Enable</emphasis>,
+<emphasis role='bold'>Disable</emphasis>}
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Access</emphasis>,
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request enables or disables the use of the access control list
+at connection setups.
+</para>
+<para>
+The client must reside on the same host as the server
+and/or have been granted permission by a server-dependent method
+to execute this request (or an
+<emphasis role='bold'>Access</emphasis>
+error results).
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:SetCloseDownMode">
+ <title>SetCloseDownMode</title>
+ <indexterm zone="requests:SetCloseDownMode" significance="preferred"><primary>SetCloseDownMode</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>mode</emphasis>:
+{ <emphasis role='bold'>Destroy</emphasis>,
+<emphasis role='bold'>RetainPermanent</emphasis>,
+<emphasis role='bold'>RetainTemporary</emphasis>}
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request defines what will happen to the client's resources
+at connection close.
+A connection starts in
+<emphasis role='bold'>Destroy</emphasis>
+mode.
+The meaning of the close-down mode is described
+in <link linkend='Connection_Close'>section 10</link>.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:KillClient">
+ <title>KillClient</title>
+ <indexterm zone="requests:KillClient" significance="preferred"><primary>KillClient</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>resource</emphasis>: CARD32 or
+<emphasis role='bold'>AllTemporary</emphasis>
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Value</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+If a valid resource is specified,
+<link linkend="requests:KillClient"><emphasis role='bold'>KillClient</emphasis></link>
+forces a close-down of the client that created the resource.
+If the client has already terminated in either
+<emphasis role='bold'>RetainPermanent</emphasis>
+or
+<emphasis role='bold'>RetainTemporary</emphasis>
+mode, all of the client's resources are destroyed
+(see <link linkend='Connection_Close'>section 10</link>).
+If
+<emphasis role='bold'>AllTemporary</emphasis>
+is specified,
+then the resources of all clients that have terminated in
+<emphasis role='bold'>RetainTemporary</emphasis>
+are destroyed.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="requests:NoOperation">
+ <title>NoOperation</title>
+ <indexterm zone="requests:NoOperation" significance="preferred"><primary>NoOperation</primary></indexterm>
+<para>
+This request has no arguments and no results,
+but the request length field
+allows the request to be any multiple of four bytes in length.
+The bytes contained in the request are uninterpreted by the server.
+</para>
+<para>
+This request can be used in its minimum four byte form as padding where
+necessary by client libraries that find it convenient to force requests
+to begin on 64-bit boundaries.
+</para>
+ </section>
+</chapter>
+
+<chapter id='Connection_Close'>
+<title>Connection Close</title>
+ <indexterm zone="Connection_Close"><primary>Connection</primary><secondary>closing</secondary></indexterm>
+<!-- .XS -->
+<!-- \*(SN Connection Close -->
+<!-- .XE -->
+<para>
+At connection close,
+all event selections made by the client are discarded.
+If the client has the pointer actively grabbed, an
+<link linkend="requests:UngrabPointer"><emphasis role='bold'>UngrabPointer</emphasis></link>
+is performed.
+If the client has the keyboard actively grabbed, an
+<link linkend="requests:UngrabKeyboard"><emphasis role='bold'>UngrabKeyboard</emphasis></link>
+is performed.
+All passive grabs by the client are released.
+If the client has the server grabbed, an
+<link linkend="requests:UngrabServer"><emphasis role='bold'>UngrabServer</emphasis></link>
+is performed.
+All selections (see
+<link linkend="requests:SetSelectionOwner"><emphasis role='bold'>SetSelectionOwner</emphasis></link>
+request)
+owned by the client are disowned.
+If close-down mode (see
+<link linkend="requests:SetCloseDownMode"><emphasis role='bold'>SetCloseDownMode</emphasis></link>
+request) is
+<emphasis role='bold'>RetainPermanent</emphasis>
+or
+<emphasis role='bold'>RetainTemporary</emphasis>,
+then all resources (including colormap entries)
+allocated by the client are marked as permanent or temporary,
+respectively (but this does not prevent other clients from explicitly
+destroying them).
+If the mode is
+<emphasis role='bold'>Destroy</emphasis>,
+all of the client's resources are destroyed.
+</para>
+<para>
+When a client's resources are destroyed,
+for each window in the client's save-set,
+if the window is an inferior of a window created by the client,
+the save-set window is reparented to the closest ancestor such that
+the save-set window is not an inferior of a window created by the client.
+If the save-set window is unmapped, a
+<link linkend="requests:MapWindow"><emphasis role='bold'>MapWindow</emphasis></link>
+request is performed on it (even if it was 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.
+After save-set processing,
+all windows created by the client are destroyed.
+For each nonwindow resource created by the client,
+the appropriate
+<emphasis role='bold'>Free</emphasis>
+request is performed.
+All colors and colormap entries allocated by the client are freed.
+</para>
+<para>
+A server goes through a cycle of having no connections and having some
+connections.
+At every transition to the state of having no connections
+as a result of a connection closing with a
+<emphasis role='bold'>Destroy</emphasis>
+close-down mode,
+the server resets its state as if it had just been started.
+This starts by destroying all lingering resources from clients
+that have terminated in
+<emphasis role='bold'>RetainPermanent</emphasis>
+or
+<emphasis role='bold'>RetainTemporary</emphasis>
+mode.
+It additionally includes deleting all but the predefined atom identifiers,
+deleting all properties on all root windows, resetting all device maps and
+attributes (key click, bell volume, acceleration), resetting the access
+control list, restoring the standard root tiles and cursors, restoring
+the default font path, and restoring the input focus to state
+<emphasis role='bold'>PointerRoot</emphasis>.
+</para>
+<para>
+Note that closing a connection with a close-down mode of
+<emphasis role='bold'>RetainPermanent</emphasis>
+or
+<emphasis role='bold'>RetainTemporary</emphasis>
+will not cause the server to reset.
+</para>
+</chapter>
+<!-- .NH 1 -->
+<chapter id='Events'>
+<title>Events</title>
+<!-- .XS -->
+<!-- \*(SN Events -->
+<!-- .XE -->
+<para>
+<indexterm zone="Events"><primary>Event</primary></indexterm>
+When a button press is processed with the pointer in some window W
+and no active pointer grab is in progress,
+the ancestors of W are searched from the root down,
+looking for a passive grab to activate.
+If no matching passive grab on the button exists,
+then an active grab is started automatically for the client receiving the event,
+and the last-pointer-grab time is set to the current server time.
+The effect is essentially equivalent to a
+<link linkend="requests:GrabButton"><emphasis role='bold'>GrabButton</emphasis></link>
+with arguments:
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='2.0*'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Argument</entry>
+ <entry>Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>event-window</entry>
+ <entry>Event window</entry>
+ </row>
+ <row>
+ <entry>event-mask</entry>
+ <entry>
+Client's selected pointer events on the event window
+ </entry>
+ </row>
+ <row>
+ <entry>pointer-mode and keyboard-mode</entry>
+ <entry>
+<emphasis role='bold'>Asynchronous</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>owner-events</entry>
+ <entry>
+<emphasis role='bold'>True</emphasis>
+if the client has
+<emphasis role='bold'>OwnerGrabButton</emphasis>
+selected on the event window, otherwise
+<emphasis role='bold'>False</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>confine-to</entry>
+ <entry>
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>cursor</entry>
+ <entry>
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+
+
+<para>
+The grab is terminated automatically when the logical state of the pointer
+has all buttons released.
+<link linkend="requests:UngrabPointer"><emphasis role='bold'>UngrabPointer</emphasis></link>
+and
+<link linkend="requests:ChangeActivePointerGrab"><emphasis role='bold'>ChangeActivePointerGrab</emphasis></link>
+can both be used to modify the active grab.
+<!-- .sp -->
+</para>
+
+ <section id="events:input">
+ <title>Input Device events</title>
+ <indexterm zone="events:input" significance="preferred"><primary>Input device</primary><secondary>events</secondary></indexterm>
+
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry id="events:KeyPress">
+<indexterm zone="events:KeyPress" significance="preferred"><primary>KeyPress</primary></indexterm>
+<emphasis role='bold'>KeyPress</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry id="events:KeyRelease">
+<indexterm zone="events:KeyRelease" significance="preferred"><primary>KeyRelease</primary></indexterm>
+<emphasis role='bold'>KeyRelease</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry id="events:ButtonPress">
+<indexterm zone="events:ButtonPress" significance="preferred"><primary>ButtonPress</primary></indexterm>
+<emphasis role='bold'>ButtonPress</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry id="events:ButtonRelease">
+<indexterm zone="events:ButtonRelease" significance="preferred"><primary>ButtonRelease</primary></indexterm>
+<emphasis role='bold'>ButtonRelease</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry id="events:MotionNotify">
+<indexterm zone="events:MotionNotify" significance="preferred"><primary>MotionNotify</primary></indexterm>
+<emphasis role='bold'>MotionNotify</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>root</emphasis>, <emphasis remap='I'>event</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>child</emphasis>: WINDOW or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>same-screen</emphasis>: BOOL
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>root-x</emphasis>, <emphasis remap='I'>root-y</emphasis>, <emphasis remap='I'>event-x</emphasis>, <emphasis remap='I'>event-y</emphasis>: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>detail</emphasis>: &lt;see below&gt;
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>state</emphasis>: SETofKEYBUTMASK
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>time</emphasis>: TIMESTAMP
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+These events are generated either when a key or button logically changes state
+or when the pointer logically moves.
+The generation of these logical changes may lag the physical changes
+if device event processing is frozen.
+Note that
+<emphasis role='bold'>KeyPress</emphasis>
+and
+<emphasis role='bold'>KeyRelease</emphasis>
+are generated for all keys, even those mapped to modifier bits.
+<phrase id="events:input:source">
+The source of the event is the window the pointer is in.
+</phrase>
+<indexterm zone="events:input:source"><primary>Event</primary><secondary>source</secondary></indexterm>
+The window the event is reported with respect to is called the event window.
+The event window is found by starting with the source window and
+looking up the hierarchy for the first window on which any client has selected
+interest in the event (provided no intervening window prohibits event
+generation by including the event type in its do-not-propagate-mask).
+The actual window used for reporting can be modified by active grabs and,
+in the case of keyboard events, can be modified by the focus window.
+</para>
+<para>
+The root is the root window of the source window,
+and root-x and root-y are the pointer coordinates relative to root's origin
+at the time of the event.
+Event is the event window.
+If the event window is on the same screen as root,
+then event-x and event-y are the pointer coordinates relative to the
+event window's origin.
+Otherwise, event-x and event-y are zero.
+If the source window is an inferior of the event window,
+then child is set to the child of the event window that is an
+ancestor of (or is) the source window.
+Otherwise, it is set to
+<emphasis role='bold'>None</emphasis>.
+The state component gives the logical state of the buttons and modifier keys
+just before the event.
+The detail component type varies with the event type:
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='2.0*'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Event</entry>
+ <entry>Component</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>
+<emphasis role='bold'>KeyPress</emphasis>,
+<emphasis role='bold'>KeyRelease</emphasis>
+ </entry>
+ <entry>KEYCODE</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>ButtonPress</emphasis>,
+<emphasis role='bold'>ButtonRelease</emphasis>
+ </entry>
+ <entry>BUTTON</entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>MotionNotify</emphasis>
+ </entry>
+ <entry>
+{ <emphasis role='bold'>Normal</emphasis>
+<emphasis role='bold'>Hint</emphasis> }
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+<emphasis role='bold'>MotionNotify</emphasis>
+events are only generated when the motion begins and ends in the window.
+The granularity of motion events is not guaranteed,
+but a client selecting for motion events is guaranteed to get at least one
+event when the pointer moves and comes to rest.
+Selecting
+<emphasis role='bold'>PointerMotion</emphasis>
+receives events independent of the state of the pointer buttons.
+By selecting some subset of
+<emphasis role='bold'>Button[1-5]Motion</emphasis>
+instead,
+<emphasis role='bold'>MotionNotify</emphasis>
+events will only be received when one or more of the
+specified buttons are pressed.
+By selecting
+<emphasis role='bold'>ButtonMotion</emphasis>,
+<emphasis role='bold'>MotionNotify</emphasis>
+events will be received only when at least one button is pressed.
+The events are always of type
+<emphasis role='bold'>MotionNotify</emphasis>,
+independent of the selection.
+If
+<emphasis role='bold'>PointerMotionHint</emphasis>
+is selected,
+the server is free to send only one
+<emphasis role='bold'>MotionNotify</emphasis>
+event (with detail
+<emphasis role='bold'>Hint</emphasis>)
+to the client for the event window until
+either the key or button state changes,
+the pointer leaves the event window,
+or the client issues a
+<link linkend="requests:QueryPointer"><emphasis role='bold'>QueryPointer</emphasis></link>
+or
+<link linkend="requests:GetMotionEvents"><emphasis role='bold'>GetMotionEvents</emphasis></link>
+request.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:pointer_window">
+ <title>Pointer Window events</title>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry id="events:EnterNotify">
+<indexterm zone="events:EnterNotify" significance="preferred"><primary>EnterNotify</primary></indexterm>
+<emphasis role='bold'>EnterNotify</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry id="events:LeaveNotify">
+<indexterm zone="events:LeaveNotify" significance="preferred"><primary>LeaveNotify</primary></indexterm>
+<emphasis role='bold'>LeaveNotify</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>root</emphasis>, <emphasis remap='I'>event</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>child</emphasis>: WINDOW or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>same-screen</emphasis>: BOOL
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>root-x</emphasis>, <emphasis remap='I'>root-y</emphasis>, <emphasis remap='I'>event-x</emphasis>, <emphasis remap='I'>event-y</emphasis>: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>mode</emphasis>:
+{ <emphasis role='bold'>Normal</emphasis>,
+<emphasis role='bold'>Grab</emphasis>,
+<emphasis role='bold'>Ungrab</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>detail</emphasis>:
+{ <emphasis role='bold'>Ancestor</emphasis>,
+<emphasis role='bold'>Virtual</emphasis>,
+<emphasis role='bold'>Inferior</emphasis>,
+<emphasis role='bold'>Nonlinear</emphasis>,
+<emphasis role='bold'>NonlinearVirtual</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>focus</emphasis>: BOOL
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>state</emphasis>: SETofKEYBUTMASK
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>time</emphasis>: TIMESTAMP
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+If pointer motion or window hierarchy change causes the pointer to be
+in a different window than before,
+<emphasis role='bold'>EnterNotify</emphasis>
+and
+<emphasis role='bold'>LeaveNotify</emphasis>
+events are generated instead of a
+<link linkend="events:MotionNotify"><emphasis role='bold'>MotionNotify</emphasis></link>
+event.
+Only clients selecting
+<emphasis role='bold'>EnterWindow</emphasis>
+on a window receive
+<emphasis role='bold'>EnterNotify</emphasis>
+events, and only clients selecting
+<emphasis role='bold'>LeaveWindow</emphasis>
+receive
+<emphasis role='bold'>LeaveNotify</emphasis>
+events.
+The pointer position reported in the event is always the final position,
+not the initial position of the pointer.
+The root is the root window for this position,
+and root-x and root-y are the pointer coordinates relative to root's
+origin at the time of the event.
+Event is the event window.
+If the event window is on the same screen as root,
+then event-x and event-y are the pointer coordinates relative
+to the event window's origin.
+Otherwise, event-x and event-y are zero.
+In a
+<emphasis role='bold'>LeaveNotify</emphasis>
+event, if a child of the event window contains the initial position of the
+pointer, then the child component is set to that child.
+Otherwise, it is
+<emphasis role='bold'>None</emphasis>.
+For an
+<emphasis role='bold'>EnterNotify</emphasis>
+event, if a child of the event window contains the final pointer position,
+then the child component is set to that child.
+Otherwise, it is
+<emphasis role='bold'>None</emphasis>.
+If the event window is the focus window or an inferior of the focus window,
+then focus is
+<emphasis role='bold'>True</emphasis>.
+Otherwise, focus is
+<emphasis role='bold'>False</emphasis>.
+</para>
+<para>
+Normal pointer motion events have mode
+<emphasis role='bold'>Normal</emphasis>.
+Pseudo-motion events when a grab activates have mode
+<emphasis role='bold'>Grab</emphasis>,
+and pseudo-motion events when a grab deactivates have mode
+<emphasis role='bold'>Ungrab</emphasis>.
+</para>
+<para>
+All
+<emphasis role='bold'>EnterNotify</emphasis>
+and
+<emphasis role='bold'>LeaveNotify</emphasis>
+events caused by a hierarchy change are generated after any hierarchy event
+caused by that change (that is,
+<link linkend="events:UnmapNotify"><emphasis role='bold'>UnmapNotify</emphasis></link>,
+<link linkend="events:MapNotify"><emphasis role='bold'>MapNotify</emphasis></link>,
+<link linkend="events:ConfigureNotify"><emphasis role='bold'>ConfigureNotify</emphasis></link>,
+<link linkend="events:GravityNotify"><emphasis role='bold'>GravityNotify</emphasis></link>,
+<link linkend="events:CirculateNotify"><emphasis role='bold'>CirculateNotify</emphasis></link>),
+but the ordering of
+<emphasis role='bold'>EnterNotify</emphasis>
+and
+<emphasis role='bold'>LeaveNotify</emphasis>
+events with respect to
+<link linkend="events:FocusOut"><emphasis role='bold'>FocusOut</emphasis></link>,
+<link linkend="events:VisibilityNotify"><emphasis role='bold'>VisibilityNotify</emphasis></link>,
+and
+<link linkend="events:Expose"><emphasis role='bold'>Expose</emphasis></link>
+events is not constrained.
+</para>
+<para>
+Normal events are generated as follows:
+</para>
+
+<para>
+When the pointer moves from window A to window B and A is an inferior
+of B:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+<emphasis role='bold'>LeaveNotify</emphasis>
+with detail
+<emphasis role='bold'>Ancestor</emphasis>
+is generated on A.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>LeaveNotify</emphasis>
+with detail
+<emphasis role='bold'>Virtual</emphasis>
+is generated on each window between A and B exclusive (in that order).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>EnterNotify</emphasis>
+with detail
+<emphasis role='bold'>Inferior</emphasis>
+is generated on B.
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+When the pointer moves from window A to window B and B is an inferior
+of A:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+<!-- .IP bu 5 -->
+<emphasis role='bold'>LeaveNotify</emphasis>
+with detail
+<emphasis role='bold'>Inferior</emphasis>
+is generated on A.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>EnterNotify</emphasis>
+with detail
+<emphasis role='bold'>Virtual</emphasis>
+is generated on each window between A and B exclusive (in that order).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>EnterNotify</emphasis>
+with detail
+<emphasis role='bold'>Ancestor</emphasis>
+is generated on B.
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+When the pointer moves from window A to window B and window C is
+their least common ancestor:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+<emphasis role='bold'>LeaveNotify</emphasis>
+with detail
+<emphasis role='bold'>Nonlinear</emphasis>
+is generated on A.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>LeaveNotify</emphasis>
+with detail
+<emphasis role='bold'>NonlinearVirtual</emphasis>
+is generated on each window between A and C exclusive (in that order).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>EnterNotify</emphasis>
+with detail
+<emphasis role='bold'>NonlinearVirtual</emphasis>
+is generated on each window between C and B exclusive (in that order).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>EnterNotify</emphasis>
+with detail
+<emphasis role='bold'>Nonlinear</emphasis>
+is generated on B.
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+When the pointer moves from window A to window B on different screens:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+<emphasis role='bold'>LeaveNotify</emphasis>
+with detail
+<emphasis role='bold'>Nonlinear</emphasis>
+is generated on A.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If A is not a root window,
+<emphasis role='bold'>LeaveNotify</emphasis>
+with detail
+<emphasis role='bold'>NonlinearVirtual</emphasis>
+is generated on each window above A up to and including its root (in order).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If B is not a root window,
+<emphasis role='bold'>EnterNotify</emphasis>
+with detail
+<emphasis role='bold'>NonlinearVirtual</emphasis>
+is generated on each window from B's root down to but not including B
+(in order).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>EnterNotify</emphasis>
+with detail
+<emphasis role='bold'>Nonlinear</emphasis>
+is generated on B.
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+When a pointer grab activates (but after any initial warp into a confine-to
+window and before generating any actual
+<link linkend="events:ButtonPress"><emphasis role='bold'>ButtonPress</emphasis></link>
+event that activates the grab),
+G is the grab-window for the grab, and P is the window the pointer is in:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+<emphasis role='bold'>EnterNotify</emphasis>
+and
+<emphasis role='bold'>LeaveNotify</emphasis>
+events with mode
+<emphasis role='bold'>Grab</emphasis>
+are generated (as for
+<emphasis role='bold'>Normal</emphasis>
+above) 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 pointer position is used as both the initial
+and final positions for the events.
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+When a pointer grab deactivates (but after generating any actual
+<link linkend="events:ButtonRelease"><emphasis role='bold'>ButtonRelease</emphasis></link>
+event that deactivates the grab), G is the grab-window for
+the grab, and P is the window the pointer is in:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+<emphasis role='bold'>EnterNotify</emphasis>
+and
+<emphasis role='bold'>LeaveNotify</emphasis>
+events with mode
+<emphasis role='bold'>Ungrab</emphasis>
+are generated (as for
+<emphasis role='bold'>Normal</emphasis>
+above) 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 current pointer position is used as both the initial
+and final positions for the events.
+ </para>
+ </listitem>
+</itemizedlist>
+
+ </section>
+ <section id="events:input_focus">
+ <title>Input Focus events</title>
+ <indexterm zone="events:input_focus" significance="preferred"><primary>Input focus</primary><secondary>events</secondary></indexterm>
+
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry id="events:FocusIn">
+<indexterm zone="events:FocusIn" significance="preferred"><primary>FocusIn</primary></indexterm>
+<emphasis role='bold'>FocusIn</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry id="events:FocusOut">
+<indexterm zone="events:FocusOut" significance="preferred"><primary>FocusOut</primary></indexterm>
+<emphasis role='bold'>FocusOut</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>event</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>mode</emphasis>:
+{ <emphasis role='bold'>Normal</emphasis>,
+<emphasis role='bold'>WhileGrabbed</emphasis>,
+<emphasis role='bold'>Grab</emphasis>,
+<emphasis role='bold'>Ungrab</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>detail</emphasis>:
+{ <emphasis role='bold'>Ancestor</emphasis>,
+<emphasis role='bold'>Virtual</emphasis>,
+<emphasis role='bold'>Inferior</emphasis>,
+<emphasis role='bold'>Nonlinear</emphasis>,
+<emphasis role='bold'>NonlinearVirtual</emphasis>,
+<emphasis role='bold'>Pointer</emphasis>,
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis role='bold'>PointerRoot</emphasis>,
+<emphasis role='bold'>None</emphasis> }
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+These events are generated when the input focus changes
+and are reported to clients selecting
+<emphasis role='bold'>FocusChange</emphasis>
+on the window.
+Events generated by
+<link linkend="requests:SetInputFocus"><emphasis role='bold'>SetInputFocus</emphasis></link>
+when the keyboard is not grabbed have mode
+<emphasis role='bold'>Normal</emphasis>.
+Events generated by
+<emphasis role='bold'>SetInputFocus</emphasis>
+when the keyboard is grabbed have mode
+<emphasis role='bold'>WhileGrabbed</emphasis>.
+Events generated when a keyboard grab activates have mode
+<emphasis role='bold'>Grab</emphasis>,
+and events generated when a keyboard grab deactivates have mode
+<emphasis role='bold'>Ungrab</emphasis>.
+</para>
+<para>
+All
+<emphasis role='bold'>FocusOut</emphasis>
+events caused by a window unmap are generated after any
+<link linkend="events:UnmapNotify"><emphasis role='bold'>UnmapNotify</emphasis></link>
+event, but the ordering of
+<emphasis role='bold'>FocusOut</emphasis>
+with respect to generated
+<link linkend="events:EnterNotify"><emphasis role='bold'>EnterNotify</emphasis></link>,
+<link linkend="events:LeaveNotify"><emphasis role='bold'>LeaveNotify</emphasis></link>,
+<link linkend="events:VisibilityNotify"><emphasis role='bold'>VisibilityNotify</emphasis></link>,
+and
+<link linkend="events:Expose"><emphasis role='bold'>Expose</emphasis></link>
+events is not constrained.
+</para>
+<para>
+<emphasis role='bold'>Normal</emphasis>
+and
+<emphasis role='bold'>WhileGrabbed</emphasis>
+events are generated as follows:
+</para>
+<para>
+When the focus moves from window A to window B, A is an inferior of B,
+and the pointer is in window P:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+<emphasis role='bold'>FocusOut</emphasis>
+with detail
+<emphasis role='bold'>Ancestor</emphasis>
+is generated on A.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>FocusOut</emphasis>
+with detail
+<emphasis role='bold'>Virtual</emphasis>
+is generated on each window between A and B exclusive (in order).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>FocusIn</emphasis>
+with detail
+<emphasis role='bold'>Inferior</emphasis>
+is generated on B.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If P is an inferior of B
+but P is not A or an inferior of A or an ancestor of A,
+<emphasis role='bold'>FocusIn</emphasis>
+with detail
+<emphasis role='bold'>Pointer</emphasis>
+is generated on each window below B down to and including P (in order).
+ </para>
+ </listitem>
+</itemizedlist>
+
+
+<para>
+When the focus moves from window A to window B, B is an inferior of A,
+and the pointer is in window P:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+If P is an inferior of A
+but P is not an inferior of B or an ancestor of B,
+<emphasis role='bold'>FocusOut</emphasis>
+with detail
+<emphasis role='bold'>Pointer</emphasis>
+is generated on each window from P up to but not including A (in order).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>FocusOut</emphasis>
+with detail
+<emphasis role='bold'>Inferior</emphasis>
+is generated on A.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>FocusIn</emphasis>
+with detail
+<emphasis role='bold'>Virtual</emphasis>
+is generated on each window between A and B exclusive (in order).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>FocusIn</emphasis>
+with detail
+<emphasis role='bold'>Ancestor</emphasis>
+is generated on B.
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+When the focus moves from window A to window B, window C is their
+least common ancestor, and the pointer is in window P:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+If P is an inferior of A,
+<emphasis role='bold'>FocusOut</emphasis>
+with detail
+<emphasis role='bold'>Pointer</emphasis>
+is generated on each window from P up to but not including A (in order).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>FocusOut</emphasis>
+with detail
+<emphasis role='bold'>Nonlinear</emphasis>
+is generated on A.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>FocusOut</emphasis>
+with detail
+<emphasis role='bold'>NonlinearVirtual</emphasis>
+is generated on each window between A and C exclusive (in order).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>FocusIn</emphasis>
+with detail
+<emphasis role='bold'>NonlinearVirtual</emphasis>
+is generated on each window between C and B exclusive (in order).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>FocusIn</emphasis>
+with detail
+<emphasis role='bold'>Nonlinear</emphasis>
+is generated on B.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If P is an inferior of B,
+<emphasis role='bold'>FocusIn</emphasis>
+with detail
+<emphasis role='bold'>Pointer</emphasis>
+is generated on each window below B down to and including P (in order).
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+When the focus moves from window A to window B on different screens
+and the pointer is in window P:
+</para>
+
+
+<itemizedlist>
+ <listitem>
+ <para>
+If P is an inferior of A,
+<emphasis role='bold'>FocusOut</emphasis>
+with detail
+<emphasis role='bold'>Pointer</emphasis>
+is generated on each window from P up to but not including A (in order).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>FocusOut</emphasis>
+with detail
+<emphasis role='bold'>Nonlinear</emphasis>
+is generated on A.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If A is not a root window,
+<emphasis role='bold'>FocusOut</emphasis>
+with detail
+<emphasis role='bold'>NonlinearVirtual</emphasis>
+is generated on each window above A up to and including its root (in order).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If B is not a root window,
+<emphasis role='bold'>FocusIn</emphasis>
+with detail
+<emphasis role='bold'>NonlinearVirtual</emphasis>
+is generated on each window from B's root down to but not including B
+(in order).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>FocusIn</emphasis>
+with detail
+<emphasis role='bold'>Nonlinear</emphasis>
+is generated on B.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If P is an inferior of B,
+<emphasis role='bold'>FocusIn</emphasis>
+with detail
+<emphasis role='bold'>Pointer</emphasis>
+is generated on each window below B down to and including P (in order).
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+When the focus moves from window A to
+<emphasis role='bold'>PointerRoot</emphasis>
+(or
+<emphasis role='bold'>None</emphasis>)
+and the pointer is in window P:
+</para>
+
+
+<itemizedlist>
+ <listitem>
+ <para>
+If P is an inferior of A,
+<emphasis role='bold'>FocusOut</emphasis>
+with detail
+<emphasis role='bold'>Pointer</emphasis>
+is generated on each window from P up to but not including A (in order).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>FocusOut</emphasis>
+with detail
+<emphasis role='bold'>Nonlinear</emphasis>
+is generated on A.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If A is not a root window,
+<emphasis role='bold'>FocusOut</emphasis>
+with detail
+<emphasis role='bold'>NonlinearVirtual</emphasis>
+is generated on each window above A up to and including its root (in order).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>FocusIn</emphasis>
+with detail
+<emphasis role='bold'>PointerRoot</emphasis>
+(or
+<emphasis role='bold'>None</emphasis>)
+is generated on all root windows.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If the new focus is
+<emphasis role='bold'>PointerRoot</emphasis>,
+<emphasis role='bold'>FocusIn</emphasis>
+with detail
+<emphasis role='bold'>Pointer</emphasis>
+is generated on each window from P's root down to and including P (in order).
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+When the focus moves from
+<emphasis role='bold'>PointerRoot</emphasis>
+(or
+<emphasis role='bold'>None</emphasis>)
+to window A and the pointer is in window P:
+</para>
+
+
+<itemizedlist>
+ <listitem>
+ <para>
+If the old focus is
+<emphasis role='bold'>PointerRoot</emphasis>,
+<emphasis role='bold'>FocusOut</emphasis>
+with detail
+<emphasis role='bold'>Pointer</emphasis>
+is generated on each window from P up to and including P's root (in order).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>FocusOut</emphasis>
+with detail
+<emphasis role='bold'>PointerRoot</emphasis>
+(or
+<emphasis role='bold'>None</emphasis>)
+is generated on all root windows.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If A is not a root window,
+<emphasis role='bold'>FocusIn</emphasis>
+with detail
+<emphasis role='bold'>NonlinearVirtual</emphasis>
+is generated on each window from A's root down to but not including A
+(in order).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>FocusIn</emphasis>
+with detail
+<emphasis role='bold'>Nonlinear</emphasis>
+is generated on A.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If P is an inferior of A,
+<emphasis role='bold'>FocusIn</emphasis>
+with detail
+<emphasis role='bold'>Pointer</emphasis>
+is generated on each window below A down to and including P (in order).
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+When the focus moves from
+<emphasis role='bold'>PointerRoot</emphasis>
+to
+<emphasis role='bold'>None</emphasis>
+(or vice versa) and the pointer is in window P:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+If the old focus is
+<emphasis role='bold'>PointerRoot</emphasis>,
+<emphasis role='bold'>FocusOut</emphasis>
+with detail
+<emphasis role='bold'>Pointer</emphasis>
+is generated on each window from P up to and including P's root (in order).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>FocusOut</emphasis>
+with detail
+<emphasis role='bold'>PointerRoot</emphasis>
+(or
+<emphasis role='bold'>None</emphasis>)
+is generated on all root windows.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<emphasis role='bold'>FocusIn</emphasis>
+with detail
+<emphasis role='bold'>None</emphasis>
+(or
+<emphasis role='bold'>PointerRoot</emphasis>)
+is generated on all root windows.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If the new focus is
+<emphasis role='bold'>PointerRoot</emphasis>,
+<emphasis role='bold'>FocusIn</emphasis>
+with detail
+<emphasis role='bold'>Pointer</emphasis>
+is generated on each window from P's root down to and including P (in order).
+ </para>
+ </listitem>
+</itemizedlist>
+
+
+<para>
+When a keyboard grab activates (but before generating any actual
+<emphasis role='bold'>KeyPress</emphasis>
+event that activates the grab), G is the grab-window for the grab,
+and F is the current focus:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+<emphasis role='bold'>FocusIn</emphasis>
+and
+<emphasis role='bold'>FocusOut</emphasis>
+events with mode
+<emphasis role='bold'>Grab</emphasis>
+are generated (as for
+<emphasis role='bold'>Normal</emphasis>
+above) as if the focus were to change from F to G.
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+When a keyboard grab deactivates (but after generating any actual
+<emphasis role='bold'>KeyRelease</emphasis>
+event that deactivates the grab), G is the grab-window for the grab,
+and F is the current focus:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+<emphasis role='bold'>FocusIn</emphasis>
+and
+<emphasis role='bold'>FocusOut</emphasis>
+events with mode
+<emphasis role='bold'>Ungrab</emphasis>
+are generated (as for
+<emphasis role='bold'>Normal</emphasis>
+above) as if the focus were to change from G to F.
+ </para>
+ </listitem>
+</itemizedlist>
+
+ </section>
+ <section id="events:KeymapNotify">
+ <title>KeymapNotify</title>
+ <indexterm zone="events:KeymapNotify" significance="preferred"><primary>KeymapNotify</primary></indexterm>
+
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>KeymapNotify</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>keys</emphasis>: LISTofCARD8
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The value is a bit vector as described in
+<link linkend="requests:QueryKeymap"><emphasis role='bold'>QueryKeymap</emphasis></link>.
+This event is reported to clients selecting
+<emphasis role='bold'>KeymapState</emphasis>
+on a window and is generated immediately after every
+<link linkend="events:EnterNotify"><emphasis role='bold'>EnterNotify</emphasis></link>
+and
+<link linkend="events:FocusIn"><emphasis role='bold'>FocusIn</emphasis></link>.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:Expose">
+ <title>Expose</title>
+ <indexterm zone="events:Expose" significance="preferred"><primary>Expose</primary></indexterm>
+ <indexterm zone="events:Expose"><primary>Event</primary><secondary>Exposure</secondary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>Expose</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>x</emphasis>,
+<emphasis remap='I'>y</emphasis>,
+<emphasis remap='I'>width</emphasis>,
+<emphasis remap='I'>height</emphasis>: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>count</emphasis>: CARD16
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<para>
+This event is reported to clients selecting
+<emphasis role='bold'>Exposure</emphasis>
+on the window.
+It is generated 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
+window's backing-store attribute of
+<emphasis role='bold'>Always</emphasis>
+or
+<emphasis role='bold'>WhenMapped</emphasis>.
+The regions are decomposed into an arbitrary set of rectangles,
+and an
+<emphasis role='bold'>Expose</emphasis>
+event is generated for each rectangle.
+</para>
+<para>
+For a given action causing exposure events,
+the set of events for a given window are guaranteed to be reported contiguously.
+If count is zero,
+then no more
+<emphasis role='bold'>Expose</emphasis>
+events for this window follow.
+If count is nonzero,
+then at least that many more
+<emphasis role='bold'>Expose</emphasis>
+events for this window follow (and possibly more).
+</para>
+<para>
+The x and y coordinates are relative to window's origin
+and specify the upper-left corner of a rectangle.
+The width and height specify the extent of the rectangle.
+</para>
+<para>
+<emphasis role='bold'>Expose</emphasis>
+events are never generated on
+<emphasis role='bold'>InputOnly</emphasis>
+windows.
+</para>
+<para>
+All
+<emphasis role='bold'>Expose</emphasis>
+events caused by a hierarchy change are generated after any
+hierarchy event caused by that change (for example,
+<link linkend="events:UnmapNotify"><emphasis role='bold'>UnmapNotify</emphasis></link>,
+<link linkend="events:MapNotify"><emphasis role='bold'>MapNotify</emphasis></link>,
+<link linkend="events:ConfigureNotify"><emphasis role='bold'>ConfigureNotify</emphasis></link>,
+<link linkend="events:GravityNotify"><emphasis role='bold'>GravityNotify</emphasis></link>,
+<link linkend="events:CirculateNotify"><emphasis role='bold'>CirculateNotify</emphasis></link>).
+All
+<emphasis role='bold'>Expose</emphasis>
+events on a given window are generated after any
+<link linkend="events:VisibilityNotify"><emphasis role='bold'>VisibilityNotify</emphasis></link>
+event on that window,
+but it is not required that all
+<emphasis role='bold'>Expose</emphasis>
+events on all windows be generated after all
+<emphasis role='bold'>Visibilitity</emphasis>
+events on all windows.
+The ordering of
+<emphasis role='bold'>Expose</emphasis>
+events with respect to
+<link linkend="events:FocusOut"><emphasis role='bold'>FocusOut</emphasis></link>,
+<link linkend="events:EnterNotify"><emphasis role='bold'>EnterNotify</emphasis></link>,
+and
+<link linkend="events:LeaveNotify"><emphasis role='bold'>LeaveNotify</emphasis></link>
+events is not constrained.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:GraphicsExposure">
+ <title>GraphicsExposure</title>
+ <indexterm zone="events:GraphicsExposure" significance="preferred"><primary>GraphicsExposure</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>GraphicsExposure</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>drawable</emphasis>: DRAWABLE
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>, <emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>count</emphasis>: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>major-opcode</emphasis>: CARD8
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>minor-opcode</emphasis>: CARD16
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This event is reported to a client using a graphics context
+with graphics-exposures selected
+and is generated when a destination region could not be computed due
+to an obscured or out-of-bounds source region.
+All of the regions exposed by a given graphics request
+are guaranteed to be reported contiguously.
+If count is zero then no more
+<emphasis role='bold'>GraphicsExposure</emphasis>
+events for this window follow.
+If count is nonzero,
+then at least that many more
+<emphasis role='bold'>GraphicsExposure</emphasis>
+events for this window follow (and possibly more).
+</para>
+<para>
+The x and y coordinates are relative to drawable's origin
+and specify the upper-left corner of a rectangle.
+The width and height specify the extent of the rectangle.
+</para>
+<para>
+The major and minor opcodes identify the graphics request used.
+For the core protocol,
+major-opcode is always
+<link linkend="requests:CopyArea"><emphasis role='bold'>CopyArea</emphasis></link>
+or
+<link linkend="requests:CopyPlane"><emphasis role='bold'>CopyPlane</emphasis></link>,
+and minor-opcode is always zero.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:NoExposure">
+ <title>NoExposure</title>
+ <indexterm zone="events:NoExposure" significance="preferred"><primary>NoExposure</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>NoExposure</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>drawable</emphasis>: DRAWABLE
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>major-opcode</emphasis>: CARD8
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>minor-opcode:</emphasis> CARD16
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This event is reported to a client using a graphics context
+with graphics-exposures selected
+and is generated when a graphics request
+that might produce
+<link linkend="events:GraphicsExposure"><emphasis role='bold'>GraphicsExposure</emphasis></link>
+events does not produce any.
+The drawable specifies the destination used for the graphics request.
+</para>
+<para>
+The major and minor opcodes identify the graphics request used.
+For the core protocol,
+major-opcode is always
+<link linkend="requests:CopyArea"><emphasis role='bold'>CopyArea</emphasis></link>
+or
+<link linkend="requests:CopyPlane"><emphasis role='bold'>CopyPlane</emphasis></link>,
+and the minor-opcode is always zero.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:VisibilityNotify">
+ <title>VisibilityNotify</title>
+ <indexterm zone="events:VisibilityNotify" significance="preferred"><primary>VisibilityNotify</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>VisibilityNotify</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>state</emphasis>:
+{ <emphasis role='bold'>Unobscured</emphasis>,
+<emphasis role='bold'>PartiallyObscured</emphasis>,
+<emphasis role='bold'>FullyObscured</emphasis>}
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This event is reported to clients selecting
+<emphasis role='bold'>VisibilityChange</emphasis>
+on the window.
+In the following,
+the state of the window is calculated ignoring all of the window's subwindows.
+When a window changes state from partially or fully obscured or
+not viewable to viewable and completely unobscured,
+an event with
+<emphasis role='bold'>Unobscured</emphasis>
+is generated.
+When a window changes state from viewable and completely unobscured,
+from viewable and completely obscured,
+or from not viewable, to viewable and partially obscured,
+an event with
+<emphasis role='bold'>PartiallyObscured</emphasis>
+is generated.
+When a window changes state from viewable and completely unobscured,
+from viewable and partially obscured,
+or from not viewable to viewable and fully obscured,
+an event with
+<emphasis role='bold'>FullyObscured</emphasis>
+is generated.
+</para>
+<para>
+<emphasis role='bold'>VisibilityNotify</emphasis>
+events are never generated on
+<emphasis role='bold'>InputOnly</emphasis>
+windows.
+</para>
+<para>
+All
+<emphasis role='bold'>VisibilityNotify</emphasis>
+events caused by a hierarchy change are generated after any hierarchy event
+caused by that change (for example,
+<link linkend="events:UnmapNotify"><emphasis role='bold'>UnmapNotify</emphasis></link>,
+<link linkend="events:MapNotify"><emphasis role='bold'>MapNotify</emphasis></link>,
+<link linkend="events:ConfigureNotify"><emphasis role='bold'>ConfigureNotify</emphasis></link>,
+<link linkend="events:GravityNotify"><emphasis role='bold'>GravityNotify</emphasis></link>,
+<link linkend="events:CirculateNotify"><emphasis role='bold'>CirculateNotify</emphasis></link>).
+Any
+<emphasis role='bold'>VisibilityNotify</emphasis>
+event on a given window is generated before any
+<link linkend="events:Expose"><emphasis role='bold'>Expose</emphasis></link>
+events on that window,
+but it is not required that all
+<emphasis role='bold'>VisibilityNotify</emphasis>
+events on all windows be generated before all
+<emphasis role='bold'>Expose</emphasis>
+events on all windows.
+The ordering of
+<emphasis role='bold'>VisibilityNotify</emphasis>
+events with respect to
+<link linkend="events:FocusOut"><emphasis role='bold'>FocusOut</emphasis></link>,
+<link linkend="events:EnterNotify"><emphasis role='bold'>EnterNotify</emphasis></link>,
+and
+<link linkend="events:LeaveNotify"><emphasis role='bold'>LeaveNotify</emphasis></link>
+events is not constrained.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:CreateNotify">
+ <title>CreateNotify</title>
+ <indexterm zone="events:CreateNotify" significance="preferred"><primary>CreateNotify</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>CreateNotify</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>parent</emphasis>, <emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>, <emphasis remap='I'>border-width</emphasis>: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>override-redirect</emphasis>: BOOL
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This event is reported to clients selecting
+<emphasis role='bold'>SubstructureNotify</emphasis>
+on the parent
+and is generated when the window is created.
+The arguments are as in the
+<link linkend="requests:CreateWindow"><emphasis role='bold'>CreateWindow</emphasis></link>
+request.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:DestroyNotify">
+ <title>DestroyNotify</title>
+ <indexterm zone="events:DestroyNotify" significance="preferred"><primary>DestroyNotify</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>DestroyNotify</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>event</emphasis>, <emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This event is reported to clients selecting
+<emphasis role='bold'>StructureNotify</emphasis>
+on the window and to clients selecting
+<emphasis role='bold'>SubstructureNotify</emphasis>
+on the parent.
+It is generated when the window is destroyed.
+The event is the window on which the event was generated,
+and the window is the window that is destroyed.
+</para>
+<para>
+The ordering of the
+<emphasis role='bold'>DestroyNotify</emphasis>
+events is such that for any given window,
+<emphasis role='bold'>DestroyNotify</emphasis>
+is generated on all inferiors of the window
+before being generated on the window itself.
+The ordering among siblings and across subhierarchies is not
+otherwise constrained.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:UnmapNotify">
+ <title>UnmapNotify</title>
+ <indexterm zone="events:UnmapNotify" significance="preferred"><primary>UnmapNotify</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>UnmapNotify</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>event</emphasis>, <emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>from-configure</emphasis>: BOOL
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This event is reported to clients selecting
+<emphasis role='bold'>StructureNotify</emphasis>
+on the window and to clients selecting
+<emphasis role='bold'>SubstructureNotify</emphasis>
+on the parent.
+It is generated when the window changes state from mapped to unmapped.
+The event is the window on which the event was generated,
+and the window is the window that is unmapped.
+The from-configure flag is
+<emphasis role='bold'>True</emphasis>
+if the event was generated as a result of the window's parent being resized
+when the window itself had a win-gravity of
+<emphasis role='bold'>Unmap</emphasis>.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:MapNotify">
+ <title>MapNotify</title>
+ <indexterm zone="events:MapNotify" significance="preferred"><primary>MapNotify</primary></indexterm>
+ <indexterm zone="events:MapNotify"><primary>Mapped window</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>MapNotify</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>event</emphasis>, <emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>override-redirect</emphasis>: BOOL
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This event is reported to clients selecting
+<emphasis role='bold'>StructureNotify</emphasis>
+on the window and to clients selecting
+<emphasis role='bold'>SubstructureNotify</emphasis>
+on the parent.
+It is generated when the window changes state from unmapped to mapped.
+The event is the window on which the event was generated,
+and the window is the window that is mapped.
+The override-redirect flag is from the window's attribute.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:MapRequest">
+ <title>MapRequest</title>
+ <indexterm zone="events:MapRequest" significance="preferred"><primary>MapRequest</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>MapRequest</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>parent</emphasis>, <emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This event is reported to the client selecting
+<emphasis role='bold'>SubstructureRedirect</emphasis>
+on the parent and is generated when a
+<link linkend="requests:MapWindow"><emphasis role='bold'>MapWindow</emphasis></link>
+request is issued on an unmapped window with an override-redirect attribute of
+<emphasis role='bold'>False</emphasis>.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:ReparentNotify">
+ <title>ReparentNotify</title>
+ <indexterm zone="events:ReparentNotify" significance="preferred"><primary>ReparentNotify</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>ReparentNotify</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>event</emphasis>, <emphasis remap='I'>window</emphasis>, <emphasis remap='I'>parent</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>override-redirect</emphasis>: BOOL
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This event is reported to clients selecting
+<emphasis role='bold'>SubstructureNotify</emphasis>
+on either the old or the new parent and to clients selecting
+<emphasis role='bold'>StructureNotify</emphasis>
+on the window.
+It is generated when the window is reparented.
+The event is the window on which the event was generated.
+The window is the window that has been rerooted.
+The parent specifies the new parent.
+The x and y coordinates are relative to the new parent's origin
+and specify the position of the upper-left outer corner of the window.
+The override-redirect flag is from the window's attribute.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:ConfigureNotify">
+ <title>ConfigureNotify</title>
+ <indexterm zone="events:ConfigureNotify" significance="preferred"><primary>ConfigureNotify</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>ConfigureNotify</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>event</emphasis>, <emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>, <emphasis remap='I'>border-width</emphasis>: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>above-sibling</emphasis>: WINDOW or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>override-redirect</emphasis>: BOOL
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This event is reported to clients selecting
+<emphasis role='bold'>StructureNotify</emphasis>
+on the window and to clients selecting
+<emphasis role='bold'>SubstructureNotify</emphasis>
+on the parent.
+It is generated when a
+<link linkend="requests:ConfigureWindow"><emphasis role='bold'>ConfigureWindow</emphasis></link>
+request actually changes the state of the window.
+The event is the window on which the event was generated,
+and the window is the window that is changed.
+The x and y coordinates are relative to the new parent's origin
+and specify the position of the upper-left outer corner of the window.
+The width and height specify the inside size, not including the border.
+If above-sibling is
+<emphasis role='bold'>None</emphasis>,
+then the window is on the bottom of the stack with respect to siblings.
+Otherwise, the window is immediately on top of the specified sibling.
+The override-redirect flag is from the window's attribute.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:GravityNotify">
+ <title>GravityNotify</title>
+ <indexterm zone="events:GravityNotify" significance="preferred"><primary>GravityNotify</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>GravityNotify</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>event</emphasis>, <emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This event is reported to clients selecting
+<emphasis role='bold'>SubstructureNotify</emphasis>
+on the parent and to clients selecting
+<emphasis role='bold'>StructureNotify</emphasis>
+on the window.
+It is generated when a window is moved because of a change in size
+of the parent.
+The event is the window on which the event was generated,
+and the window is the window that is moved.
+The x and y coordinates are relative to the new parent's origin
+and specify the position of the upper-left outer corner of the window.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:ResizeRequest">
+ <title>ResizeRequest</title>
+ <indexterm zone="events:ResizeRequest" significance="preferred"><primary>ResizeRequest</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>ResizeRequest</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>: CARD16
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This event is reported to the client selecting
+<emphasis role='bold'>ResizeRedirect</emphasis>
+on the window and is generated when a
+<link linkend="requests:ConfigureWindow"><emphasis role='bold'>ConfigureWindow</emphasis></link>
+request by some other client on the window attempts to change the size
+of the window.
+The width and height are the requested inside size, not including the border.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:ConfigureRequest">
+ <title>ConfigureRequest</title>
+ <indexterm zone="events:ConfigureRequest" significance="preferred"><primary>ConfigureRequest</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>ConfigureRequest</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>parent</emphasis>, <emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>, <emphasis remap='I'>border-width</emphasis>: CARD16
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>sibling</emphasis>: WINDOW or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>stack-mode</emphasis>:
+{ <emphasis role='bold'>Above</emphasis>,
+<emphasis role='bold'>Below</emphasis>,
+<emphasis role='bold'>TopIf</emphasis>,
+<emphasis role='bold'>BottomIf</emphasis>,
+<emphasis role='bold'>Opposite</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>value-mask</emphasis>: BITMASK
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This event is reported to the client selecting
+<emphasis role='bold'>SubstructureRedirect</emphasis>
+on the parent and is generated when a
+<link linkend="requests:ConfigureWindow"><emphasis role='bold'>ConfigureWindow</emphasis></link>
+request is issued on the window by some other client.
+The value-mask indicates which components were specified in the request.
+The value-mask and 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 sibling and stack-mode,
+which are reported as
+<emphasis role='bold'>None</emphasis>
+and
+<emphasis role='bold'>Above</emphasis>
+(respectively) if not given in the request.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:CirculateNotify">
+ <title>CirculateNotify</title>
+ <indexterm zone="events:CirculateNotify" significance="preferred"><primary>CirculateNotify</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>CirculateNotify</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>event</emphasis>, <emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>place</emphasis>:
+{ <emphasis role='bold'>Top</emphasis>,
+<emphasis role='bold'>Bottom</emphasis>}
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This event is reported to clients selecting
+<emphasis role='bold'>StructureNotify</emphasis>
+on the window and to clients selecting
+<emphasis role='bold'>SubstructureNotify</emphasis>
+on the parent.
+It is generated when the window is actually restacked from a
+<link linkend="requests:CirculateWindow"><emphasis role='bold'>CirculateWindow</emphasis></link>
+request.
+The event is the window on which the event was generated,
+and the window is the window that is restacked.
+If place is
+<emphasis role='bold'>Top</emphasis>,
+the window is now on top of all siblings.
+Otherwise, it is below all siblings.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:CirculateRequest">
+ <title>CirculateRequest</title>
+ <indexterm zone="events:CirculateRequest" significance="preferred"><primary>CirculateRequest</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>CirculateRequest</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>parent</emphasis>, <emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>place</emphasis>:
+{ <emphasis role='bold'>Top</emphasis>,
+<emphasis role='bold'>Bottom</emphasis>}
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This event is reported to the client selecting
+<emphasis role='bold'>SubstructureRedirect</emphasis>
+on the parent and is generated when a
+<link linkend="requests:CirculateWindow"><emphasis role='bold'>CirculateWindow</emphasis></link>
+request is issued on the parent and a window actually needs to be restacked.
+The window specifies the window to be restacked,
+and the place specifies what the new position in the stacking order should be.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:PropertyNotify">
+ <title>PropertyNotify</title>
+ <indexterm zone="events:PropertyNotify" significance="preferred"><primary>PropertyNotify</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>PropertyNotify</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>atom</emphasis>: ATOM
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>state</emphasis>:
+{ <emphasis role='bold'>NewValue</emphasis>,
+<emphasis role='bold'>Deleted</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>time</emphasis>: TIMESTAMP
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This event is reported to clients selecting
+<emphasis role='bold'>PropertyChange</emphasis>
+on the window and is generated with state
+<emphasis role='bold'>NewValue</emphasis>
+when a property of the window is changed using
+<link linkend="requests:ChangeProperty"><emphasis role='bold'>ChangeProperty</emphasis></link>
+or
+<link linkend="requests:RotateProperties"><emphasis role='bold'>RotateProperties</emphasis></link>,
+even when adding zero-length data using
+<emphasis role='bold'>ChangeProperty</emphasis>
+and when replacing all or part of a property with identical data using
+<emphasis role='bold'>ChangeProperty</emphasis>
+or
+<emphasis role='bold'>RotateProperties</emphasis>.
+It is generated with state
+<emphasis role='bold'>Deleted</emphasis>
+when a property of the
+window is deleted using request
+<link linkend="requests:DeleteProperty"><emphasis role='bold'>DeleteProperty</emphasis></link>
+or
+<link linkend="requests:GetProperty"><emphasis role='bold'>GetProperty</emphasis></link>.
+The timestamp indicates the server time when the property was changed.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:SelectionClear">
+ <title>SelectionClear</title>
+ <indexterm zone="events:SelectionClear" significance="preferred"><primary>SelectionClear</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>SelectionClear</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>owner</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>selection</emphasis>: ATOM
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>time</emphasis>: TIMESTAMP
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This event is reported to the current owner of a selection
+and is generated when a new owner is being defined by means of
+<link linkend="requests:SetSelectionOwner"><emphasis role='bold'>SetSelectionOwner</emphasis></link>.
+The timestamp is the last-change time recorded for the selection.
+The owner argument is the window that was specified by the current owner in its
+<emphasis role='bold'>SetSelectionOwner</emphasis>
+request.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:SelectionRequest">
+ <title>SelectionRequest</title>
+ <indexterm zone="events:SelectionRequest" significance="preferred"><primary>SelectionRequest</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>SelectionRequest</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>owner</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>selection</emphasis>: ATOM
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>target</emphasis>: ATOM
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>property</emphasis>: ATOM or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>requestor</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>time</emphasis>: TIMESTAMP or
+<emphasis role='bold'>CurrentTime</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This event is reported to the owner of a selection
+and is generated when a client issues a
+<link linkend="requests:ConvertSelection"><emphasis role='bold'>ConvertSelection</emphasis></link>
+request.
+The owner argument is the window that was specified in the
+<link linkend="requests:SetSelectionOwner"><emphasis role='bold'>SetSelectionOwner</emphasis></link>
+request.
+The remaining arguments are as in the
+<emphasis role='bold'>ConvertSelection</emphasis>
+request.
+</para>
+<para>
+The owner should convert the selection based on the specified target type
+and send a
+<emphasis role='bold'>SelectionNotify</emphasis>
+back to the requestor.
+A complete specification for using selections is given in the X.Org
+standard <citetitle>Inter-Client Communication Conventions Manual</citetitle>.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:SelectionNotify">
+ <title>SelectionNotify</title>
+ <indexterm zone="events:SelectionNotify" significance="preferred"><primary>SelectionNotify</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>SelectionNotify</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>requestor</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>selection</emphasis>, <emphasis remap='I'>target</emphasis>: ATOM
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>property</emphasis>: ATOM or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>time</emphasis>: TIMESTAMP or
+<emphasis role='bold'>CurrentTime</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This event is generated by the server in response to a
+<link linkend="requests:ConvertSelection"><emphasis role='bold'>ConvertSelection</emphasis></link>
+request when there is no owner for the selection.
+When there is an owner,
+it should be generated by the owner using
+<link linkend="requests:SendEvent"><emphasis role='bold'>SendEvent</emphasis></link>.
+The owner of a selection should send this event to a requestor either
+when a selection has been converted and stored as a property
+or when a selection conversion could not be performed (indicated with property
+<emphasis role='bold'>None</emphasis>).
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:ColormapNotify">
+ <title>ColormapNotify</title>
+ <indexterm zone="events:ColormapNotify" significance="preferred"><primary>ColormapNotify</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>ColormapNotify</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>colormap</emphasis>: COLORMAP or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>new</emphasis>: BOOL
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>state</emphasis>:
+{ <emphasis role='bold'>Installed</emphasis>,
+<emphasis role='bold'>Uninstalled</emphasis>}
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This event is reported to clients selecting
+<emphasis role='bold'>ColormapChange</emphasis>
+on the window.
+It is generated with value
+<emphasis role='bold'>True</emphasis>
+for new when the colormap attribute of the window is changed
+and is generated with value
+<emphasis role='bold'>False</emphasis>
+for new when the colormap of a window is installed or uninstalled.
+In either case,
+the state indicates whether the colormap is currently installed.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:MappingNotify">
+ <title>MappingNotify</title>
+ <indexterm zone="events:MappingNotify" significance="preferred"><primary>MappingNotify</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>MappingNotify</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>request</emphasis>:
+{ <emphasis role='bold'>Modifier</emphasis>,
+<emphasis role='bold'>Keyboard</emphasis>,
+<emphasis role='bold'>Pointer</emphasis>}
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>first-keycode</emphasis>, <emphasis remap='I'>count</emphasis>: CARD8
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This event is sent to all clients.
+There is no mechanism to express disinterest in this event.
+The detail indicates the kind of change that occurred:
+<emphasis role='bold'>Modifiers</emphasis>
+for a successful
+<link linkend="requests:SetModifierMapping"><emphasis role='bold'>SetModifierMapping</emphasis></link>,
+<emphasis role='bold'>Keyboard</emphasis>
+for a successful
+<link linkend="requests:ChangeKeyboardMapping"><emphasis role='bold'>ChangeKeyboardMapping</emphasis></link>,
+and
+<emphasis role='bold'>Pointer</emphasis>
+for a successful
+<link linkend="requests:SetPointerMapping"><emphasis role='bold'>SetPointerMapping</emphasis></link>.
+If the detail is
+<emphasis role='bold'>Keyboard</emphasis>,
+then first-keycode and count indicate the range of altered keycodes.
+<!-- .sp -->
+</para>
+ </section>
+ <section id="events:ClientMessage">
+ <title>ClientMessage</title>
+ <indexterm zone="events:ClientMessage" significance="preferred"><primary>ClientMessage</primary></indexterm>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='1' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <tbody>
+ <row>
+ <entry>
+ <emphasis role='bold'>ClientMessage</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>type</emphasis>: ATOM
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>format</emphasis>: {8, 16, 32}
+ </entry>
+ </row>
+ <row>
+ <entry>
+<emphasis remap='I'>data</emphasis>: LISTofINT8 or LISTofINT16 or LISTofINT32
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This event is only generated by clients using
+<link linkend="requests:SendEvent"><emphasis role='bold'>SendEvent</emphasis></link>.
+The type specifies how the data is to be interpreted by the receiving client;
+the server places no interpretation on the type or the data.
+The format specifies whether the data should be viewed as a list of 8-bit,
+16-bit, or 32-bit quantities, so that the server can correctly
+byte-swap, as necessary.
+The data always consists of either 20 8-bit values or 10 16-bit values
+or 5 32-bit values, although particular message types might not make use
+of all of these values.
+</para>
+ </section>
+</chapter>
+<chapter id='Flow_Control_and_Concurrency'>
+<title>Flow Control and Concurrency</title>
+<!-- .XS -->
+<!-- \*(SN Flow Control and Concurrency -->
+<!-- .XE -->
+<para>
+Whenever the server is writing to a given connection,
+it is permissible for the server to stop reading from that connection
+(but if the writing would block, it must continue to service other connections).
+The server is not required to buffer more than a single request per connection
+at one time.
+For a given connection to the server,
+a client can block while reading from the connection
+but should undertake to read (events and errors) when writing would block.
+Failure on the part of a client to obey this rule could result
+in a deadlocked connection,
+although deadlock is probably unlikely unless either
+the transport layer has very little buffering or the client attempts to
+send large numbers of requests without ever reading replies or checking for
+errors and events.
+</para>
+<para>
+Whether or not a server is implemented with internal concurrency,
+the overall effect must be as if individual requests are executed to completion
+in some serial order,
+and requests from a given connection must be executed in delivery order
+(that is, the total execution order is a shuffle of the individual streams).
+The execution of a request includes validating all arguments,
+collecting all data for any reply,
+and generating and queueing all required events.
+However,
+it does not include the actual transmission of the reply and the events.
+In addition, the effect of any other cause that can generate multiple events
+(for example, activation of a grab or pointer motion) must effectively generate
+and queue all required events indivisibly with respect to all other causes
+and requests.
+For a request from a given client,
+any events destined for that client that are caused by executing the request
+must be sent to the client before any reply or error is sent.
+</para>
+</chapter>
+</part>
diff --git a/specs/x11protocol.xml b/specs/x11protocol.xml
new file mode 100644
index 0000000..87ac555
--- /dev/null
+++ b/specs/x11protocol.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+ "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
+[
+<!ENTITY % defs SYSTEM "defs.ent"> %defs;
+]>
+
+
+<book id="x11protocol">
+
+<bookinfo>
+ <title>X Window System Protocol</title>
+ <subtitle>X Consortium Standard</subtitle>
+ <author>
+ <firstname>Robert</firstname>
+ <othername>W.</othername>
+ <surname>Scheifler</surname>
+ <affiliation><orgname>X Consortium, Inc.</orgname></affiliation>
+ </author>
+ <releaseinfo>X Version 11, Release &fullrelvers;</releaseinfo>
+ <releaseinfo>Version 1.0</releaseinfo>
+ <copyright><year>1986</year><year>1987</year><year>1988</year><year>1994</year><year>2004</year>
+ <holder>The Open Group</holder>
+ </copyright>
+
+<legalnotice>
+
+<para>
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+</para>
+<para>
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+</para>
+<para>
+THE SOFTWARE IS PROVIDED &ldquo;AS IS&rdquo;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+</para>
+<para>
+Except as contained in this notice, the name of the Open Group shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from the Open Group.
+</para>
+<para>X Window System is a trademark of The Open Group.</para>
+</legalnotice>
+</bookinfo>
+
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="sect1-9.xml"
+ xpointer="xpointer(/part/*)"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="keysyms.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="encoding.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="glossary.xml"/>
+<index id="index" />
+</book>
+
diff --git a/xproto.pc.in b/xproto.pc.in
new file mode 100644
index 0000000..63ae864
--- /dev/null
+++ b/xproto.pc.in
@@ -0,0 +1,10 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+includex11dir=@includedir@/X11
+
+Name: Xproto
+Description: Xproto headers
+Version: @PACKAGE_VERSION@
+Cflags: -I${includedir}