summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Dew <matt@osource.org>2010-08-17 20:49:44 -0400
committerGaetan Nadon <memsize@videotron.ca>2010-08-18 10:22:22 -0400
commitc23cc9a4a728e5cccf685388f2e54eff31c3867f (patch)
treebba65ac7c426247ea61fe0f5d156517d87aecdf1
parentcb020b302c1ebb9477cd5b4adae8677597269733 (diff)
specs: convert protocol .ms from xorg-docs to DocBook XML
Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
-rw-r--r--Makefile.am2
-rw-r--r--configure.ac11
-rw-r--r--specs/.gitignore5
-rw-r--r--specs/Makefile.am72
-rw-r--r--specs/encoding.xml3260
-rw-r--r--specs/glossary.xml1313
-rw-r--r--specs/keysyms.xml6038
-rw-r--r--specs/sect1-9.xml14737
-rw-r--r--specs/x11protocol.xml73
9 files changed, 25508 insertions, 3 deletions
diff --git a/Makefile.am b/Makefile.am
index 26b9995..e9b30cf 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,3 +1,5 @@
+SUBDIRS=specs
+
xprotodir = $(includedir)/X11
xproto_HEADERS = \
ap_keysym.h \
diff --git a/configure.ac b/configure.ac
index 18044a4..3dc8a13 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,11 +3,15 @@ AC_INIT([Xproto], [7.0.18], [https://bugs.freedesktop.org/enter_bug.cgi?product=
AM_INIT_AUTOMAKE([foreign dist-bzip2])
AM_MAINTAINER_MODE
-# Require xorg-macros: XORG_DEFAULT_OPTIONS
+# Require xorg-macros minimum of 1.10 for DocBook XML documentation
m4_ifndef([XORG_MACROS_VERSION],
- [m4_fatal([must install xorg-macros 1.3 or later before running autoconf/autogen])])
-XORG_MACROS_VERSION(1.3)
+ [m4_fatal([must install xorg-macros 1.10 or later before running autoconf/autogen])])
+XORG_MACROS_VERSION(1.10)
XORG_DEFAULT_OPTIONS
+XORG_ENABLE_SPECS
+XORG_WITH_XMLTO(0.0.20)
+XORG_WITH_FOP
+XORG_CHECK_SGML_DOCTOOLS(1.5)
AC_CONFIG_HEADER([do-not-use-config.h])
AC_CONFIG_HEADER([Xfuncproto.h])
@@ -205,5 +209,6 @@ fi
AC_OUTPUT([Makefile
+ specs/Makefile
Xpoll.h
xproto.pc])
diff --git a/specs/.gitignore b/specs/.gitignore
new file mode 100644
index 0000000..22ef64b
--- /dev/null
+++ b/specs/.gitignore
@@ -0,0 +1,5 @@
+*.html
+*.pdf
+*.ps
+*.txt
+*.css
diff --git a/specs/Makefile.am b/specs/Makefile.am
new file mode 100644
index 0000000..2e5d6b5
--- /dev/null
+++ b/specs/Makefile.am
@@ -0,0 +1,72 @@
+#
+# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+# DEALINGS IN THE SOFTWARE.
+#
+
+if ENABLE_SPECS
+
+doc_sources = x11protocol.xml
+dist_doc_DATA = $(doc_sources) \
+ encoding.xml \
+ glossary.xml \
+ keysyms.xml \
+ sect1-9.xml
+
+if HAVE_XMLTO
+doc_DATA = $(doc_sources:.xml=.html)
+
+if HAVE_FOP
+doc_DATA += $(doc_sources:.xml=.ps) $(doc_sources:.xml=.pdf)
+endif
+
+if HAVE_XMLTO_TEXT
+doc_DATA += $(doc_sources:.xml=.txt)
+endif
+
+if HAVE_STYLESHEETS
+XMLTO_FLAGS = -m $(XSL_STYLESHEET) --stringparam img.src.path=$(abs_builddir)/
+
+doc_DATA += xorg.css
+xorg.css: $(STYLESHEET_SRCDIR)/xorg.css
+ $(AM_V_GEN)cp -pf $(STYLESHEET_SRCDIR)/xorg.css $@
+endif
+
+CLEANFILES = $(doc_DATA)
+
+SUFFIXES = .xml .ps .pdf .txt .html
+
+%.txt: %.xml $(dist_doc_DATA)
+ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) txt $<
+
+%.html: %.xml $(dist_doc_DATA)
+ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) xhtml-nochunks $<
+
+%.pdf: %.xml $(dist_doc_DATA)
+ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop pdf $<
+
+%.ps: %.xml $(dist_doc_DATA)
+ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop ps $<
+
+chunked-html: $(dist_doc_DATA)
+ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) -o html xhtml $(doc_sources)
+
+endif HAVE_XMLTO
+endif ENABLE_SPECS
diff --git a/specs/encoding.xml b/specs/encoding.xml
new file mode 100644
index 0000000..69a8240
--- /dev/null
+++ b/specs/encoding.xml
@@ -0,0 +1,3260 @@
+<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,
+and pad(E) is the number of bytes needed to round E up to a multiple of four.
+</para>
+
+<literallayout class="monospaced">
+ pad(E) = (4 - (E mod 4)) mod 4
+</literallayout>
+</sect1>
+
+<sect1 id="common_types_2">
+<title>Common Types</title>
+
+<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'>
+ <colspec colname='c1' colsep="0"/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+BITMASK: CARD32
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+WINDOW: CARD32
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+PIXMAP: CARD32
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+CURSOR: CARD32
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+FONT: CARD32
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+GCONTEXT: CARD32
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+COLORMAP: CARD32
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+DRAWABLE: CARD32
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+FONTABLE: CARD32
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+ATOM: CARD32
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+VISUALID: CARD32
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+BYTE: 8-bit value
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+INT8: 8-bit signed integer
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+INT16: 16-bit signed integer
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+INT32: 32-bit signed integer
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+CARD8: 8-bit unsigned integer
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+CARD16: 16-bit unsigned integer
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+CARD32: 32-bit unsigned integer
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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="errors_2">
+<title>Errors</title>
+
+<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="keyboards_2">
+<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
+Appendix A, Keysym Encoding. <!-- xref -->
+</para>
+</sect1>
+
+<sect1 id="pointers_2">
+<title>Pointers</title>
+
+<para>
+BUTTON values are numbered starting with one.
+</para>
+
+</sect1>
+<sect1 id="predefined">
+<title>Predefined Atoms</title>
+
+<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="connection_setup_2">
+<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="requests_2">
+<title>Requests</title>
+
+<literallayout class="monospaced">
+<emphasis role='bold'>CreateWindow</emphasis>
+ 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
+
+<emphasis role='bold'>ChangeWindowAttributes</emphasis>
+ 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
+
+<emphasis role='bold'>GetWindowAttributes</emphasis>
+ 1 3 opcode
+ 1 unused
+ 2 2 request length
+ 4 WINDOW window
+
+-&gt;
+ 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
+
+<emphasis role='bold'>DestroyWindow</emphasis>
+ 1 4 opcode
+ 1 unused
+ 2 2 request length
+ 4 WINDOW window
+
+<emphasis role='bold'>DestroySubwindows</emphasis>
+ 1 5 opcode
+ 1 unused
+ 2 2 request length
+ 4 WINDOW window
+
+<emphasis role='bold'>ChangeSaveSet</emphasis>
+ 1 6 opcode
+ 1 mode
+ 0 Insert
+ 1 Delete
+ 2 2 request length
+ 4 WINDOW window
+
+<emphasis role='bold'>ReparentWindow</emphasis>
+ 1 7 opcode
+ 1 unused
+ 2 4 request length
+ 4 WINDOW window
+ 4 WINDOW parent
+ 2 INT16 x
+ 2 INT16 y
+
+<emphasis role='bold'>MapWindow</emphasis>
+ 1 8 opcode
+ 1 unused
+ 2 2 request length
+ 4 WINDOW window
+
+<emphasis role='bold'>MapSubwindows</emphasis>
+ 1 9 opcode
+ 1 unused
+ 2 2 request length
+ 4 WINDOW window
+
+<emphasis role='bold'>UnmapWindow</emphasis>
+ 1 10 opcode
+ 1 unused
+ 2 2 request length
+ 4 WINDOW window
+
+<emphasis role='bold'>UnmapSubwindows</emphasis>
+ 1 11 opcode
+ 1 unused
+ 2 2 request length
+ 4 WINDOW window
+
+<emphasis role='bold'>ConfigureWindow</emphasis>
+ 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
+
+<emphasis role='bold'>CirculateWindow</emphasis>
+ 1 13 opcode
+ 1 direction
+ 0 RaiseLowest
+ 1 LowerHighest
+ 2 2 request length
+ 4 WINDOW window
+
+<emphasis role='bold'>GetGeometry</emphasis>
+ 1 14 opcode
+ 1 unused
+ 2 2 request length
+ 4 DRAWABLE drawable
+
+-&gt;
+ 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
+
+<emphasis role='bold'>QueryTree</emphasis>
+ 1 15 opcode
+ 1 unused
+ 2 2 request length
+ 4 WINDOW window
+
+-&gt;
+ 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
+
+<emphasis role='bold'>InternAtom</emphasis>
+ 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)
+
+-&gt;
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 ATOM atom
+ 0 None
+ 20 unused
+
+<emphasis role='bold'>GetAtomName</emphasis>
+ 1 17 opcode
+ 1 unused
+ 2 2 request length
+ 4 ATOM atom
+
+-&gt;
+ 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)
+
+<emphasis role='bold'>ChangeProperty</emphasis>
+ 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)
+
+
+<emphasis role='bold'>DeleteProperty</emphasis>
+ 1 19 opcode
+ 1 unused
+ 2 3 request length
+ 4 WINDOW window
+ 4 ATOM property
+
+<emphasis role='bold'>GetProperty</emphasis>
+ 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
+
+-&gt;
+ 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)
+
+<emphasis role='bold'>ListProperties</emphasis>
+ 1 21 opcode
+ 1 unused
+ 2 2 request length
+ 4 WINDOW window
+
+-&gt;
+ 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
+
+<emphasis role='bold'>SetSelectionOwner</emphasis>
+ 1 22 opcode
+ 1 unused
+ 2 4 request length
+ 4 WINDOW owner
+ 0 None
+ 4 ATOM selection
+ 4 TIMESTAMP time
+ 0 CurrentTime
+
+<emphasis role='bold'>GetSelectionOwner</emphasis>
+ 1 23 opcode
+ 1 unused
+ 2 2 request length
+ 4 ATOM selection
+
+-&gt;
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 WINDOW owner
+ 0 None
+ 20 unused
+
+<emphasis role='bold'>ConvertSelection</emphasis>
+ 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
+
+<emphasis role='bold'>SendEvent</emphasis>
+ 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 the Events section)
+
+<emphasis role='bold'>GrabPointer</emphasis>
+ 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
+
+-&gt;
+ 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
+
+<emphasis role='bold'>UngrabPointer</emphasis>
+ 1 27 opcode
+ 1 unused
+ 2 2 request length
+ 4 TIMESTAMP time
+ 0 CurrentTime
+
+<emphasis role='bold'>GrabButton</emphasis>
+ 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
+
+<emphasis role='bold'>UngrabButton</emphasis>
+ 1 29 opcode
+ 1 BUTTON button
+ 0 AnyButton
+ 2 3 request length
+ 4 WINDOW grab-window
+ 2 SETofKEYMASK modifiers
+ #x8000 AnyModifier
+ 2 unused
+
+<emphasis role='bold'>ChangeActivePointerGrab</emphasis>
+ 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
+
+<emphasis role='bold'>GrabKeyboard</emphasis>
+ 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
+
+-&gt;
+ 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
+
+<emphasis role='bold'>UngrabKeyboard</emphasis>
+ 1 32 opcode
+ 1 unused
+ 2 2 request length
+ 4 TIMESTAMP time
+ 0 CurrentTime
+
+<emphasis role='bold'>GrabKey</emphasis>
+ 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
+
+<emphasis role='bold'>UngrabKey</emphasis>
+ 1 34 opcode
+ 1 KEYCODE key
+ 0 AnyKey
+ 2 3 request length
+ 4 WINDOW grab-window
+ 2 SETofKEYMASK modifiers
+ #x8000 AnyModifier
+ 2 unused
+
+<emphasis role='bold'>AllowEvents</emphasis>
+ 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
+
+<emphasis role='bold'>GrabServer</emphasis>
+ 1 36 opcode
+ 1 unused
+ 2 1 request length
+
+<emphasis role='bold'>UngrabServer</emphasis>
+ 1 37 opcode
+ 1 unused
+ 2 1 request length
+
+<emphasis role='bold'>QueryPointer</emphasis>
+ 1 38 opcode
+ 1 unused
+ 2 2 request length
+ 4 WINDOW window
+
+-&gt;
+ 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
+
+<emphasis role='bold'>GetMotionEvents</emphasis>
+ 1 39 opcode
+ 1 unused
+ 2 4 request length
+ 4 WINDOW window
+ 4 TIMESTAMP start
+ 0 CurrentTime
+ 4 TIMESTAMP stop
+ 0 CurrentTime
+
+-&gt;
+ 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
+
+<emphasis role='bold'>TranslateCoordinates</emphasis>
+ 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
+-&gt;
+ 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
+
+<emphasis role='bold'>WarpPointer</emphasis>
+ 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
+
+<emphasis role='bold'>SetInputFocus</emphasis>
+ 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
+
+<emphasis role='bold'>GetInputFocus</emphasis>
+ 1 43 opcode
+ 1 unused
+ 2 1 request length
+
+-&gt;
+ 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
+
+<emphasis role='bold'>QueryKeymap</emphasis>
+ 1 44 opcode
+ 1 unused
+ 2 1 request length
+
+-&gt;
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 2 reply length
+ 32 LISTofCARD8 keys
+
+<emphasis role='bold'>OpenFont</emphasis>
+ 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)
+
+<emphasis role='bold'>CloseFont</emphasis>
+ 1 46 opcode
+ 1 unused
+ 2 2 request length
+ 4 FONT font
+
+<emphasis role='bold'>QueryFont</emphasis>
+ 1 47 opcode
+ 1 unused
+ 2 2 request length
+ 4 FONTABLE font
+
+-&gt;
+ 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
+
+<emphasis role='bold'>QueryTextExtents</emphasis>
+ 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)
+
+-&gt;
+ 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
+
+<emphasis role='bold'>ListFonts</emphasis>
+ 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)
+
+-&gt;
+ 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)
+
+<emphasis role='bold'>ListFontsWithInfo</emphasis>
+ 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)
+
+-&gt; (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
+
+-&gt; (last in series)
+ 1 1 Reply
+ 1 0 last-reply indicator
+ 2 CARD16 sequence number
+ 4 7 reply length
+ 52 unused
+
+<emphasis role='bold'>SetFontPath</emphasis>
+ 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)
+
+<emphasis role='bold'>GetFontPath</emphasis>
+ 1 52 opcode
+ 1 unused
+ 2 1 request list
+
+-&gt;
+ 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)
+
+<emphasis role='bold'>CreatePixmap</emphasis>
+ 1 53 opcode
+ 1 CARD8 depth
+ 2 4 request length
+ 4 PIXMAP pid
+ 4 DRAWABLE drawable
+ 2 CARD16 width
+ 2 CARD16 height
+
+<emphasis role='bold'>FreePixmap</emphasis>
+ 1 54 opcode
+ 1 unused
+ 2 2 request length
+ 4 PIXMAP pixmap
+
+<emphasis role='bold'>CreateGC</emphasis>
+ 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
+
+<emphasis role='bold'>ChangeGC</emphasis>
+ 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
+
+<emphasis role='bold'>CopyGC</emphasis>
+ 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
+
+<emphasis role='bold'>SetDashes</emphasis>
+ 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)
+
+<emphasis role='bold'>SetClipRectangles</emphasis>
+ 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
+
+<emphasis role='bold'>FreeGC</emphasis>
+ 1 60 opcode
+ 1 unused
+ 2 2 request length
+ 4 GCONTEXT gc
+
+<emphasis role='bold'>ClearArea</emphasis>
+ 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
+
+<emphasis role='bold'>CopyArea</emphasis>
+ 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
+
+<emphasis role='bold'>CopyPlane</emphasis>
+ 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
+
+<emphasis role='bold'>PolyPoint</emphasis>
+ 1 64 opcode
+ 1 coordinate-mode
+ 0 Origin
+ 1 Previous
+ 2 3+n request length
+ 4 DRAWABLE drawable
+ 4 GCONTEXT gc
+ 4n LISTofPOINT points
+
+<emphasis role='bold'>PolyLine</emphasis>
+ 1 65 opcode
+ 1 coordinate-mode
+ 0 Origin
+ 1 Previous
+ 2 3+n request length
+ 4 DRAWABLE drawable
+ 4 GCONTEXT gc
+ 4n LISTofPOINT points
+
+<emphasis role='bold'>PolySegment</emphasis>
+ 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
+
+<emphasis role='bold'>PolyRectangle</emphasis>
+ 1 67 opcode
+ 1 unused
+ 2 3+2n request length
+ 4 DRAWABLE drawable
+ 4 GCONTEXT gc
+ 8n LISTofRECTANGLE rectangles
+
+<emphasis role='bold'>PolyArc</emphasis>
+ 1 68 opcode
+ 1 unused
+ 2 3+3n request length
+ 4 DRAWABLE drawable
+ 4 GCONTEXT gc
+ 12n LISTofARC arcs
+
+<emphasis role='bold'>FillPoly</emphasis>
+ 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
+
+<emphasis role='bold'>PolyFillRectangle</emphasis>
+ 1 70 opcode
+ 1 unused
+ 2 3+2n request length
+ 4 DRAWABLE drawable
+ 4 GCONTEXT gc
+ 8n LISTofRECTANGLE rectangles
+
+<emphasis role='bold'>PolyFillArc</emphasis>
+ 1 71 opcode
+ 1 unused
+ 2 3+3n request length
+ 4 DRAWABLE drawable
+ 4 GCONTEXT gc
+ 12n LISTofARC arcs
+
+<emphasis role='bold'>PutImage</emphasis>
+ 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)
+
+<emphasis role='bold'>GetImage</emphasis>
+ 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
+
+-&gt;
+ 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)
+
+<emphasis role='bold'>PolyText8</emphasis>
+ 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)
+
+<emphasis role='bold'>PolyText16</emphasis>
+ 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)
+
+<emphasis role='bold'>ImageText8</emphasis>
+ 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)
+
+<emphasis role='bold'>ImageText16</emphasis>
+ 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)
+
+<emphasis role='bold'>CreateColormap</emphasis>
+ 1 78 opcode
+ 1 alloc
+ 0 None
+ 1 All
+ 2 4 request length
+ 4 COLORMAP mid
+ 4 WINDOW window
+ 4 VISUALID visual
+
+<emphasis role='bold'>FreeColormap</emphasis>
+ 1 79 opcode
+ 1 unused
+ 2 2 request length
+ 4 COLORMAP cmap
+
+<emphasis role='bold'>CopyColormapAndFree</emphasis>
+ 1 80 opcode
+ 1 unused
+ 2 3 request length
+ 4 COLORMAP mid
+ 4 COLORMAP src-cmap
+
+<emphasis role='bold'>InstallColormap</emphasis>
+ 1 81 opcode
+ 1 unused
+ 2 2 request length
+ 4 COLORMAP cmap
+
+<emphasis role='bold'>UninstallColormap</emphasis>
+ 1 82 opcode
+ 1 unused
+ 2 2 request length
+ 4 COLORMAP cmap
+
+<emphasis role='bold'>ListInstalledColormaps</emphasis>
+ 1 83 opcode
+ 1 unused
+ 2 2 request length
+ 4 WINDOW window
+
+-&gt;
+ 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
+
+<emphasis role='bold'>AllocColor</emphasis>
+ 1 84 opcode
+ 1 unused
+ 2 4 request length
+ 4 COLORMAP cmap
+ 2 CARD16 red
+ 2 CARD16 green
+ 2 CARD16 blue
+ 2 unused
+
+-&gt;
+ 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
+
+<emphasis role='bold'>AllocNamedColor</emphasis>
+ 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)
+
+-&gt;
+ 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
+
+<emphasis role='bold'>AllocColorCells</emphasis>
+ 1 86 opcode
+ 1 BOOL contiguous
+ 2 3 request length
+ 4 COLORMAP cmap
+ 2 CARD16 colors
+ 2 CARD16 planes
+
+-&gt;
+ 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
+
+<emphasis role='bold'>AllocColorPlanes</emphasis>
+ 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
+
+-&gt;
+ 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
+
+<emphasis role='bold'>FreeColors</emphasis>
+ 1 88 opcode
+ 1 unused
+ 2 3+n request length
+ 4 COLORMAP cmap
+ 4 CARD32 plane-mask
+ 4n LISTofCARD32 pixels
+
+<emphasis role='bold'>StoreColors</emphasis>
+ 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
+
+<emphasis role='bold'>StoreNamedColor</emphasis>
+ 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)
+
+<emphasis role='bold'>QueryColors</emphasis>
+ 1 91 opcode
+ 1 unused
+ 2 2+n request length
+ 4 COLORMAP cmap
+ 4n LISTofCARD32 pixels
+
+-&gt;
+ 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
+
+<emphasis role='bold'>LookupColor</emphasis>
+ 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)
+
+-&gt;
+ 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
+
+<emphasis role='bold'>CreateCursor</emphasis>
+ 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
+
+<emphasis role='bold'>CreateGlyphCursor</emphasis>
+ 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
+
+<emphasis role='bold'>FreeCursor</emphasis>
+ 1 95 opcode
+ 1 unused
+ 2 2 request length
+ 4 CURSOR cursor
+
+<emphasis role='bold'>RecolorCursor</emphasis>
+ 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
+
+<emphasis role='bold'>QueryBestSize</emphasis>
+ 1 97 opcode
+ 1 class
+ 0 Cursor
+ 1 Tile
+ 2 Stipple
+ 2 3 request length
+ 4 DRAWABLE drawable
+ 2 CARD16 width
+ 2 CARD16 height
+
+-&gt;
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 2 CARD16 width
+ 2 CARD16 height
+ 20 unused
+
+<emphasis role='bold'>QueryExtension</emphasis>
+ 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)
+
+-&gt;
+ 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
+
+<emphasis role='bold'>ListExtensions</emphasis>
+ 1 99 opcode
+ 1 unused
+ 2 1 request length
+
+-&gt;
+ 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)
+
+<emphasis role='bold'>ChangeKeyboardMapping</emphasis>
+ 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
+
+<emphasis role='bold'>GetKeyboardMapping</emphasis>
+ 1 101 opcode
+ 1 unused
+ 2 2 request length
+ 1 KEYCODE first-keycode
+ 1 m count
+ 2 unused
+
+-&gt;
+ 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
+
+<emphasis role='bold'>ChangeKeyboardControl</emphasis>
+ 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
+
+<emphasis role='bold'>GetKeyboardControl</emphasis>
+ 1 103 opcode
+ 1 unused
+ 2 1 request length
+
+-&gt;
+ 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
+
+<emphasis role='bold'>Bell</emphasis>
+ 1 104 opcode
+ 1 INT8 percent
+ 2 1 request length
+
+<emphasis role='bold'>ChangePointerControl</emphasis>
+ 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
+
+<emphasis role='bold'>GetPointerControl</emphasis>
+ 1 106 opcode
+ 1 unused
+ 2 1 request length
+
+-&gt;
+ 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
+
+<emphasis role='bold'>SetScreenSaver</emphasis>
+ 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
+
+<emphasis role='bold'>GetScreenSaver</emphasis>
+ 1 108 opcode
+ 1 unused
+ 2 1 request length
+
+-&gt;
+ 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
+
+<emphasis role='bold'>ChangeHosts</emphasis>
+ 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)
+
+<emphasis role='bold'>ListHosts</emphasis>
+ 1 110 opcode
+ 1 unused
+ 2 1 request length
+
+-&gt;
+ 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)
+
+<emphasis role='bold'>SetAccessControl</emphasis>
+ 1 111 opcode
+ 1 mode
+ 0 Disable
+ 1 Enable
+ 2 1 request length
+
+<emphasis role='bold'>SetCloseDownMode</emphasis>
+ 1 112 opcode
+ 1 mode
+ 0 Destroy
+ 1 RetainPermanent
+ 2 RetainTemporary
+ 2 1 request length
+
+<emphasis role='bold'>KillClient</emphasis>
+ 1 113 opcode
+ 1 unused
+ 2 2 request length
+ 4 CARD32 resource
+ 0 AllTemporary
+
+<emphasis role='bold'>RotateProperties</emphasis>
+ 1 114 opcode
+ 1 unused
+ 2 3+n request length
+ 4 WINDOW window
+ 2 n number of properties
+ 2 INT16 delta
+ 4n LISTofATOM properties
+
+<emphasis role='bold'>ForceScreenSaver</emphasis>
+ 1 115 opcode
+ 1 mode
+ 0 Reset
+ 1 Activate
+ 2 1 request length
+
+<emphasis role='bold'>SetPointerMapping</emphasis>
+ 1 116 opcode
+ 1 n length of map
+ 2 1+(n+p)/4 request length
+ n LISTofCARD8 map
+ p unused, p=pad(n)
+
+-&gt;
+ 1 1 Reply
+ 1 status
+ 0 Success
+ 1 Busy
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 24 unused
+
+<emphasis role='bold'>GetPointerMapping</emphasis>
+ 1 117 opcode
+ 1 unused
+ 2 1 request length
+
+-&gt;
+ 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)
+
+<emphasis role='bold'>SetModifierMapping</emphasis>
+ 1 118 opcode
+ 1 n keycodes-per-modifier
+ 2 1+2n request length
+ 8n LISTofKEYCODE keycodes
+
+-&gt;
+ 1 1 Reply
+ 1 status
+ 0 Success
+ 1 Busy
+ 2 Failed
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 24 unused
+
+<emphasis role='bold'>GetModifierMapping</emphasis>
+ 1 119 opcode
+ 1 unused
+ 2 1 request length
+
+-&gt;
+ 1 1 Reply
+ 1 n keycodes-per-modifier
+ 2 CARD16 sequence number
+ 4 2n reply length
+ 24 unused
+ 8n LISTofKEYCODE keycodes
+
+<emphasis role='bold'>NoOperation</emphasis>
+ 1 127 opcode
+ 1 unused
+ 2 1+n request length
+ 4n unused
+</literallayout>
+</sect1>
+
+<sect1 id="events_2">
+<title>Events</title>
+
+<literallayout class="monospaced">
+<emphasis role='bold'>KeyPress</emphasis>
+ 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
+
+<emphasis role='bold'>KeyRelease</emphasis>
+ 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
+
+<emphasis role='bold'>ButtonPress</emphasis>
+ 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
+
+<emphasis role='bold'>ButtonRelease</emphasis>
+ 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
+
+<emphasis role='bold'>MotionNotify</emphasis>
+ 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
+
+<emphasis role='bold'>EnterNotify</emphasis>
+ 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
+
+<emphasis role='bold'>LeaveNotify</emphasis>
+ 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
+
+<emphasis role='bold'>FocusIn</emphasis>
+ 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
+
+<emphasis role='bold'>FocusOut</emphasis>
+ 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
+
+<emphasis role='bold'>KeymapNotify</emphasis>
+ 1 11 code
+ 31 LISTofCARD8 keys (byte for keycodes 0-7 is
+ omitted)
+
+<emphasis role='bold'>Expose</emphasis>
+ 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
+
+<emphasis role='bold'>GraphicsExposure</emphasis>
+ 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
+
+<emphasis role='bold'>NoExposure</emphasis>
+ 1 14 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 DRAWABLE drawable
+ 2 CARD16 minor-opcode
+ 1 CARD8 major-opcode
+ 21 unused
+
+<emphasis role='bold'>VisibilityNotify</emphasis>
+ 1 15 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 WINDOW window
+ 1 state
+ 0 Unobscured
+ 1 PartiallyObscured
+ 2 FullyObscured
+ 23 unused
+
+<emphasis role='bold'>CreateNotify</emphasis>
+ 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
+
+<emphasis role='bold'>DestroyNotify</emphasis>
+ 1 17 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 WINDOW event
+ 4 WINDOW window
+ 20 unused
+
+<emphasis role='bold'>UnmapNotify</emphasis>
+ 1 18 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 WINDOW event
+ 4 WINDOW window
+ 1 BOOL from-configure
+ 19 unused
+
+<emphasis role='bold'>MapNotify</emphasis>
+ 1 19 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 WINDOW event
+ 4 WINDOW window
+ 1 BOOL override-redirect
+ 19 unused
+
+<emphasis role='bold'>MapRequest</emphasis>
+ 1 20 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 WINDOW parent
+ 4 WINDOW window
+ 20 unused
+
+<emphasis role='bold'>ReparentNotify</emphasis>
+ 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
+
+<emphasis role='bold'>ConfigureNotify</emphasis>
+ 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
+
+<emphasis role='bold'>ConfigureRequest</emphasis>
+ 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
+
+<emphasis role='bold'>GravityNotify</emphasis>
+ 1 24 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 WINDOW event
+ 4 WINDOW window
+ 2 INT16 x
+ 2 INT16 y
+ 16 unused
+
+<emphasis role='bold'>ResizeRequest</emphasis>
+ 1 25 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 WINDOW window
+ 2 CARD16 width
+ 2 CARD16 height
+ 20 unused
+
+<emphasis role='bold'>CirculateNotify</emphasis>
+ 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
+
+<emphasis role='bold'>CirculateRequest</emphasis>
+ 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
+
+<emphasis role='bold'>PropertyNotify</emphasis>
+ 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
+
+<emphasis role='bold'>SelectionClear</emphasis>
+ 1 29 code
+ 1 unused
+ 2 CARD16 sequence number
+ 4 TIMESTAMP time
+ 4 WINDOW owner
+ 4 ATOM selection
+ 16 unused
+
+<emphasis role='bold'>SelectionRequest</emphasis>
+ 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
+
+<emphasis role='bold'>SelectionNotify</emphasis>
+ 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
+
+<emphasis role='bold'>ColormapNotify</emphasis>
+ 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
+
+<emphasis role='bold'>ClientMessage</emphasis>
+ 1 33 code
+ 1 CARD8 format
+ 2 CARD16 sequence number
+ 4 WINDOW window
+ 4 ATOM type
+ 20 data
+
+<emphasis role='bold'>MappingNotify</emphasis>
+ 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..fca24b3
--- /dev/null
+++ b/specs/glossary.xml
@@ -0,0 +1,1313 @@
+<glossary id='glossary'>
+<title>Glossary</title>
+
+
+<glossentry>
+ <glossterm><function>Access control list</function></glossterm>
+ <glossdef>
+<!-- .IN "Access control list" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Active grab</function></glossterm>
+ <glossdef>
+<!-- .IN "Active grab" "" "@DEF@" -->
+ <para>
+A grab is active when the pointer or keyboard is actually owned by
+the single grabbing client.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>Ancestors</function></glossterm>
+ <glossdef>
+<!-- .IN "Ancestors" "" "@DEF@" -->
+ <para>
+If W is an inferior of A, then A is an ancestor of W.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>Atom</function></glossterm>
+ <glossdef>
+<!-- .IN "Atom" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Background</function></glossterm>
+ <glossdef>
+<!-- .IN "Background" "" "@DEF@" -->
+ <para>
+An
+<emphasis role='bold'>InputOutput </emphasis>
+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>
+ <glossterm><function>Backing store</function></glossterm>
+ <glossdef>
+<!-- .IN "Backing store" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Bit gravity</function></glossterm>
+ <glossdef>
+<!-- .IN "Bit" "gravity" "@DEF@" -->
+ <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>
+ <glossterm><function>Bit plane</function></glossterm>
+ <glossdef>
+<!-- .IN "Bit" "plane" "@DEF@" -->
+ <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>
+ <glossterm><function>Bitmap</function></glossterm>
+ <glossdef>
+<!-- .IN "Bitmap" "" "@DEF@" -->
+ <para>
+A bitmap is a pixmap of depth one.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>Border</function></glossterm>
+ <glossdef>
+<!-- .IN "Border" "" "@DEF@" -->
+ <para>
+An
+<emphasis role='bold'>InputOutput </emphasis>
+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>
+ <glossterm><function>Button grabbing</function></glossterm>
+ <glossdef>
+<!-- .IN "Button" "grabbing" "@DEF@" -->
+ <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>
+ <glossterm><function>Byte order</function></glossterm>
+ <glossdef>
+<!-- .IN "Byte order" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Children</function></glossterm>
+ <glossdef>
+<!-- .IN "Children" "" "@DEF@" -->
+ <para>
+The children of a window are its first-level subwindows.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>Client</function></glossterm>
+ <glossdef>
+<!-- .IN "Client" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Clipping region</function></glossterm>
+ <glossdef>
+<!-- .IN "Clipping region" "" "@DEF@" -->
+ <para>
+In a graphics context,
+a bitmap or list of rectangles can be specified
+to restrict output to a particular region of the window.
+The image defined by the bitmap or rectangles is called a clipping region.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>Colormap</function></glossterm>
+ <glossdef>
+<!-- .IN "Colormap" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Connection</function></glossterm>
+ <glossdef>
+<!-- .IN "Connection" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Containment</function></glossterm>
+ <glossdef>
+<!-- .IN "Containment" "" "@DEF@" -->
+ <para>
+A window ``contains'' the pointer if the window is viewable and the
+hotspot of the cursor is within a visible region of the window or a
+visible region of one of its inferiors.
+The border of the window is included as part of the window for containment.
+The pointer is ``in'' a window if the window contains the pointer
+but no inferior contains the pointer.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>Coordinate system</function></glossterm>
+ <glossdef>
+<!-- .IN "Coordinate system" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Cursor</function></glossterm>
+ <glossdef>
+<!-- .IN "Cursor" "" "@DEF@" -->
+ <para>
+A cursor is the visible shape of the pointer on a screen.
+It consists of a hot spot, 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>
+ <glossterm><function>Depth</function></glossterm>
+ <glossdef>
+<!-- .IN "Depth" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Device</function></glossterm>
+ <glossdef>
+<!-- .IN "Device" "" "@DEF@" -->
+ <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,
+``the keyboard'' and ``the pointer.''
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>DirectColor</function></glossterm>
+ <glossdef>
+<!-- .IN "DirectColor" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Display</function></glossterm>
+ <glossdef>
+<!-- .IN "Display" "" "@DEF@" -->
+ <para>
+A server, together with its screens and input devices, is called a display.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>Drawable</function></glossterm>
+ <glossdef>
+<!-- .IN "Drawable" "" "@DEF@" -->
+ <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
+<emphasis role='bold'>InputOnly </emphasis>
+window cannot be used as a source or destination in a graphics operation.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>Event</function></glossterm>
+ <glossdef>
+<!-- .IN "Event" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Event mask</function></glossterm>
+ <glossdef>
+<!-- .IN "Event" "mask" "@DEF@" -->
+ <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>
+ <glossterm><function>Event synchronization</function></glossterm>
+ <glossdef>
+<!-- .IN "Event" "synchronization" "@DEF@" -->
+ <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>
+ <glossterm><function>Event propagation</function></glossterm>
+ <glossdef>
+<!-- .IN "Event" "propagation" "@DEF@" -->
+ <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>
+ <glossterm><function>Event source</function></glossterm>
+ <glossdef>
+<!-- .IN "Event" "source" "@DEF@" -->
+ <para>
+The window the pointer is in is the source of a device-related
+event.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>Exposure event</function></glossterm>
+ <glossdef>
+<!-- .IN "Event" "Exposure" "@DEF@" -->
+ <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>
+ <glossterm><function>Extension</function></glossterm>
+ <glossdef>
+<!-- .IN "Extension" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Focus window</function></glossterm>
+ <glossdef>
+<!-- .IN "Focus window" "" ""@DEF@" -->
+ <para>
+The focus window is another term for the input focus.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>Font</function></glossterm>
+ <glossdef>
+<!-- .IN "Font" "" "@DEF@" -->
+ <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>
+ <glossterm><function>GC</function>, <function>GContext</function></glossterm>
+ <glossdef>
+<!-- .IN "GC" "" "@DEF@" -->
+<!-- .IN "GContext" "" "@DEF@" -->
+ <para>
+GC and gcontext are abbreviations for graphics context.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>Glyph</function></glossterm>
+ <glossdef>
+<!-- .IN "Glyph" "" "@DEF@" -->
+ <para>
+A glyph is an image, typically of a character, in a font.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>Grab</function></glossterm>
+ <glossdef>
+<!-- .IN "Grab" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Graphics context</function></glossterm>
+ <glossdef>
+<!-- .IN "Graphics context" "" "@DEF@" -->
+ <para>
+Various information for graphics output is stored in a graphics context
+such as foreground pixel, background pixel, line width, clipping region,
+and so on.
+A graphics context can only be used with drawables that have the same root
+and the same depth as the graphics context.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>Gravity</function></glossterm>
+ <glossdef>
+<!-- .IN "Gravity" "" "@DEF@" -->
+ <para>
+See <function>bit gravity</function> and <function>window gravity</function>.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>GrayScale</function></glossterm>
+ <glossdef>
+<!-- .IN "GrayScale" "" "@DEF@" -->
+ <para>
+<emphasis role='bold'>GrayScale </emphasis>
+can be viewed as a degenerate case of
+<emphasis role='bold'>PseudoColor , </emphasis>
+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>
+ <glossterm><function>Hotspot</function></glossterm>
+ <glossdef>
+<!-- .IN "Hotspot" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Identifier</function></glossterm>
+ <glossdef>
+<!-- .IN "Identifier" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Inferiors</function></glossterm>
+ <glossdef>
+<!-- .IN "Inferiors" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Input focus</function></glossterm>
+ <glossdef>
+<!-- .IN "Input focus" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Input manager</function></glossterm>
+ <glossdef>
+<!-- .IN "Input manager" "" "@DEF@" -->
+ <para>
+Control over keyboard input is typically provided by an input manager client.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>InputOnly window</function></glossterm>
+ <glossdef>
+<!-- .IN "Window" "InputOnly" "@DEF@" -->
+ <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>
+ <glossterm><function>InputOutput window</function></glossterm>
+ <glossdef>
+<!-- .IN "Window" "InputOutput" "@DEF@" -->
+ <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>
+ <glossterm><function>Key grabbing</function></glossterm>
+ <glossdef>
+<!-- .IN "Key" "grabbing" "@DEF@" -->
+ <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>
+ <glossterm><function>Keyboard grabbing</function></glossterm>
+ <glossdef>
+<!-- .IN "Keyboard" "grabbing" "@DEF@" -->
+ <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>
+ <glossterm><function>Keysym</function></glossterm>
+ <glossdef>
+<!-- .IN "Keysym" "" "@DEF@" -->
+ <para>
+An encoding of a symbol on a keycap on a keyboard.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>Mapped</function></glossterm>
+ <glossdef>
+<!-- .IN "Mapped window" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Modifier keys</function></glossterm>
+ <glossdef>
+<!-- .IN "Modifier keys" "" "@DEF@" -->
+ <para>
+Shift, Control, Meta, Super, Hyper, Alt, Compose, Apple, CapsLock,
+ShiftLock, and similar keys are called modifier keys.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>Monochrome</function></glossterm>
+ <glossdef>
+<!-- .IN "Monochrome" "" "@DEF@" -->
+ <para>
+Monochrome is a special case of
+<emphasis role='bold'>StaticGray </emphasis>
+in which there are only two colormap entries.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>Obscure</function></glossterm>
+ <glossdef>
+<!-- .IN "Obscure" "" "@DEF@" -->
+ <para>
+A window is obscured if some other window obscures it.
+Window A obscures window B if both are viewable
+<emphasis role='bold'>InputOutput </emphasis>
+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>
+ <glossterm><function>Occlude</function></glossterm>
+ <glossdef>
+<!-- .IN "Occlude" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Padding</function></glossterm>
+ <glossdef>
+<!-- .IN "Padding" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Parent window</function></glossterm>
+ <glossdef>
+<!-- .IN "Window" "parent" "@DEF@" -->
+ <para>
+If C is a child of P, then P is the parent of C.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>Passive grab</function></glossterm>
+ <glossdef>
+<!-- .IN "Passive grab" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Pixel value</function></glossterm>
+ <glossdef>
+<!-- .IN "Pixel value" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Pixmap</function></glossterm>
+ <glossdef>
+<!-- .IN "Pixmap" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Plane</function></glossterm>
+ <glossdef>
+<!-- .IN "Plane" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Plane mask</function></glossterm>
+ <glossdef>
+<!-- .IN "Plane" "mask" "@DEF@" -->
+ <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>
+ <glossterm><function>Pointer</function></glossterm>
+ <glossdef>
+<!-- .IN "Pointer" "" "@DEF@" -->
+ <para>
+The pointer is the pointing device attached to the cursor
+and tracked on the screens.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>Pointer grabbing</function></glossterm>
+ <glossdef>
+<!-- .IN "Pointer" "grabbing" "@DEF@" -->
+ <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>
+ <glossterm><function>Pointing device</function></glossterm>
+ <glossdef>
+<!-- .IN "Pointing device" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Property</function></glossterm>
+ <glossdef>
+<!-- .IN "Property" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Property list</function></glossterm>
+ <glossdef>
+<!-- .IN "Property list" "" "@DEF@" -->
+ <para>
+The property list of a window is the list of properties that have
+been defined for the window.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>PseudoColor</function></glossterm>
+ <glossdef>
+<!-- .IN "PseudoColor" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Redirecting control</function></glossterm>
+ <glossdef>
+<!-- .IN "Redirecting control" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Reply</function></glossterm>
+ <glossdef>
+<!-- .IN "Reply" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Request</function></glossterm>
+ <glossdef>
+<!-- .IN "Request" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Resource</function></glossterm>
+ <glossdef>
+<!-- .IN "Resource" "" "@DEF@" -->
+ <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>
+ <glossterm><function>RGB values</function></glossterm>
+ <glossdef>
+<!-- .IN "RGB values" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Root</function></glossterm>
+ <glossdef>
+<!-- .IN "Root" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Root window</function></glossterm>
+ <glossdef>
+<!-- .IN "Window" "root" "@DEF@" -->
+ <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>
+ <glossterm><function>Save set</function></glossterm>
+ <glossdef>
+<!-- .IN "Save set" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Scanline</function></glossterm>
+ <glossdef>
+<!-- .IN "Scanline" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Scanline order</function></glossterm>
+ <glossdef>
+<!-- .IN "Scanline order" "" "@DEF@" -->
+ <para>
+An image represented in scanline order contains scanlines ordered by
+increasing y coordinate.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>Screen</function></glossterm>
+ <glossdef>
+<!-- .IN "Screen" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Selection</function></glossterm>
+ <glossdef>
+<!-- .IN "Selection" "" "@DEF@" -->
+ <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 ``owner'').
+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 ``target type''.
+This target type can be used to control the transmitted representation of the
+contents.
+For example,
+if the selection is ``the last thing the user clicked on''
+and that is currently an image, then the target type might specify
+whether the contents of the image should be sent in XY format or Z format.
+The target type can also be used to control the class of contents transmitted;
+for example, asking for the ``looks'' (fonts, line
+spacing, indentation, and so 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>
+ <glossterm><function>Server</function></glossterm>
+ <glossdef>
+<!-- .IN "Server" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Server grabbing</function></glossterm>
+ <glossdef>
+<!-- .IN "Server" "grabbing" "@DEF@" -->
+ <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>
+ <glossterm><function>Sibling</function></glossterm>
+ <glossdef>
+<!-- .IN "Sibling" "" "@DEF@" -->
+ <para>
+Children of the same parent window are known as sibling windows.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>Stacking order</function></glossterm>
+ <glossdef>
+<!-- .IN "Stacking order" "" "@DEF@" -->
+ <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>
+ <glossterm><function>StaticColor</function></glossterm>
+ <glossdef>
+<!-- .IN "StaticColor" "" "@DEF@" -->
+ <para>
+<emphasis role='bold'>StaticColor </emphasis>
+can be viewed as a degenerate case of
+<emphasis role='bold'>PseudoColor</emphasis>
+in which the RGB values are predefined and read-only.
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>StaticGray</function></glossterm>
+ <glossdef>
+<!-- .IN "StaticGray" "" "@DEF@" -->
+ <para>
+<emphasis role='bold'>StaticGray </emphasis>
+can be viewed as a degenerate case of
+<emphasis role='bold'>GrayScale</emphasis>
+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>
+ <glossterm><function>Stipple</function></glossterm>
+ <glossdef>
+<!-- .IN "Stipple" "" "@DEF@" -->
+ <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>
+ <glossterm><function>String Equivalence</function></glossterm>
+ <glossdef>
+<!-- .IN "String Equivalence" "" "@DEF@" -->
+ <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 ``A'' to ``Z'') are
+pairwise equivalent to decimal values 97 to 122 inclusive
+(characters ``a'' to ``z''), decimal values 192 to 214 inclusive
+(characters ``A grave'' to ``O diaeresis'') are pairwise equivalent to decimal
+values 224 to 246 inclusive (characters ``a grave'' to ``o diaeresis''),
+and decimal values 216 to 222 inclusive (characters ``O oblique'' to ``THORN'')
+are pairwise equivalent to decimal values 246 to 254 inclusive
+(characters ``o oblique'' to ``thorn'').
+<!-- .KE -->
+ </para>
+ </glossdef>
+</glossentry>
+<glossentry>
+ <glossterm><function>Tile</function></glossterm>
+ <glossdef>
+<!-- .IN "Tile" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Timestamp</function></glossterm>
+ <glossdef>
+<!-- .IN "Timestamp" "" "@DEF@" -->
+ <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>
+ <glossterm><function>TrueColor</function></glossterm>
+ <glossdef>
+<!-- .IN "TrueColor" "" "@DEF@" -->
+ <para>
+<emphasis role='bold'>TrueColor</emphasis>
+can be viewed as a degenerate case of
+<emphasis role='bold'>DirectColor</emphasis>
+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>
+ <glossterm><function>Type</function></glossterm>
+ <glossdef>
+<!-- .IN "Type" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Viewable</function></glossterm>
+ <glossdef>
+<!-- .IN "Viewable" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Visible</function></glossterm>
+ <glossdef>
+<!-- .IN "Visible" "" "@DEF@" -->
+ <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>
+ <glossterm><function>Window gravity</function></glossterm>
+ <glossdef>
+<!-- .IN "Window" "gravity" "@DEF@" -->
+ <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>
+ <glossterm><function>Window manager</function></glossterm>
+ <glossdef>
+<!-- .IN "Window" "manager" "@DEF@" -->
+ <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>
+ <glossterm><function>XYFormat</function></glossterm>
+ <glossdef>
+<!-- .IN "XYFormat" "" "@DEF@" -->
+ <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>
+ <glossterm><function>ZFormat</function></glossterm>
+ <glossdef>
+<!-- .IN "ZFormat" "" "@DEF@" -->
+ <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..66c9702
--- /dev/null
+++ b/specs/keysyms.xml
@@ -0,0 +1,6038 @@
+<appendix id="keysym_encoding">
+<title>KEYSYM Encoding</title>
+
+<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:
+<emphasis role='bold'>NoSymbol </emphasis>
+and
+<emphasis role='bold'>VoidSymbol .</emphasis>
+They are used to indicate the absence of symbols (see section 5).
+</para> <!-- xref -->
+
+<informaltable frame="topbot">
+ <tgroup cols='6' align='left'>
+ <colspec colname='c1' colsep="0"/>
+ <colspec colname='c2' colsep="0"/>
+ <colspec colname='c3' colsep="0"/>
+ <colspec colname='c4' colsep="0"/>
+ <colspec colname='c5' colsep="0"/>
+ <colspec colname='c6' colsep="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 rowsep="0">
+ <entry>0</entry>
+ <entry>0</entry>
+ <entry>0</entry>
+ <entry>0</entry>
+ <entry>#x00000000</entry>
+ <entry><emphasis role='bold'>NoSymbol</emphasis></entry>
+ </row>
+ <row rowsep="0">
+ <entry>0</entry>
+ <entry>255</entry>
+ <entry>255</entry>
+ <entry>255</entry>
+ <entry>#x00FFFFFF</entry>
+ <entry><emphasis role='bold'>VoidSymbol</emphasis></entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+</sect1>
+
+<sect1 id="latin_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>
+
+<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">
+ <tgroup cols='2' align='left'>
+ <colspec colname='c1' colsep="0"/>
+ <colspec colname='c2' colsep="0"/>
+ <thead>
+ <row rowsep="1">
+ <entry>Byte 3</entry>
+ <entry>Byte 4</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row rowsep="0">
+ <entry>255</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>254</entry>
+ <entry>Keyboard (XKB) Extension</entry>
+ </row>
+ <row rowsep="0">
+ <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'>
+ <colspec colname='c1' colwidth='1*' colsep="0"/>
+ <colspec colname='c2' colwidth='3*' colsep="0"/>
+ <colspec colname='c3' colwidth='1*' colsep="0"/>
+ <thead>
+ <row rowsep="1">
+ <entry>KEYSYM value</entry>
+ <entry>Name</entry>
+ <entry>Set</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row rowsep="0">
+ <entry>#xFF08</entry>
+ <entry>BACKSPACE, BACK SPACE, BACK CHAR</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF09</entry>
+ <entry>TAB</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF0A</entry>
+ <entry>LINEFEED, LF</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF0B</entry>
+ <entry>CLEAR</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF0D</entry>
+ <entry>RETURN, ENTER</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF13</entry>
+ <entry>PAUSE, HOLD</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF14</entry>
+ <entry>SCROLL LOCK</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF15</entry>
+ <entry>SYS REQ, SYSTEM REQUEST</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF1B</entry>
+ <entry>ESCAPE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF20</entry>
+ <entry>MULTI-KEY CHARACTER PREFACE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF21</entry>
+ <entry>KANJI, KANJI CONVERT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF22</entry>
+ <entry>MUHENKAN</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF23</entry>
+ <entry>HENKAN MODE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF24</entry>
+ <entry>ROMAJI</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF25</entry>
+ <entry>HIRAGANA</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF26</entry>
+ <entry>KATAKANA</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF27</entry>
+ <entry>HIRAGANA/KATAKANA TOGGLE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF28</entry>
+ <entry>ZENKAKU</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF29</entry>
+ <entry>HANKAKU</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF2A</entry>
+ <entry>ZENKAKU/HANKAKU TOGGLE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF2B</entry>
+ <entry>TOUROKU</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF2C</entry>
+ <entry>MASSYO</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF2D</entry>
+ <entry>KANA LOCK</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF2E</entry>
+ <entry>KANA SHIFT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF2F</entry>
+ <entry>EISU SHIFT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF30</entry>
+ <entry>EISU TOGGLE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF31</entry>
+ <entry>HANGUL START/STOP (TOGGLE)</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF32</entry>
+ <entry>HANGUL START</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF33</entry>
+ <entry>HANGUL END, ENGLISH START</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF34</entry>
+ <entry>START HANGUL/HANJA CONVERSION</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF35</entry>
+ <entry>HANGUL JAMO MODE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF36</entry>
+ <entry>HANGUL ROMAJA MODE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF37</entry>
+ <entry>HANGUL CODE INPUT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF38</entry>
+ <entry>HANGUL JEONJA MODE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF39</entry>
+ <entry>HANGUL BANJA MODE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF3A</entry>
+ <entry>HANGUL PREHANJA CONVERSION</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF3B</entry>
+ <entry>HANGUL POSTHANJA CONVERSION</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF3C</entry>
+ <entry>HANGUL SINGLE CANDIDATE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF3D</entry>
+ <entry>HANGUL MULTIPLE CANDIDATE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF3E</entry>
+ <entry>HANGUL PREVIOUS CANDIDATE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF3F</entry>
+ <entry>HANGUL SPECIAL SYMBOLS</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF50</entry>
+ <entry>HOME</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF51</entry>
+ <entry>LEFT, MOVE LEFT, LEFT ARROW</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF52</entry>
+ <entry>UP, MOVE UP, UP ARROW</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF53</entry>
+ <entry>RIGHT, MOVE RIGHT, RIGHT ARROW</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF54</entry>
+ <entry>DOWN, MOVE DOWN, DOWN ARROW</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF55</entry>
+ <entry>PRIOR, PREVIOUS, PAGE UP</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF56</entry>
+ <entry>NEXT, PAGE DOWN</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF57</entry>
+ <entry>END, EOL</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF58</entry>
+ <entry>BEGIN, BOL</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF60</entry>
+ <entry>SELECT, MARK</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF61</entry>
+ <entry>PRINT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF62</entry>
+ <entry>EXECUTE, RUN, DO</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF63</entry>
+ <entry>INSERT, INSERT HERE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF65</entry>
+ <entry>UNDO, OOPS</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF66</entry>
+ <entry>REDO, AGAIN</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF67</entry>
+ <entry>MENU</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF68</entry>
+ <entry>FIND, SEARCH</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF69</entry>
+ <entry>CANCEL, STOP, ABORT, EXIT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF6A</entry>
+ <entry>HELP</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF6B</entry>
+ <entry>BREAK</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF7E</entry>
+ <entry>MODE SWITCH, SCRIPT SWITCH, CHARACTER SET SWITCH</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF7F</entry>
+ <entry>NUM LOCK</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF80</entry>
+ <entry>KEYPAD SPACE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF89</entry>
+ <entry>KEYPAD TAB</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF8D</entry>
+ <entry>KEYPAD ENTER</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF91</entry>
+ <entry>KEYPAD F1, PF1, A</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF92</entry>
+ <entry>KEYPAD F2, PF2, B</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF93</entry>
+ <entry>KEYPAD F3, PF3, C</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF94</entry>
+ <entry>KEYPAD F4, PF4, D</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF95</entry>
+ <entry>KEYPAD HOME</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF96</entry>
+ <entry>KEYPAD LEFT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF97</entry>
+ <entry>KEYPAD UP</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF98</entry>
+ <entry>KEYPAD RIGHT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF99</entry>
+ <entry>KEYPAD DOWN</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF9A</entry>
+ <entry>KEYPAD PRIOR, PAGE UP</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF9B</entry>
+ <entry>KEYPAD NEXT, PAGE DOWN</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF9C</entry>
+ <entry>KEYPAD END</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF9D</entry>
+ <entry>KEYPAD BEGIN</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF9E</entry>
+ <entry>KEYPAD INSERT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFF9F</entry>
+ <entry>KEYPAD DELETE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFAA</entry>
+ <entry>KEYPAD MULTIPLICATION SIGN, ASTERISK</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFAB</entry>
+ <entry>KEYPAD PLUS SIGN</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFAC</entry>
+ <entry>KEYPAD SEPARATOR, COMMA</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFAD</entry>
+ <entry>KEYPAD MINUS SIGN, HYPHEN</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFAE</entry>
+ <entry>KEYPAD DECIMAL POINT, FULL STOP</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFAF</entry>
+ <entry>KEYPAD DIVISION SIGN, SOLIDUS</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFB0</entry>
+ <entry>KEYPAD DIGIT ZERO</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFB1</entry>
+ <entry>KEYPAD DIGIT ONE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFB2</entry>
+ <entry>KEYPAD DIGIT TWO</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFB3</entry>
+ <entry>KEYPAD DIGIT THREE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFB4</entry>
+ <entry>KEYPAD DIGIT FOUR</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFB5</entry>
+ <entry>KEYPAD DIGIT FIVE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFB6</entry>
+ <entry>KEYPAD DIGIT SIX</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFB7</entry>
+ <entry>KEYPAD DIGIT SEVEN</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFB8</entry>
+ <entry>KEYPAD DIGIT EIGHT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFB9</entry>
+ <entry>KEYPAD DIGIT NINE</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFBD</entry>
+ <entry>KEYPAD EQUALS SIGN</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFBE</entry>
+ <entry>F1</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFBF</entry>
+ <entry>F2</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFC0</entry>
+ <entry>F3</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFC1</entry>
+ <entry>F4</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFC2</entry>
+ <entry>F5</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFC3</entry>
+ <entry>F6</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFC4</entry>
+ <entry>F7</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFC5</entry>
+ <entry>F8</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFC6</entry>
+ <entry>F9</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFC7</entry>
+ <entry>F10</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFC8</entry>
+ <entry>F11, L1</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFC9</entry>
+ <entry>F12, L2</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFCA</entry>
+ <entry>F13, L3</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFCB</entry>
+ <entry>F14, L4</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFCC</entry>
+ <entry>F15, L5</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFCD</entry>
+ <entry>F16, L6</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFCE</entry>
+ <entry>F17, L7</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFCF</entry>
+ <entry>F18, L8</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFD0</entry>
+ <entry>F19, L9</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFD1</entry>
+ <entry>F20, L10</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFD2</entry>
+ <entry>F21, R1</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFD3</entry>
+ <entry>F22, R2</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFD4</entry>
+ <entry>F23, R3</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFD5</entry>
+ <entry>F24, R4</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFD6</entry>
+ <entry>F25, R5</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFD7</entry>
+ <entry>F26, R6</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFD8</entry>
+ <entry>F27, R7</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFD9</entry>
+ <entry>F28, R8</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFDA</entry>
+ <entry>F29, R9</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFDB</entry>
+ <entry>F30, R10</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFDC</entry>
+ <entry>F31, R11</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFDD</entry>
+ <entry>F32, R12</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFDE</entry>
+ <entry>F33, R13</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFDF</entry>
+ <entry>F34, R14</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFE0</entry>
+ <entry>F35, R15</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFE1</entry>
+ <entry>LEFT SHIFT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFE2</entry>
+ <entry>RIGHT SHIFT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFE3</entry>
+ <entry>LEFT CONTROL</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFE4</entry>
+ <entry>RIGHT CONTROL</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFE5</entry>
+ <entry>CAPS LOCK</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFE6</entry>
+ <entry>SHIFT LOCK</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFE7</entry>
+ <entry>LEFT META</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFE8</entry>
+ <entry>RIGHT META</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFE9</entry>
+ <entry>LEFT ALT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFEA</entry>
+ <entry>RIGHT ALT</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFEB</entry>
+ <entry>LEFT SUPER</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFEC</entry>
+ <entry>RIGHT SUPER</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFED</entry>
+ <entry>LEFT HYPER</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFFEE</entry>
+ <entry>RIGHT HYPER</entry>
+ <entry>Keyboard</entry>
+ </row>
+ <row rowsep="0">
+ <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'>
+ <colspec colname='c1' colwidth='1*' colsep="0"/>
+ <colspec colname='c2' colwidth='3*' colsep="0"/>
+ <colspec colname='c3' colwidth='1*' colsep="0"/>
+ <thead>
+ <row rowsep="1">
+ <entry>KEYSYM value</entry>
+ <entry>Name</entry>
+ <entry>Set</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row rowsep="0">
+ <entry>#xFD01</entry>
+ <entry>3270 DUPLICATE</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD02</entry>
+ <entry>3270 FIELDMARK</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD03</entry>
+ <entry>3270 RIGHT2</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD04</entry>
+ <entry>3270 LEFT2</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD05</entry>
+ <entry>3270 BACKTAB</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD06</entry>
+ <entry>3270 ERASEEOF</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD07</entry>
+ <entry>3270 ERASEINPUT</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD08</entry>
+ <entry>3270 RESET</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD09</entry>
+ <entry>3270 QUIT</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD0A</entry>
+ <entry>3270 PA1</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD0B</entry>
+ <entry>3270 PA2</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD0C</entry>
+ <entry>3270 PA3</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD0D</entry>
+ <entry>3270 TEST</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD0E</entry>
+ <entry>3270 ATTN</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD0F</entry>
+ <entry>3270 CURSORBLINK</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD10</entry>
+ <entry>3270 ALTCURSOR</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD11</entry>
+ <entry>3270 KEYCLICK</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD12</entry>
+ <entry>3270 JUMP</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD13</entry>
+ <entry>3270 IDENT</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD14</entry>
+ <entry>3270 RULE</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD15</entry>
+ <entry>3270 COPY</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD16</entry>
+ <entry>3270 PLAY</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD17</entry>
+ <entry>3270 SETUP</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD18</entry>
+ <entry>3270 RECORD</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD19</entry>
+ <entry>3270 CHANGESCREEN</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD1A</entry>
+ <entry>3270 DELETEWORD</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD1B</entry>
+ <entry>3270 EXSELECT</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD1C</entry>
+ <entry>3270 CURSORSELECT</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#xFD1D</entry>
+ <entry>3270 PRINTSCREEN</entry>
+ <entry>3270</entry>
+ </row>
+ <row rowsep="0">
+ <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'>
+ <colspec colname='c1' colwidth='1*' colsep="0"/>
+ <colspec colname='c2' colwidth='2*' colsep="0"/>
+ <colspec colname='c3' colwidth='1*' colsep="0"/>
+ <colspec colname='c4' colwidth='1*' colsep="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 rowsep="0">
+ <entry>1</entry>
+ <entry>Latin-2</entry>
+ <entry>11</entry>
+ <entry>APL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>2</entry>
+ <entry>Latin-3</entry>
+ <entry>12</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>3</entry>
+ <entry>Latin-4</entry>
+ <entry>13</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>4</entry>
+ <entry>Kana</entry>
+ <entry>14</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>5</entry>
+ <entry>Arabic</entry>
+ <entry>15</entry>
+ <entry>Latin-5</entry>
+ </row>
+ <row rowsep="0">
+ <entry>6</entry>
+ <entry>Cyrillic</entry>
+ <entry>16</entry>
+ <entry>Latin-6</entry>
+ </row>
+ <row rowsep="0">
+ <entry>7</entry>
+ <entry>Greek</entry>
+ <entry>17</entry>
+ <entry>Latin-7</entry>
+ </row>
+ <row rowsep="0">
+ <entry>8</entry>
+ <entry>Technical</entry>
+ <entry>18</entry>
+ <entry>Latin-8</entry>
+ </row>
+ <row rowsep="0">
+ <entry>9</entry>
+ <entry>Special</entry>
+ <entry>19</entry>
+ <entry>Latin-9</entry>
+ </row>
+ <row rowsep="0">
+ <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'>
+ <colspec colname='c1' colwidth='1*' colsep="0"/>
+ <colspec colname='c2' colwidth='1*' colsep="0"/>
+ <colspec colname='c3' colwidth='5*' colsep="0"/>
+ <colspec colname='c4' colwidth='1*' colsep="0"/>
+ <thead>
+ <row rowsep="1">
+ <entry>KEYSYM value</entry>
+ <entry>Unicode value</entry>
+ <entry>Name</entry>
+ <entry>Set</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row rowsep="0">
+ <entry>#x01A1</entry>
+ <entry>U+0104</entry>
+ <entry>LATIN CAPITAL LETTER A WITH OGONEK</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01A2</entry>
+ <entry>U+02D8</entry>
+ <entry>BREVE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01A3</entry>
+ <entry>U+0141</entry>
+ <entry>LATIN CAPITAL LETTER L WITH STROKE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01A5</entry>
+ <entry>U+013D</entry>
+ <entry>LATIN CAPITAL LETTER L WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01A6</entry>
+ <entry>U+015A</entry>
+ <entry>LATIN CAPITAL LETTER S WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01A9</entry>
+ <entry>U+0160</entry>
+ <entry>LATIN CAPITAL LETTER S WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01AA</entry>
+ <entry>U+015E</entry>
+ <entry>LATIN CAPITAL LETTER S WITH CEDILLA</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01AB</entry>
+ <entry>U+0164</entry>
+ <entry>LATIN CAPITAL LETTER T WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01AC</entry>
+ <entry>U+0179</entry>
+ <entry>LATIN CAPITAL LETTER Z WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01AE</entry>
+ <entry>U+017D</entry>
+ <entry>LATIN CAPITAL LETTER Z WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01AF</entry>
+ <entry>U+017B</entry>
+ <entry>LATIN CAPITAL LETTER Z WITH DOT ABOVE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01B1</entry>
+ <entry>U+0105</entry>
+ <entry>LATIN SMALL LETTER A WITH OGONEK</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01B2</entry>
+ <entry>U+02DB</entry>
+ <entry>OGONEK</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01B3</entry>
+ <entry>U+0142</entry>
+ <entry>LATIN SMALL LETTER L WITH STROKE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01B5</entry>
+ <entry>U+013E</entry>
+ <entry>LATIN SMALL LETTER L WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01B6</entry>
+ <entry>U+015B</entry>
+ <entry>LATIN SMALL LETTER S WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01B7</entry>
+ <entry>U+02C7</entry>
+ <entry>CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01B9</entry>
+ <entry>U+0161</entry>
+ <entry>LATIN SMALL LETTER S WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01BA</entry>
+ <entry>U+015F</entry>
+ <entry>LATIN SMALL LETTER S WITH CEDILLA</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01BB</entry>
+ <entry>U+0165</entry>
+ <entry>LATIN SMALL LETTER T WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01BC</entry>
+ <entry>U+017A</entry>
+ <entry>LATIN SMALL LETTER Z WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01BD</entry>
+ <entry>U+02DD</entry>
+ <entry>DOUBLE ACUTE ACCENT</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01BE</entry>
+ <entry>U+017E</entry>
+ <entry>LATIN SMALL LETTER Z WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01BF</entry>
+ <entry>U+017C</entry>
+ <entry>LATIN SMALL LETTER Z WITH DOT ABOVE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01C0</entry>
+ <entry>U+0154</entry>
+ <entry>LATIN CAPITAL LETTER R WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01C3</entry>
+ <entry>U+0102</entry>
+ <entry>LATIN CAPITAL LETTER A WITH BREVE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01C5</entry>
+ <entry>U+0139</entry>
+ <entry>LATIN CAPITAL LETTER L WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01C6</entry>
+ <entry>U+0106</entry>
+ <entry>LATIN CAPITAL LETTER C WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01C8</entry>
+ <entry>U+010C</entry>
+ <entry>LATIN CAPITAL LETTER C WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01CA</entry>
+ <entry>U+0118</entry>
+ <entry>LATIN CAPITAL LETTER E WITH OGONEK</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01CC</entry>
+ <entry>U+011A</entry>
+ <entry>LATIN CAPITAL LETTER E WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01CF</entry>
+ <entry>U+010E</entry>
+ <entry>LATIN CAPITAL LETTER D WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01D0</entry>
+ <entry>U+0110</entry>
+ <entry>LATIN CAPITAL LETTER D WITH STROKE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01D1</entry>
+ <entry>U+0143</entry>
+ <entry>LATIN CAPITAL LETTER N WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01D2</entry>
+ <entry>U+0147</entry>
+ <entry>LATIN CAPITAL LETTER N WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01D5</entry>
+ <entry>U+0150</entry>
+ <entry>LATIN CAPITAL LETTER O WITH DOUBLE ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01D8</entry>
+ <entry>U+0158</entry>
+ <entry>LATIN CAPITAL LETTER R WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01D9</entry>
+ <entry>U+016E</entry>
+ <entry>LATIN CAPITAL LETTER U WITH RING ABOVE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01DB</entry>
+ <entry>U+0170</entry>
+ <entry>LATIN CAPITAL LETTER U WITH DOUBLE ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01DE</entry>
+ <entry>U+0162</entry>
+ <entry>LATIN CAPITAL LETTER T WITH CEDILLA</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01E0</entry>
+ <entry>U+0155</entry>
+ <entry>LATIN SMALL LETTER R WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01E3</entry>
+ <entry>U+0103</entry>
+ <entry>LATIN SMALL LETTER A WITH BREVE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01E5</entry>
+ <entry>U+013A</entry>
+ <entry>LATIN SMALL LETTER L WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01E6</entry>
+ <entry>U+0107</entry>
+ <entry>LATIN SMALL LETTER C WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01E8</entry>
+ <entry>U+010D</entry>
+ <entry>LATIN SMALL LETTER C WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01EA</entry>
+ <entry>U+0119</entry>
+ <entry>LATIN SMALL LETTER E WITH OGONEK</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01EC</entry>
+ <entry>U+011B</entry>
+ <entry>LATIN SMALL LETTER E WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01EF</entry>
+ <entry>U+010F</entry>
+ <entry>LATIN SMALL LETTER D WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01F0</entry>
+ <entry>U+0111</entry>
+ <entry>LATIN SMALL LETTER D WITH STROKE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01F1</entry>
+ <entry>U+0144</entry>
+ <entry>LATIN SMALL LETTER N WITH ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01F2</entry>
+ <entry>U+0148</entry>
+ <entry>LATIN SMALL LETTER N WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01F5</entry>
+ <entry>U+0151</entry>
+ <entry>LATIN SMALL LETTER O WITH DOUBLE ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01F8</entry>
+ <entry>U+0159</entry>
+ <entry>LATIN SMALL LETTER R WITH CARON</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01F9</entry>
+ <entry>U+016F</entry>
+ <entry>LATIN SMALL LETTER U WITH RING ABOVE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01FB</entry>
+ <entry>U+0171</entry>
+ <entry>LATIN SMALL LETTER U WITH DOUBLE ACUTE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01FE</entry>
+ <entry>U+0163</entry>
+ <entry>LATIN SMALL LETTER T WITH CEDILLA</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x01FF</entry>
+ <entry>U+02D9</entry>
+ <entry>DOT ABOVE</entry>
+ <entry>Latin-2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x02A1</entry>
+ <entry>U+0126</entry>
+ <entry>LATIN CAPITAL LETTER H WITH STROKE</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x02A6</entry>
+ <entry>U+0124</entry>
+ <entry>LATIN CAPITAL LETTER H WITH CIRCUMFLEX</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x02A9</entry>
+ <entry>U+0130</entry>
+ <entry>LATIN CAPITAL LETTER I WITH DOT ABOVE</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x02AB</entry>
+ <entry>U+011E</entry>
+ <entry>LATIN CAPITAL LETTER G WITH BREVE</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x02AC</entry>
+ <entry>U+0134</entry>
+ <entry>LATIN CAPITAL LETTER J WITH CIRCUMFLEX</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x02B1</entry>
+ <entry>U+0127</entry>
+ <entry>LATIN SMALL LETTER H WITH STROKE</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x02B6</entry>
+ <entry>U+0125</entry>
+ <entry>LATIN SMALL LETTER H WITH CIRCUMFLEX</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x02B9</entry>
+ <entry>U+0131</entry>
+ <entry>LATIN SMALL LETTER DOTLESS I</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x02BB</entry>
+ <entry>U+011F</entry>
+ <entry>LATIN SMALL LETTER G WITH BREVE</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x02BC</entry>
+ <entry>U+0135</entry>
+ <entry>LATIN SMALL LETTER J WITH CIRCUMFLEX</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x02C5</entry>
+ <entry>U+010A</entry>
+ <entry>LATIN CAPITAL LETTER C WITH DOT ABOVE</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x02C6</entry>
+ <entry>U+0108</entry>
+ <entry>LATIN CAPITAL LETTER C WITH CIRCUMFLEX</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x02D5</entry>
+ <entry>U+0120</entry>
+ <entry>LATIN CAPITAL LETTER G WITH DOT ABOVE</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x02D8</entry>
+ <entry>U+011C</entry>
+ <entry>LATIN CAPITAL LETTER G WITH CIRCUMFLEX</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x02DD</entry>
+ <entry>U+016C</entry>
+ <entry>LATIN CAPITAL LETTER U WITH BREVE</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x02DE</entry>
+ <entry>U+015C</entry>
+ <entry>LATIN CAPITAL LETTER S WITH CIRCUMFLEX</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x02E5</entry>
+ <entry>U+010B</entry>
+ <entry>LATIN SMALL LETTER C WITH DOT ABOVE</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x02E6</entry>
+ <entry>U+0109</entry>
+ <entry>LATIN SMALL LETTER C WITH CIRCUMFLEX</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x02F5</entry>
+ <entry>U+0121</entry>
+ <entry>LATIN SMALL LETTER G WITH DOT ABOVE</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x02F8</entry>
+ <entry>U+011D</entry>
+ <entry>LATIN SMALL LETTER G WITH CIRCUMFLEX</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x02FD</entry>
+ <entry>U+016D</entry>
+ <entry>LATIN SMALL LETTER U WITH BREVE</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x02FE</entry>
+ <entry>U+015D</entry>
+ <entry>LATIN SMALL LETTER S WITH CIRCUMFLEX</entry>
+ <entry>Latin-3</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03A2</entry>
+ <entry>U+0138</entry>
+ <entry>LATIN SMALL LETTER KRA</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03A3</entry>
+ <entry>U+0156</entry>
+ <entry>LATIN CAPITAL LETTER R WITH CEDILLA</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03A5</entry>
+ <entry>U+0128</entry>
+ <entry>LATIN CAPITAL LETTER I WITH TILDE</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03A6</entry>
+ <entry>U+013B</entry>
+ <entry>LATIN CAPITAL LETTER L WITH CEDILLA</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03AA</entry>
+ <entry>U+0112</entry>
+ <entry>LATIN CAPITAL LETTER E WITH MACRON</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03AB</entry>
+ <entry>U+0122</entry>
+ <entry>LATIN CAPITAL LETTER G WITH CEDILLA</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03AC</entry>
+ <entry>U+0166</entry>
+ <entry>LATIN CAPITAL LETTER T WITH STROKE</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03B3</entry>
+ <entry>U+0157</entry>
+ <entry>LATIN SMALL LETTER R WITH CEDILLA</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03B5</entry>
+ <entry>U+0129</entry>
+ <entry>LATIN SMALL LETTER I WITH TILDE</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03B6</entry>
+ <entry>U+013C</entry>
+ <entry>LATIN SMALL LETTER L WITH CEDILLA</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03BA</entry>
+ <entry>U+0113</entry>
+ <entry>LATIN SMALL LETTER E WITH MACRON</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03BB</entry>
+ <entry>U+0123</entry>
+ <entry>LATIN SMALL LETTER G WITH CEDILLA</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03BC</entry>
+ <entry>U+0167</entry>
+ <entry>LATIN SMALL LETTER T WITH STROKE</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03BD</entry>
+ <entry>U+014A</entry>
+ <entry>LATIN CAPITAL LETTER ENG</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03BF</entry>
+ <entry>U+014B</entry>
+ <entry>LATIN SMALL LETTER ENG</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03C0</entry>
+ <entry>U+0100</entry>
+ <entry>LATIN CAPITAL LETTER A WITH MACRON</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03C7</entry>
+ <entry>U+012E</entry>
+ <entry>LATIN CAPITAL LETTER I WITH OGONEK</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03CC</entry>
+ <entry>U+0116</entry>
+ <entry>LATIN CAPITAL LETTER E WITH DOT ABOVE</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03CF</entry>
+ <entry>U+012A</entry>
+ <entry>LATIN CAPITAL LETTER I WITH MACRON</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03D1</entry>
+ <entry>U+0145</entry>
+ <entry>LATIN CAPITAL LETTER N WITH CEDILLA</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03D2</entry>
+ <entry>U+014C</entry>
+ <entry>LATIN CAPITAL LETTER O WITH MACRON</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03D3</entry>
+ <entry>U+0136</entry>
+ <entry>LATIN CAPITAL LETTER K WITH CEDILLA</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03D9</entry>
+ <entry>U+0172</entry>
+ <entry>LATIN CAPITAL LETTER U WITH OGONEK</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03DD</entry>
+ <entry>U+0168</entry>
+ <entry>LATIN CAPITAL LETTER U WITH TILDE</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03DE</entry>
+ <entry>U+016A</entry>
+ <entry>LATIN CAPITAL LETTER U WITH MACRON</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03E0</entry>
+ <entry>U+0101</entry>
+ <entry>LATIN SMALL LETTER A WITH MACRON</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03E7</entry>
+ <entry>U+012F</entry>
+ <entry>LATIN SMALL LETTER I WITH OGONEK</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03EC</entry>
+ <entry>U+0117</entry>
+ <entry>LATIN SMALL LETTER E WITH DOT ABOVE</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03EF</entry>
+ <entry>U+012B</entry>
+ <entry>LATIN SMALL LETTER I WITH MACRON</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03F1</entry>
+ <entry>U+0146</entry>
+ <entry>LATIN SMALL LETTER N WITH CEDILLA</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03F2</entry>
+ <entry>U+014D</entry>
+ <entry>LATIN SMALL LETTER O WITH MACRON</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03F3</entry>
+ <entry>U+0137</entry>
+ <entry>LATIN SMALL LETTER K WITH CEDILLA</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03F9</entry>
+ <entry>U+0173</entry>
+ <entry>LATIN SMALL LETTER U WITH OGONEK</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03FD</entry>
+ <entry>U+0169</entry>
+ <entry>LATIN SMALL LETTER U WITH TILDE</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x03FE</entry>
+ <entry>U+016B</entry>
+ <entry>LATIN SMALL LETTER U WITH MACRON</entry>
+ <entry>Latin-4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x047E</entry>
+ <entry>U+203E</entry>
+ <entry>OVERLINE</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04A1</entry>
+ <entry>U+3002</entry>
+ <entry>KANA FULL STOP</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04A2</entry>
+ <entry>U+300C</entry>
+ <entry>KANA OPENING BRACKET</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04A3</entry>
+ <entry>U+300D</entry>
+ <entry>KANA CLOSING BRACKET</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04A4</entry>
+ <entry>U+3001</entry>
+ <entry>KANA COMMA</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04A5</entry>
+ <entry>U+30FB</entry>
+ <entry>KANA CONJUNCTIVE</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04A6</entry>
+ <entry>U+30F2</entry>
+ <entry>KANA LETTER WO</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04A7</entry>
+ <entry>U+30A1</entry>
+ <entry>KANA LETTER SMALL A</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04A8</entry>
+ <entry>U+30A3</entry>
+ <entry>KANA LETTER SMALL I</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04A9</entry>
+ <entry>U+30A5</entry>
+ <entry>KANA LETTER SMALL U</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04AA</entry>
+ <entry>U+30A7</entry>
+ <entry>KANA LETTER SMALL E</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04AB</entry>
+ <entry>U+30A9</entry>
+ <entry>KANA LETTER SMALL O</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04AC</entry>
+ <entry>U+30E3</entry>
+ <entry>KANA LETTER SMALL YA</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04AD</entry>
+ <entry>U+30E5</entry>
+ <entry>KANA LETTER SMALL YU</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04AE</entry>
+ <entry>U+30E7</entry>
+ <entry>KANA LETTER SMALL YO</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04AF</entry>
+ <entry>U+30C3</entry>
+ <entry>KANA LETTER SMALL TSU</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04B0</entry>
+ <entry>U+30FC</entry>
+ <entry>PROLONGED SOUND SYMBOL</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04B1</entry>
+ <entry>U+30A2</entry>
+ <entry>KANA LETTER A</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04B2</entry>
+ <entry>U+30A4</entry>
+ <entry>KANA LETTER I</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04B3</entry>
+ <entry>U+30A6</entry>
+ <entry>KANA LETTER U</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04B4</entry>
+ <entry>U+30A8</entry>
+ <entry>KANA LETTER E</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04B5</entry>
+ <entry>U+30AA</entry>
+ <entry>KANA LETTER O</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04B6</entry>
+ <entry>U+30AB</entry>
+ <entry>KANA LETTER KA</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04B7</entry>
+ <entry>U+30AD</entry>
+ <entry>KANA LETTER KI</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04B8</entry>
+ <entry>U+30AF</entry>
+ <entry>KANA LETTER KU</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04B9</entry>
+ <entry>U+30B1</entry>
+ <entry>KANA LETTER KE</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04BA</entry>
+ <entry>U+30B3</entry>
+ <entry>KANA LETTER KO</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04BB</entry>
+ <entry>U+30B5</entry>
+ <entry>KANA LETTER SA</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04BC</entry>
+ <entry>U+30B7</entry>
+ <entry>KANA LETTER SHI</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04BD</entry>
+ <entry>U+30B9</entry>
+ <entry>KANA LETTER SU</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04BE</entry>
+ <entry>U+30BB</entry>
+ <entry>KANA LETTER SE</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04BF</entry>
+ <entry>U+30BD</entry>
+ <entry>KANA LETTER SO</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04C0</entry>
+ <entry>U+30BF</entry>
+ <entry>KANA LETTER TA</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04C1</entry>
+ <entry>U+30C1</entry>
+ <entry>KANA LETTER CHI</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04C2</entry>
+ <entry>U+30C4</entry>
+ <entry>KANA LETTER TSU</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04C3</entry>
+ <entry>U+30C6</entry>
+ <entry>KANA LETTER TE</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04C4</entry>
+ <entry>U+30C8</entry>
+ <entry>KANA LETTER TO</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04C5</entry>
+ <entry>U+30CA</entry>
+ <entry>KANA LETTER NA</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04C6</entry>
+ <entry>U+30CB</entry>
+ <entry>KANA LETTER NI</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04C7</entry>
+ <entry>U+30CC</entry>
+ <entry>KANA LETTER NU</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04C8</entry>
+ <entry>U+30CD</entry>
+ <entry>KANA LETTER NE</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04C9</entry>
+ <entry>U+30CE</entry>
+ <entry>KANA LETTER NO</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04CA</entry>
+ <entry>U+30CF</entry>
+ <entry>KANA LETTER HA</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04CB</entry>
+ <entry>U+30D2</entry>
+ <entry>KANA LETTER HI</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04CC</entry>
+ <entry>U+30D5</entry>
+ <entry>KANA LETTER FU</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04CD</entry>
+ <entry>U+30D8</entry>
+ <entry>KANA LETTER HE</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04CE</entry>
+ <entry>U+30DB</entry>
+ <entry>KANA LETTER HO</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04CF</entry>
+ <entry>U+30DE</entry>
+ <entry>KANA LETTER MA</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04D0</entry>
+ <entry>U+30DF</entry>
+ <entry>KANA LETTER MI</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04D1</entry>
+ <entry>U+30E0</entry>
+ <entry>KANA LETTER MU</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04D2</entry>
+ <entry>U+30E1</entry>
+ <entry>KANA LETTER ME</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04D3</entry>
+ <entry>U+30E2</entry>
+ <entry>KANA LETTER MO</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04D4</entry>
+ <entry>U+30E4</entry>
+ <entry>KANA LETTER YA</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04D5</entry>
+ <entry>U+30E6</entry>
+ <entry>KANA LETTER YU</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04D6</entry>
+ <entry>U+30E8</entry>
+ <entry>KANA LETTER YO</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04D7</entry>
+ <entry>U+30E9</entry>
+ <entry>KANA LETTER RA</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04D8</entry>
+ <entry>U+30EA</entry>
+ <entry>KANA LETTER RI</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04D9</entry>
+ <entry>U+30EB</entry>
+ <entry>KANA LETTER RU</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04DA</entry>
+ <entry>U+30EC</entry>
+ <entry>KANA LETTER RE</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04DB</entry>
+ <entry>U+30ED</entry>
+ <entry>KANA LETTER RO</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04DC</entry>
+ <entry>U+30EF</entry>
+ <entry>KANA LETTER WA</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04DD</entry>
+ <entry>U+30F3</entry>
+ <entry>KANA LETTER N</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04DE</entry>
+ <entry>U+309B</entry>
+ <entry>VOICED SOUND SYMBOL</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x04DF</entry>
+ <entry>U+309C</entry>
+ <entry>SEMIVOICED SOUND SYMBOL</entry>
+ <entry>Kana</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05AC</entry>
+ <entry>U+060C</entry>
+ <entry>ARABIC COMMA</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05BB</entry>
+ <entry>U+061B</entry>
+ <entry>ARABIC SEMICOLON</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05BF</entry>
+ <entry>U+061F</entry>
+ <entry>ARABIC QUESTION MARK</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05C1</entry>
+ <entry>U+0621</entry>
+ <entry>ARABIC LETTER HAMZA</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05C2</entry>
+ <entry>U+0622</entry>
+ <entry>ARABIC LETTER ALEF WITH MADDA ABOVE</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05C3</entry>
+ <entry>U+0623</entry>
+ <entry>ARABIC LETTER ALEF WITH HAMZA ABOVE</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05C4</entry>
+ <entry>U+0624</entry>
+ <entry>ARABIC LETTER WAW WITH HAMZA ABOVE</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05C5</entry>
+ <entry>U+0625</entry>
+ <entry>ARABIC LETTER ALEF WITH HAMZA BELOW</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05C6</entry>
+ <entry>U+0626</entry>
+ <entry>ARABIC LETTER YEH WITH HAMZA ABOVE</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05C7</entry>
+ <entry>U+0627</entry>
+ <entry>ARABIC LETTER ALEF</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05C8</entry>
+ <entry>U+0628</entry>
+ <entry>ARABIC LETTER BEH</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05C9</entry>
+ <entry>U+0629</entry>
+ <entry>ARABIC LETTER TEH MARBUTA</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05CA</entry>
+ <entry>U+062A</entry>
+ <entry>ARABIC LETTER TEH</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05CB</entry>
+ <entry>U+062B</entry>
+ <entry>ARABIC LETTER THEH</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05CC</entry>
+ <entry>U+062C</entry>
+ <entry>ARABIC LETTER JEEM</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05CD</entry>
+ <entry>U+062D</entry>
+ <entry>ARABIC LETTER HAH</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05CE</entry>
+ <entry>U+062E</entry>
+ <entry>ARABIC LETTER KHAH</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05CF</entry>
+ <entry>U+062F</entry>
+ <entry>ARABIC LETTER DAL</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05D0</entry>
+ <entry>U+0630</entry>
+ <entry>ARABIC LETTER THAL</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05D1</entry>
+ <entry>U+0631</entry>
+ <entry>ARABIC LETTER REH</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05D2</entry>
+ <entry>U+0632</entry>
+ <entry>ARABIC LETTER ZAIN</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05D3</entry>
+ <entry>U+0633</entry>
+ <entry>ARABIC LETTER SEEN</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05D4</entry>
+ <entry>U+0634</entry>
+ <entry>ARABIC LETTER SHEEN</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05D5</entry>
+ <entry>U+0635</entry>
+ <entry>ARABIC LETTER SAD</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05D6</entry>
+ <entry>U+0636</entry>
+ <entry>ARABIC LETTER DAD</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05D7</entry>
+ <entry>U+0637</entry>
+ <entry>ARABIC LETTER TAH</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05D8</entry>
+ <entry>U+0638</entry>
+ <entry>ARABIC LETTER ZAH</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05D9</entry>
+ <entry>U+0639</entry>
+ <entry>ARABIC LETTER AIN</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05DA</entry>
+ <entry>U+063A</entry>
+ <entry>ARABIC LETTER GHAIN</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05E0</entry>
+ <entry>U+0640</entry>
+ <entry>ARABIC TATWEEL</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05E1</entry>
+ <entry>U+0641</entry>
+ <entry>ARABIC LETTER FEH</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05E2</entry>
+ <entry>U+0642</entry>
+ <entry>ARABIC LETTER QAF</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05E3</entry>
+ <entry>U+0643</entry>
+ <entry>ARABIC LETTER KAF</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05E4</entry>
+ <entry>U+0644</entry>
+ <entry>ARABIC LETTER LAM</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05E5</entry>
+ <entry>U+0645</entry>
+ <entry>ARABIC LETTER MEEM</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05E6</entry>
+ <entry>U+0646</entry>
+ <entry>ARABIC LETTER NOON</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05E7</entry>
+ <entry>U+0647</entry>
+ <entry>ARABIC LETTER HEH</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05E8</entry>
+ <entry>U+0648</entry>
+ <entry>ARABIC LETTER WAW</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05E9</entry>
+ <entry>U+0649</entry>
+ <entry>ARABIC LETTER ALEF MAKSURA</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05EA</entry>
+ <entry>U+064A</entry>
+ <entry>ARABIC LETTER YEH</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05EB</entry>
+ <entry>U+064B</entry>
+ <entry>ARABIC FATHATAN</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05EC</entry>
+ <entry>U+064C</entry>
+ <entry>ARABIC DAMMATAN</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05ED</entry>
+ <entry>U+064D</entry>
+ <entry>ARABIC KASRATAN</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05EE</entry>
+ <entry>U+064E</entry>
+ <entry>ARABIC FATHA</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05EF</entry>
+ <entry>U+064F</entry>
+ <entry>ARABIC DAMMA</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05F0</entry>
+ <entry>U+0650</entry>
+ <entry>ARABIC KASRA</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05F1</entry>
+ <entry>U+0651</entry>
+ <entry>ARABIC SHADDA</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x05F2</entry>
+ <entry>U+0652</entry>
+ <entry>ARABIC SUKUN</entry>
+ <entry>Arabic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06A1</entry>
+ <entry>U+0452</entry>
+ <entry>CYRILLIC SMALL LETTER DJE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06A2</entry>
+ <entry>U+0453</entry>
+ <entry>CYRILLIC SMALL LETTER GJE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06A3</entry>
+ <entry>U+0451</entry>
+ <entry>CYRILLIC SMALL LETTER IO</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06A4</entry>
+ <entry>U+0454</entry>
+ <entry>CYRILLIC SMALL LETTER UKRAINIAN IE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06A5</entry>
+ <entry>U+0455</entry>
+ <entry>CYRILLIC SMALL LETTER DZE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06A6</entry>
+ <entry>U+0456</entry>
+ <entry>CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06A7</entry>
+ <entry>U+0457</entry>
+ <entry>CYRILLIC SMALL LETTER YI</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06A8</entry>
+ <entry>U+0458</entry>
+ <entry>CYRILLIC SMALL LETTER JE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06A9</entry>
+ <entry>U+0459</entry>
+ <entry>CYRILLIC SMALL LETTER LJE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06AA</entry>
+ <entry>U+045A</entry>
+ <entry>CYRILLIC SMALL LETTER NJE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06AB</entry>
+ <entry>U+045B</entry>
+ <entry>CYRILLIC SMALL LETTER TSHE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06AC</entry>
+ <entry>U+045C</entry>
+ <entry>CYRILLIC SMALL LETTER KJE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06AD</entry>
+ <entry>U+0491</entry>
+ <entry>CYRILLIC SMALL LETTER GHE WITH UPTURN</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06AE</entry>
+ <entry>U+045E</entry>
+ <entry>CYRILLIC SMALL LETTER SHORT U</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06AF</entry>
+ <entry>U+045F</entry>
+ <entry>CYRILLIC SMALL LETTER DZHE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06B0</entry>
+ <entry>U+2116</entry>
+ <entry>NUMERO SIGN</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06B1</entry>
+ <entry>U+0402</entry>
+ <entry>CYRILLIC CAPITAL LETTER DJE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06B2</entry>
+ <entry>U+0403</entry>
+ <entry>CYRILLIC CAPITAL LETTER GJE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06B3</entry>
+ <entry>U+0401</entry>
+ <entry>CYRILLIC CAPITAL LETTER IO</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06B4</entry>
+ <entry>U+0404</entry>
+ <entry>CYRILLIC CAPITAL LETTER UKRAINIAN IE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06B5</entry>
+ <entry>U+0405</entry>
+ <entry>CYRILLIC CAPITAL LETTER DZE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06B6</entry>
+ <entry>U+0406</entry>
+ <entry>CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06B7</entry>
+ <entry>U+0407</entry>
+ <entry>CYRILLIC CAPITAL LETTER YI</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06B8</entry>
+ <entry>U+0408</entry>
+ <entry>CYRILLIC CAPITAL LETTER JE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06B9</entry>
+ <entry>U+0409</entry>
+ <entry>CYRILLIC CAPITAL LETTER LJE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06BA</entry>
+ <entry>U+040A</entry>
+ <entry>CYRILLIC CAPITAL LETTER NJE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06BB</entry>
+ <entry>U+040B</entry>
+ <entry>CYRILLIC CAPITAL LETTER TSHE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06BC</entry>
+ <entry>U+040C</entry>
+ <entry>CYRILLIC CAPITAL LETTER KJE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06BD</entry>
+ <entry>U+0490</entry>
+ <entry>CYRILLIC CAPITAL LETTER GHE WITH UPTURN</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06BE</entry>
+ <entry>U+040E</entry>
+ <entry>CYRILLIC CAPITAL LETTER SHORT U</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06BF</entry>
+ <entry>U+040F</entry>
+ <entry>CYRILLIC CAPITAL LETTER DZHE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06C0</entry>
+ <entry>U+044E</entry>
+ <entry>CYRILLIC SMALL LETTER YU</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06C1</entry>
+ <entry>U+0430</entry>
+ <entry>CYRILLIC SMALL LETTER A</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06C2</entry>
+ <entry>U+0431</entry>
+ <entry>CYRILLIC SMALL LETTER BE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06C3</entry>
+ <entry>U+0446</entry>
+ <entry>CYRILLIC SMALL LETTER TSE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06C4</entry>
+ <entry>U+0434</entry>
+ <entry>CYRILLIC SMALL LETTER DE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06C5</entry>
+ <entry>U+0435</entry>
+ <entry>CYRILLIC SMALL LETTER IE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06C6</entry>
+ <entry>U+0444</entry>
+ <entry>CYRILLIC SMALL LETTER EF</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06C7</entry>
+ <entry>U+0433</entry>
+ <entry>CYRILLIC SMALL LETTER GHE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06C8</entry>
+ <entry>U+0445</entry>
+ <entry>CYRILLIC SMALL LETTER HA</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06C9</entry>
+ <entry>U+0438</entry>
+ <entry>CYRILLIC SMALL LETTER I</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06CA</entry>
+ <entry>U+0439</entry>
+ <entry>CYRILLIC SMALL LETTER SHORT I</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06CB</entry>
+ <entry>U+043A</entry>
+ <entry>CYRILLIC SMALL LETTER KA</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06CC</entry>
+ <entry>U+043B</entry>
+ <entry>CYRILLIC SMALL LETTER EL</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06CD</entry>
+ <entry>U+043C</entry>
+ <entry>CYRILLIC SMALL LETTER EM</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06CE</entry>
+ <entry>U+043D</entry>
+ <entry>CYRILLIC SMALL LETTER EN</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06CF</entry>
+ <entry>U+043E</entry>
+ <entry>CYRILLIC SMALL LETTER O</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06D0</entry>
+ <entry>U+043F</entry>
+ <entry>CYRILLIC SMALL LETTER PE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06D1</entry>
+ <entry>U+044F</entry>
+ <entry>CYRILLIC SMALL LETTER YA</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06D2</entry>
+ <entry>U+0440</entry>
+ <entry>CYRILLIC SMALL LETTER ER</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06D3</entry>
+ <entry>U+0441</entry>
+ <entry>CYRILLIC SMALL LETTER ES</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06D4</entry>
+ <entry>U+0442</entry>
+ <entry>CYRILLIC SMALL LETTER TE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06D5</entry>
+ <entry>U+0443</entry>
+ <entry>CYRILLIC SMALL LETTER U</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06D6</entry>
+ <entry>U+0436</entry>
+ <entry>CYRILLIC SMALL LETTER ZHE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06D7</entry>
+ <entry>U+0432</entry>
+ <entry>CYRILLIC SMALL LETTER VE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06D8</entry>
+ <entry>U+044C</entry>
+ <entry>CYRILLIC SMALL LETTER SOFT SIGN</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06D9</entry>
+ <entry>U+044B</entry>
+ <entry>CYRILLIC SMALL LETTER YERU</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06DA</entry>
+ <entry>U+0437</entry>
+ <entry>CYRILLIC SMALL LETTER ZE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06DB</entry>
+ <entry>U+0448</entry>
+ <entry>CYRILLIC SMALL LETTER SHA</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06DC</entry>
+ <entry>U+044D</entry>
+ <entry>CYRILLIC SMALL LETTER E</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06DD</entry>
+ <entry>U+0449</entry>
+ <entry>CYRILLIC SMALL LETTER SHCHA</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06DE</entry>
+ <entry>U+0447</entry>
+ <entry>CYRILLIC SMALL LETTER CHE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06DF</entry>
+ <entry>U+044A</entry>
+ <entry>CYRILLIC SMALL LETTER HARD SIGN</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06E0</entry>
+ <entry>U+042E</entry>
+ <entry>CYRILLIC CAPITAL LETTER YU</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06E1</entry>
+ <entry>U+0410</entry>
+ <entry>CYRILLIC CAPITAL LETTER A</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06E2</entry>
+ <entry>U+0411</entry>
+ <entry>CYRILLIC CAPITAL LETTER BE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06E3</entry>
+ <entry>U+0426</entry>
+ <entry>CYRILLIC CAPITAL LETTER TSE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06E4</entry>
+ <entry>U+0414</entry>
+ <entry>CYRILLIC CAPITAL LETTER DE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06E5</entry>
+ <entry>U+0415</entry>
+ <entry>CYRILLIC CAPITAL LETTER IE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06E6</entry>
+ <entry>U+0424</entry>
+ <entry>CYRILLIC CAPITAL LETTER EF</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06E7</entry>
+ <entry>U+0413</entry>
+ <entry>CYRILLIC CAPITAL LETTER GHE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06E8</entry>
+ <entry>U+0425</entry>
+ <entry>CYRILLIC CAPITAL LETTER HA</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06E9</entry>
+ <entry>U+0418</entry>
+ <entry>CYRILLIC CAPITAL LETTER I</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06EA</entry>
+ <entry>U+0419</entry>
+ <entry>CYRILLIC CAPITAL LETTER SHORT I</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06EB</entry>
+ <entry>U+041A</entry>
+ <entry>CYRILLIC CAPITAL LETTER KA</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06EC</entry>
+ <entry>U+041B</entry>
+ <entry>CYRILLIC CAPITAL LETTER EL</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06ED</entry>
+ <entry>U+041C</entry>
+ <entry>CYRILLIC CAPITAL LETTER EM</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06EE</entry>
+ <entry>U+041D</entry>
+ <entry>CYRILLIC CAPITAL LETTER EN</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06EF</entry>
+ <entry>U+041E</entry>
+ <entry>CYRILLIC CAPITAL LETTER O</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06F0</entry>
+ <entry>U+041F</entry>
+ <entry>CYRILLIC CAPITAL LETTER PE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06F1</entry>
+ <entry>U+042F</entry>
+ <entry>CYRILLIC CAPITAL LETTER YA</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06F2</entry>
+ <entry>U+0420</entry>
+ <entry>CYRILLIC CAPITAL LETTER ER</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06F3</entry>
+ <entry>U+0421</entry>
+ <entry>CYRILLIC CAPITAL LETTER ES</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06F4</entry>
+ <entry>U+0422</entry>
+ <entry>CYRILLIC CAPITAL LETTER TE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06F5</entry>
+ <entry>U+0423</entry>
+ <entry>CYRILLIC CAPITAL LETTER U</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06F6</entry>
+ <entry>U+0416</entry>
+ <entry>CYRILLIC CAPITAL LETTER ZHE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06F7</entry>
+ <entry>U+0412</entry>
+ <entry>CYRILLIC CAPITAL LETTER VE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06F8</entry>
+ <entry>U+042C</entry>
+ <entry>CYRILLIC CAPITAL LETTER SOFT SIGN</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06F9</entry>
+ <entry>U+042B</entry>
+ <entry>CYRILLIC CAPITAL LETTER YERU</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06FA</entry>
+ <entry>U+0417</entry>
+ <entry>CYRILLIC CAPITAL LETTER ZE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06FB</entry>
+ <entry>U+0428</entry>
+ <entry>CYRILLIC CAPITAL LETTER SHA</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06FC</entry>
+ <entry>U+042D</entry>
+ <entry>CYRILLIC CAPITAL LETTER E</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06FD</entry>
+ <entry>U+0429</entry>
+ <entry>CYRILLIC CAPITAL LETTER SHCHA</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06FE</entry>
+ <entry>U+0427</entry>
+ <entry>CYRILLIC CAPITAL LETTER CHE</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x06FF</entry>
+ <entry>U+042A</entry>
+ <entry>CYRILLIC CAPITAL LETTER HARD SIGN</entry>
+ <entry>Cyrillic</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07A1</entry>
+ <entry>U+0386</entry>
+ <entry>GREEK CAPITAL LETTER ALPHA WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07A2</entry>
+ <entry>U+0388</entry>
+ <entry>GREEK CAPITAL LETTER EPSILON WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07A3</entry>
+ <entry>U+0389</entry>
+ <entry>GREEK CAPITAL LETTER ETA WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07A4</entry>
+ <entry>U+038A</entry>
+ <entry>GREEK CAPITAL LETTER IOTA WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07A5</entry>
+ <entry>U+03AA</entry>
+ <entry>GREEK CAPITAL LETTER IOTA WITH DIALYTIKA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07A7</entry>
+ <entry>U+038C</entry>
+ <entry>GREEK CAPITAL LETTER OMICRON WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07A8</entry>
+ <entry>U+038E</entry>
+ <entry>GREEK CAPITAL LETTER UPSILON WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07A9</entry>
+ <entry>U+03AB</entry>
+ <entry>GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07AB</entry>
+ <entry>U+038F</entry>
+ <entry>GREEK CAPITAL LETTER OMEGA WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07AE</entry>
+ <entry>U+0385</entry>
+ <entry>GREEK DIALYTIKA TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07AF</entry>
+ <entry>U+2015</entry>
+ <entry>HORIZONTAL BAR</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07B1</entry>
+ <entry>U+03AC</entry>
+ <entry>GREEK SMALL LETTER ALPHA WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07B2</entry>
+ <entry>U+03AD</entry>
+ <entry>GREEK SMALL LETTER EPSILON WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07B3</entry>
+ <entry>U+03AE</entry>
+ <entry>GREEK SMALL LETTER ETA WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07B4</entry>
+ <entry>U+03AF</entry>
+ <entry>GREEK SMALL LETTER IOTA WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07B5</entry>
+ <entry>U+03CA</entry>
+ <entry>GREEK SMALL LETTER IOTA WITH DIALYTIKA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07B6</entry>
+ <entry>U+0390</entry>
+ <entry>GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07B7</entry>
+ <entry>U+03CC</entry>
+ <entry>GREEK SMALL LETTER OMICRON WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07B8</entry>
+ <entry>U+03CD</entry>
+ <entry>GREEK SMALL LETTER UPSILON WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07B9</entry>
+ <entry>U+03CB</entry>
+ <entry>GREEK SMALL LETTER UPSILON WITH DIALYTIKA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07BA</entry>
+ <entry>U+03B0</entry>
+ <entry>GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07BB</entry>
+ <entry>U+03CE</entry>
+ <entry>GREEK SMALL LETTER OMEGA WITH TONOS</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07C1</entry>
+ <entry>U+0391</entry>
+ <entry>GREEK CAPITAL LETTER ALPHA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07C2</entry>
+ <entry>U+0392</entry>
+ <entry>GREEK CAPITAL LETTER BETA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07C3</entry>
+ <entry>U+0393</entry>
+ <entry>GREEK CAPITAL LETTER GAMMA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07C4</entry>
+ <entry>U+0394</entry>
+ <entry>GREEK CAPITAL LETTER DELTA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07C5</entry>
+ <entry>U+0395</entry>
+ <entry>GREEK CAPITAL LETTER EPSILON</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07C6</entry>
+ <entry>U+0396</entry>
+ <entry>GREEK CAPITAL LETTER ZETA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07C7</entry>
+ <entry>U+0397</entry>
+ <entry>GREEK CAPITAL LETTER ETA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07C8</entry>
+ <entry>U+0398</entry>
+ <entry>GREEK CAPITAL LETTER THETA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07C9</entry>
+ <entry>U+0399</entry>
+ <entry>GREEK CAPITAL LETTER IOTA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07CA</entry>
+ <entry>U+039A</entry>
+ <entry>GREEK CAPITAL LETTER KAPPA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07CB</entry>
+ <entry>U+039B</entry>
+ <entry>GREEK CAPITAL LETTER LAMDA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07CC</entry>
+ <entry>U+039C</entry>
+ <entry>GREEK CAPITAL LETTER MU</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07CD</entry>
+ <entry>U+039D</entry>
+ <entry>GREEK CAPITAL LETTER NU</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07CE</entry>
+ <entry>U+039E</entry>
+ <entry>GREEK CAPITAL LETTER XI</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07CF</entry>
+ <entry>U+039F</entry>
+ <entry>GREEK CAPITAL LETTER OMICRON</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07D0</entry>
+ <entry>U+03A0</entry>
+ <entry>GREEK CAPITAL LETTER PI</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07D1</entry>
+ <entry>U+03A1</entry>
+ <entry>GREEK CAPITAL LETTER RHO</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07D2</entry>
+ <entry>U+03A3</entry>
+ <entry>GREEK CAPITAL LETTER SIGMA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07D4</entry>
+ <entry>U+03A4</entry>
+ <entry>GREEK CAPITAL LETTER TAU</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07D5</entry>
+ <entry>U+03A5</entry>
+ <entry>GREEK CAPITAL LETTER UPSILON</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07D6</entry>
+ <entry>U+03A6</entry>
+ <entry>GREEK CAPITAL LETTER PHI</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07D7</entry>
+ <entry>U+03A7</entry>
+ <entry>GREEK CAPITAL LETTER CHI</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07D8</entry>
+ <entry>U+03A8</entry>
+ <entry>GREEK CAPITAL LETTER PSI</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07D9</entry>
+ <entry>U+03A9</entry>
+ <entry>GREEK CAPITAL LETTER OMEGA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07E1</entry>
+ <entry>U+03B1</entry>
+ <entry>GREEK SMALL LETTER ALPHA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07E2</entry>
+ <entry>U+03B2</entry>
+ <entry>GREEK SMALL LETTER BETA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07E3</entry>
+ <entry>U+03B3</entry>
+ <entry>GREEK SMALL LETTER GAMMA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07E4</entry>
+ <entry>U+03B4</entry>
+ <entry>GREEK SMALL LETTER DELTA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07E5</entry>
+ <entry>U+03B5</entry>
+ <entry>GREEK SMALL LETTER EPSILON</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07E6</entry>
+ <entry>U+03B6</entry>
+ <entry>GREEK SMALL LETTER ZETA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07E7</entry>
+ <entry>U+03B7</entry>
+ <entry>GREEK SMALL LETTER ETA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07E8</entry>
+ <entry>U+03B8</entry>
+ <entry>GREEK SMALL LETTER THETA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07E9</entry>
+ <entry>U+03B9</entry>
+ <entry>GREEK SMALL LETTER IOTA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07EA</entry>
+ <entry>U+03BA</entry>
+ <entry>GREEK SMALL LETTER KAPPA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07EB</entry>
+ <entry>U+03BB</entry>
+ <entry>GREEK SMALL LETTER LAMDA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07EC</entry>
+ <entry>U+03BC</entry>
+ <entry>GREEK SMALL LETTER MU</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07ED</entry>
+ <entry>U+03BD</entry>
+ <entry>GREEK SMALL LETTER NU</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07EE</entry>
+ <entry>U+03BE</entry>
+ <entry>GREEK SMALL LETTER XI</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07EF</entry>
+ <entry>U+03BF</entry>
+ <entry>GREEK SMALL LETTER OMICRON</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07F0</entry>
+ <entry>U+03C0</entry>
+ <entry>GREEK SMALL LETTER PI</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07F1</entry>
+ <entry>U+03C1</entry>
+ <entry>GREEK SMALL LETTER RHO</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07F2</entry>
+ <entry>U+03C3</entry>
+ <entry>GREEK SMALL LETTER SIGMA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07F3</entry>
+ <entry>U+03C2</entry>
+ <entry>GREEK SMALL LETTER FINAL SIGMA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07F4</entry>
+ <entry>U+03C4</entry>
+ <entry>GREEK SMALL LETTER TAU</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07F5</entry>
+ <entry>U+03C5</entry>
+ <entry>GREEK SMALL LETTER UPSILON</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07F6</entry>
+ <entry>U+03C6</entry>
+ <entry>GREEK SMALL LETTER PHI</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07F7</entry>
+ <entry>U+03C7</entry>
+ <entry>GREEK SMALL LETTER CHI</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07F8</entry>
+ <entry>U+03C8</entry>
+ <entry>GREEK SMALL LETTER PSI</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x07F9</entry>
+ <entry>U+03C9</entry>
+ <entry>GREEK SMALL LETTER OMEGA</entry>
+ <entry>Greek</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08A1</entry>
+ <entry>U+23B7</entry>
+ <entry>LEFT RADICAL</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08A2</entry>
+ <entry>-</entry>
+ <entry>TOP LEFT RADICAL</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08A3</entry>
+ <entry>-</entry>
+ <entry>HORIZONTAL CONNECTOR</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08A4</entry>
+ <entry>U+2320</entry>
+ <entry>TOP INTEGRAL</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08A5</entry>
+ <entry>U+2321</entry>
+ <entry>BOTTOM INTEGRAL</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08A6</entry>
+ <entry>-</entry>
+ <entry>VERTICAL CONNECTOR</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08A7</entry>
+ <entry>U+23A1</entry>
+ <entry>TOP LEFT SQUARE BRACKET</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08A8</entry>
+ <entry>U+23A3</entry>
+ <entry>BOTTOM LEFT SQUARE BRACKET</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08A9</entry>
+ <entry>U+23A4</entry>
+ <entry>TOP RIGHT SQUARE BRACKET</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08AA</entry>
+ <entry>U+23A6</entry>
+ <entry>BOTTOM RIGHT SQUARE BRACKET</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08AB</entry>
+ <entry>U+239B</entry>
+ <entry>TOP LEFT PARENTHESIS</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08AC</entry>
+ <entry>U+239D</entry>
+ <entry>BOTTOM LEFT PARENTHESIS</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08AD</entry>
+ <entry>U+239E</entry>
+ <entry>TOP RIGHT PARENTHESIS</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08AE</entry>
+ <entry>U+23A0</entry>
+ <entry>BOTTOM RIGHT PARENTHESIS</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08AF</entry>
+ <entry>U+23A8</entry>
+ <entry>LEFT MIDDLE CURLY BRACE</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08B0</entry>
+ <entry>U+23AC</entry>
+ <entry>RIGHT MIDDLE CURLY BRACE</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08B1</entry>
+ <entry>-</entry>
+ <entry>TOP LEFT SUMMATION</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08B2</entry>
+ <entry>-</entry>
+ <entry>BOTTOM LEFT SUMMATION</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08B3</entry>
+ <entry>-</entry>
+ <entry>TOP VERTICAL SUMMATION CONNECTOR</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08B4</entry>
+ <entry>-</entry>
+ <entry>BOTTOM VERTICAL SUMMATION CONNECTOR</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08B5</entry>
+ <entry>-</entry>
+ <entry>TOP RIGHT SUMMATION</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08B6</entry>
+ <entry>-</entry>
+ <entry>BOTTOM RIGHT SUMMATION</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08B7</entry>
+ <entry>-</entry>
+ <entry>RIGHT MIDDLE SUMMATION</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08BC</entry>
+ <entry>U+2264</entry>
+ <entry>LESS THAN OR EQUAL SIGN</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08BD</entry>
+ <entry>U+2260</entry>
+ <entry>NOT EQUAL SIGN</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08BE</entry>
+ <entry>U+2265</entry>
+ <entry>GREATER THAN OR EQUAL SIGN</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08BF</entry>
+ <entry>U+222B</entry>
+ <entry>INTEGRAL</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08C0</entry>
+ <entry>U+2234</entry>
+ <entry>THEREFORE</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08C1</entry>
+ <entry>U+221D</entry>
+ <entry>VARIATION, PROPORTIONAL TO</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08C2</entry>
+ <entry>U+221E</entry>
+ <entry>INFINITY</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08C5</entry>
+ <entry>U+2207</entry>
+ <entry>NABLA, DEL</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08C8</entry>
+ <entry>U+223C</entry>
+ <entry>IS APPROXIMATE TO</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08C9</entry>
+ <entry>U+2243</entry>
+ <entry>SIMILAR OR EQUAL TO</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08CD</entry>
+ <entry>U+21D4</entry>
+ <entry>IF AND ONLY IF</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08CE</entry>
+ <entry>U+21D2</entry>
+ <entry>IMPLIES</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08CF</entry>
+ <entry>U+2261</entry>
+ <entry>IDENTICAL TO</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08D6</entry>
+ <entry>U+221A</entry>
+ <entry>RADICAL</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08DA</entry>
+ <entry>U+2282</entry>
+ <entry>IS INCLUDED IN</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08DB</entry>
+ <entry>U+2283</entry>
+ <entry>INCLUDES</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08DC</entry>
+ <entry>U+2229</entry>
+ <entry>INTERSECTION</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08DD</entry>
+ <entry>U+222A</entry>
+ <entry>UNION</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08DE</entry>
+ <entry>U+2227</entry>
+ <entry>LOGICAL AND</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08DF</entry>
+ <entry>U+2228</entry>
+ <entry>LOGICAL OR</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08EF</entry>
+ <entry>U+2202</entry>
+ <entry>PARTIAL DERIVATIVE</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08F6</entry>
+ <entry>U+0192</entry>
+ <entry>FUNCTION</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08FB</entry>
+ <entry>U+2190</entry>
+ <entry>LEFT ARROW</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08FC</entry>
+ <entry>U+2191</entry>
+ <entry>UPWARD ARROW</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08FD</entry>
+ <entry>U+2192</entry>
+ <entry>RIGHT ARROW</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x08FE</entry>
+ <entry>U+2193</entry>
+ <entry>DOWNWARD ARROW</entry>
+ <entry>Technical</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09DF</entry>
+ <entry>-</entry>
+ <entry>BLANK</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09E0</entry>
+ <entry>U+25C6</entry>
+ <entry>SOLID DIAMOND</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09E1</entry>
+ <entry>U+2592</entry>
+ <entry>CHECKERBOARD</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09E2</entry>
+ <entry>U+2409</entry>
+ <entry>"HT"</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09E3</entry>
+ <entry>U+240C</entry>
+ <entry>"FF"</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09E4</entry>
+ <entry>U+240D</entry>
+ <entry>"CR"</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09E5</entry>
+ <entry>U+240A</entry>
+ <entry>"LF"</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09E8</entry>
+ <entry>U+2424</entry>
+ <entry>"NL"</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09E9</entry>
+ <entry>U+240B</entry>
+ <entry>"VT"</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09EA</entry>
+ <entry>U+2518</entry>
+ <entry>LOWER-RIGHT CORNER</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09EB</entry>
+ <entry>U+2510</entry>
+ <entry>UPPER-RIGHT CORNER</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09EC</entry>
+ <entry>U+250C</entry>
+ <entry>UPPER-LEFT CORNER</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09ED</entry>
+ <entry>U+2514</entry>
+ <entry>LOWER-LEFT CORNER</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09EE</entry>
+ <entry>U+253C</entry>
+ <entry>CROSSING-LINES</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09EF</entry>
+ <entry>U+23BA</entry>
+ <entry>HORIZONTAL LINE, SCAN 1</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09F0</entry>
+ <entry>U+23BB</entry>
+ <entry>HORIZONTAL LINE, SCAN 3</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09F1</entry>
+ <entry>U+2500</entry>
+ <entry>HORIZONTAL LINE, SCAN 5</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09F2</entry>
+ <entry>U+23BC</entry>
+ <entry>HORIZONTAL LINE, SCAN 7</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09F3</entry>
+ <entry>U+23BD</entry>
+ <entry>HORIZONTAL LINE, SCAN 9</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09F4</entry>
+ <entry>U+251C</entry>
+ <entry>LEFT "T"</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09F5</entry>
+ <entry>U+2524</entry>
+ <entry>RIGHT "T"</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09F6</entry>
+ <entry>U+2534</entry>
+ <entry>BOTTOM "T"</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09F7</entry>
+ <entry>U+252C</entry>
+ <entry>TOP "T"</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x09F8</entry>
+ <entry>U+2502</entry>
+ <entry>VERTICAL BAR</entry>
+ <entry>Special</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AA1</entry>
+ <entry>U+2003</entry>
+ <entry>EM SPACE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AA2</entry>
+ <entry>U+2002</entry>
+ <entry>EN SPACE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AA3</entry>
+ <entry>U+2004</entry>
+ <entry>3/EM SPACE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AA4</entry>
+ <entry>U+2005</entry>
+ <entry>4/EM SPACE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AA5</entry>
+ <entry>U+2007</entry>
+ <entry>DIGIT SPACE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AA6</entry>
+ <entry>U+2008</entry>
+ <entry>PUNCTUATION SPACE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AA7</entry>
+ <entry>U+2009</entry>
+ <entry>THIN SPACE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AA8</entry>
+ <entry>U+200A</entry>
+ <entry>HAIR SPACE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AA9</entry>
+ <entry>U+2014</entry>
+ <entry>EM DASH</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AAA</entry>
+ <entry>U+2013</entry>
+ <entry>EN DASH</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AAC</entry>
+ <entry>-</entry>
+ <entry>SIGNIFICANT BLANK SYMBOL</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AAE</entry>
+ <entry>U+2026</entry>
+ <entry>ELLIPSIS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AAF</entry>
+ <entry>U+2025</entry>
+ <entry>DOUBLE BASELINE DOT</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AB0</entry>
+ <entry>U+2153</entry>
+ <entry>VULGAR FRACTION ONE THIRD</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AB1</entry>
+ <entry>U+2154</entry>
+ <entry>VULGAR FRACTION TWO THIRDS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AB2</entry>
+ <entry>U+2155</entry>
+ <entry>VULGAR FRACTION ONE FIFTH</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AB3</entry>
+ <entry>U+2156</entry>
+ <entry>VULGAR FRACTION TWO FIFTHS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AB4</entry>
+ <entry>U+2157</entry>
+ <entry>VULGAR FRACTION THREE FIFTHS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AB5</entry>
+ <entry>U+2158</entry>
+ <entry>VULGAR FRACTION FOUR FIFTHS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AB6</entry>
+ <entry>U+2159</entry>
+ <entry>VULGAR FRACTION ONE SIXTH</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AB7</entry>
+ <entry>U+215A</entry>
+ <entry>VULGAR FRACTION FIVE SIXTHS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AB8</entry>
+ <entry>U+2105</entry>
+ <entry>CARE OF</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ABB</entry>
+ <entry>U+2012</entry>
+ <entry>FIGURE DASH</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ABC</entry>
+ <entry>-</entry>
+ <entry>LEFT ANGLE BRACKET</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ABD</entry>
+ <entry>-</entry>
+ <entry>DECIMAL POINT</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ABE</entry>
+ <entry>-</entry>
+ <entry>RIGHT ANGLE BRACKET</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ABF</entry>
+ <entry>-</entry>
+ <entry>MARKER</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AC3</entry>
+ <entry>U+215B</entry>
+ <entry>VULGAR FRACTION ONE EIGHTH</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AC4</entry>
+ <entry>U+215C</entry>
+ <entry>VULGAR FRACTION THREE EIGHTHS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AC5</entry>
+ <entry>U+215D</entry>
+ <entry>VULGAR FRACTION FIVE EIGHTHS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AC6</entry>
+ <entry>U+215E</entry>
+ <entry>VULGAR FRACTION SEVEN EIGHTHS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AC9</entry>
+ <entry>U+2122</entry>
+ <entry>TRADEMARK SIGN</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ACA</entry>
+ <entry>-</entry>
+ <entry>SIGNATURE MARK</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ACB</entry>
+ <entry>-</entry>
+ <entry>TRADEMARK SIGN IN CIRCLE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ACC</entry>
+ <entry>-</entry>
+ <entry>LEFT OPEN TRIANGLE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ACD</entry>
+ <entry>-</entry>
+ <entry>RIGHT OPEN TRIANGLE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ACE</entry>
+ <entry>-</entry>
+ <entry>EM OPEN CIRCLE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ACF</entry>
+ <entry>-</entry>
+ <entry>EM OPEN RECTANGLE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AD0</entry>
+ <entry>U+2018</entry>
+ <entry>LEFT SINGLE QUOTATION MARK</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AD1</entry>
+ <entry>U+2019</entry>
+ <entry>RIGHT SINGLE QUOTATION MARK</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AD2</entry>
+ <entry>U+201C</entry>
+ <entry>LEFT DOUBLE QUOTATION MARK</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AD3</entry>
+ <entry>U+201D</entry>
+ <entry>RIGHT DOUBLE QUOTATION MARK</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AD4</entry>
+ <entry>U+211E</entry>
+ <entry>PRESCRIPTION, TAKE, RECIPE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AD6</entry>
+ <entry>U+2032</entry>
+ <entry>MINUTES</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AD7</entry>
+ <entry>U+2033</entry>
+ <entry>SECONDS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AD9</entry>
+ <entry>U+271D</entry>
+ <entry>LATIN CROSS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ADA</entry>
+ <entry>-</entry>
+ <entry>HEXAGRAM</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ADB</entry>
+ <entry>-</entry>
+ <entry>FILLED RECTANGLE BULLET</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ADC</entry>
+ <entry>-</entry>
+ <entry>FILLED LEFT TRIANGLE BULLET</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ADD</entry>
+ <entry>-</entry>
+ <entry>FILLED RIGHT TRIANGLE BULLET</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ADE</entry>
+ <entry>-</entry>
+ <entry>EM FILLED CIRCLE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ADF</entry>
+ <entry>-</entry>
+ <entry>EM FILLED RECTANGLE</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AE0</entry>
+ <entry>-</entry>
+ <entry>EN OPEN CIRCLE BULLET</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AE1</entry>
+ <entry>-</entry>
+ <entry>EN OPEN SQUARE BULLET</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AE2</entry>
+ <entry>-</entry>
+ <entry>OPEN RECTANGULAR BULLET</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AE3</entry>
+ <entry>-</entry>
+ <entry>OPEN TRIANGULAR BULLET UP</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AE4</entry>
+ <entry>-</entry>
+ <entry>OPEN TRIANGULAR BULLET DOWN</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AE5</entry>
+ <entry>-</entry>
+ <entry>OPEN STAR</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AE6</entry>
+ <entry>-</entry>
+ <entry>EN FILLED CIRCLE BULLET</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AE7</entry>
+ <entry>-</entry>
+ <entry>EN FILLED SQUARE BULLET</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AE8</entry>
+ <entry>-</entry>
+ <entry>FILLED TRIANGULAR BULLET UP</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AE9</entry>
+ <entry>-</entry>
+ <entry>FILLED TRIANGULAR BULLET DOWN</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AEA</entry>
+ <entry>-</entry>
+ <entry>LEFT POINTER</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AEB</entry>
+ <entry>-</entry>
+ <entry>RIGHT POINTER</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AEC</entry>
+ <entry>U+2663</entry>
+ <entry>CLUB</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AED</entry>
+ <entry>U+2666</entry>
+ <entry>DIAMOND</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AEE</entry>
+ <entry>U+2665</entry>
+ <entry>HEART</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AF0</entry>
+ <entry>U+2720</entry>
+ <entry>MALTESE CROSS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AF1</entry>
+ <entry>U+2020</entry>
+ <entry>DAGGER</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AF2</entry>
+ <entry>U+2021</entry>
+ <entry>DOUBLE DAGGER</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AF3</entry>
+ <entry>U+2713</entry>
+ <entry>CHECK MARK, TICK</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AF4</entry>
+ <entry>U+2717</entry>
+ <entry>BALLOT CROSS</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AF5</entry>
+ <entry>U+266F</entry>
+ <entry>MUSICAL SHARP</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AF6</entry>
+ <entry>U+266D</entry>
+ <entry>MUSICAL FLAT</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AF7</entry>
+ <entry>U+2642</entry>
+ <entry>MALE SYMBOL</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AF8</entry>
+ <entry>U+2640</entry>
+ <entry>FEMALE SYMBOL</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AF9</entry>
+ <entry>U+260E</entry>
+ <entry>TELEPHONE SYMBOL</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AFA</entry>
+ <entry>U+2315</entry>
+ <entry>TELEPHONE RECORDER SYMBOL</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AFB</entry>
+ <entry>U+2117</entry>
+ <entry>PHONOGRAPH COPYRIGHT SIGN</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AFC</entry>
+ <entry>U+2038</entry>
+ <entry>CARET</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AFD</entry>
+ <entry>U+201A</entry>
+ <entry>SINGLE LOW QUOTATION MARK</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AFE</entry>
+ <entry>U+201E</entry>
+ <entry>DOUBLE LOW QUOTATION MARK</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0AFF</entry>
+ <entry>-</entry>
+ <entry>CURSOR</entry>
+ <entry>Publish</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0BA3</entry>
+ <entry>-</entry>
+ <entry>LEFT CARET</entry>
+ <entry>APL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0BA6</entry>
+ <entry>-</entry>
+ <entry>RIGHT CARET</entry>
+ <entry>APL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0BA8</entry>
+ <entry>-</entry>
+ <entry>DOWN CARET</entry>
+ <entry>APL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0BA9</entry>
+ <entry>-</entry>
+ <entry>UP CARET</entry>
+ <entry>APL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0BC0</entry>
+ <entry>-</entry>
+ <entry>OVERBAR</entry>
+ <entry>APL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0BC2</entry>
+ <entry>U+22A5</entry>
+ <entry>DOWN TACK</entry>
+ <entry>APL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0BC3</entry>
+ <entry>-</entry>
+ <entry>UP SHOE (CAP)</entry>
+ <entry>APL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0BC4</entry>
+ <entry>U+230A</entry>
+ <entry>DOWN STILE</entry>
+ <entry>APL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0BC6</entry>
+ <entry>-</entry>
+ <entry>UNDERBAR</entry>
+ <entry>APL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0BCA</entry>
+ <entry>U+2218</entry>
+ <entry>JOT</entry>
+ <entry>APL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0BCC</entry>
+ <entry>U+2395</entry>
+ <entry>QUAD</entry>
+ <entry>APL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0BCE</entry>
+ <entry>U+22A4</entry>
+ <entry>UP TACK</entry>
+ <entry>APL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0BCF</entry>
+ <entry>U+25CB</entry>
+ <entry>CIRCLE</entry>
+ <entry>APL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0BD3</entry>
+ <entry>U+2308</entry>
+ <entry>UP STILE</entry>
+ <entry>APL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0BD6</entry>
+ <entry>-</entry>
+ <entry>DOWN SHOE (CUP)</entry>
+ <entry>APL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0BD8</entry>
+ <entry>-</entry>
+ <entry>RIGHT SHOE</entry>
+ <entry>APL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0BDA</entry>
+ <entry>-</entry>
+ <entry>LEFT SHOE</entry>
+ <entry>APL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0BDC</entry>
+ <entry>U+22A2</entry>
+ <entry>LEFT TACK</entry>
+ <entry>APL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0BFC</entry>
+ <entry>U+22A3</entry>
+ <entry>RIGHT TACK</entry>
+ <entry>APL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CDF</entry>
+ <entry>U+2017</entry>
+ <entry>DOUBLE LOW LINE</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CE0</entry>
+ <entry>U+05D0</entry>
+ <entry>HEBREW LETTER ALEF</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CE1</entry>
+ <entry>U+05D1</entry>
+ <entry>HEBREW LETTER BET</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CE2</entry>
+ <entry>U+05D2</entry>
+ <entry>HEBREW LETTER GIMEL</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CE3</entry>
+ <entry>U+05D3</entry>
+ <entry>HEBREW LETTER DALET</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CE4</entry>
+ <entry>U+05D4</entry>
+ <entry>HEBREW LETTER HE</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CE5</entry>
+ <entry>U+05D5</entry>
+ <entry>HEBREW LETTER VAV</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CE6</entry>
+ <entry>U+05D6</entry>
+ <entry>HEBREW LETTER ZAYIN</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CE7</entry>
+ <entry>U+05D7</entry>
+ <entry>HEBREW LETTER HET</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CE8</entry>
+ <entry>U+05D8</entry>
+ <entry>HEBREW LETTER TET</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CE9</entry>
+ <entry>U+05D9</entry>
+ <entry>HEBREW LETTER YOD</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CEA</entry>
+ <entry>U+05DA</entry>
+ <entry>HEBREW LETTER FINAL KAF</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CEB</entry>
+ <entry>U+05DB</entry>
+ <entry>HEBREW LETTER KAF</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CEC</entry>
+ <entry>U+05DC</entry>
+ <entry>HEBREW LETTER LAMED</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CED</entry>
+ <entry>U+05DD</entry>
+ <entry>HEBREW LETTER FINAL MEM</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CEE</entry>
+ <entry>U+05DE</entry>
+ <entry>HEBREW LETTER MEM</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CEF</entry>
+ <entry>U+05DF</entry>
+ <entry>HEBREW LETTER FINAL NUN</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CF0</entry>
+ <entry>U+05E0</entry>
+ <entry>HEBREW LETTER NUN</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CF1</entry>
+ <entry>U+05E1</entry>
+ <entry>HEBREW LETTER SAMEKH</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CF2</entry>
+ <entry>U+05E2</entry>
+ <entry>HEBREW LETTER AYIN</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CF3</entry>
+ <entry>U+05E3</entry>
+ <entry>HEBREW LETTER FINAL PE</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CF4</entry>
+ <entry>U+05E4</entry>
+ <entry>HEBREW LETTER PE</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CF5</entry>
+ <entry>U+05E5</entry>
+ <entry>HEBREW LETTER FINAL TSADI</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CF6</entry>
+ <entry>U+05E6</entry>
+ <entry>HEBREW LETTER TSADI</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CF7</entry>
+ <entry>U+05E7</entry>
+ <entry>HEBREW LETTER QOF</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CF8</entry>
+ <entry>U+05E8</entry>
+ <entry>HEBREW LETTER RESH</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CF9</entry>
+ <entry>U+05E9</entry>
+ <entry>HEBREW LETTER SHIN</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0CFA</entry>
+ <entry>U+05EA</entry>
+ <entry>HEBREW LETTER TAV</entry>
+ <entry>Hebrew</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DA1</entry>
+ <entry>U+0E01</entry>
+ <entry>THAI CHARACTER KO KAI</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DA2</entry>
+ <entry>U+0E02</entry>
+ <entry>THAI CHARACTER KHO KHAI</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DA3</entry>
+ <entry>U+0E03</entry>
+ <entry>THAI CHARACTER KHO KHUAT</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DA4</entry>
+ <entry>U+0E04</entry>
+ <entry>THAI CHARACTER KHO KHWAI</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DA5</entry>
+ <entry>U+0E05</entry>
+ <entry>THAI CHARACTER KHO KHON</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DA6</entry>
+ <entry>U+0E06</entry>
+ <entry>THAI CHARACTER KHO RAKHANG</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DA7</entry>
+ <entry>U+0E07</entry>
+ <entry>THAI CHARACTER NGO NGU</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DA8</entry>
+ <entry>U+0E08</entry>
+ <entry>THAI CHARACTER CHO CHAN</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DA9</entry>
+ <entry>U+0E09</entry>
+ <entry>THAI CHARACTER CHO CHING</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DAA</entry>
+ <entry>U+0E0A</entry>
+ <entry>THAI CHARACTER CHO CHANG</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DAB</entry>
+ <entry>U+0E0B</entry>
+ <entry>THAI CHARACTER SO SO</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DAC</entry>
+ <entry>U+0E0C</entry>
+ <entry>THAI CHARACTER CHO CHOE</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DAD</entry>
+ <entry>U+0E0D</entry>
+ <entry>THAI CHARACTER YO YING</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DAE</entry>
+ <entry>U+0E0E</entry>
+ <entry>THAI CHARACTER DO CHADA</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DAF</entry>
+ <entry>U+0E0F</entry>
+ <entry>THAI CHARACTER TO PATAK</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DB0</entry>
+ <entry>U+0E10</entry>
+ <entry>THAI CHARACTER THO THAN</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DB1</entry>
+ <entry>U+0E11</entry>
+ <entry>THAI CHARACTER THO NANGMONTHO</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DB2</entry>
+ <entry>U+0E12</entry>
+ <entry>THAI CHARACTER THO PHUTHAO</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DB3</entry>
+ <entry>U+0E13</entry>
+ <entry>THAI CHARACTER NO NEN</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DB4</entry>
+ <entry>U+0E14</entry>
+ <entry>THAI CHARACTER DO DEK</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DB5</entry>
+ <entry>U+0E15</entry>
+ <entry>THAI CHARACTER TO TAO</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DB6</entry>
+ <entry>U+0E16</entry>
+ <entry>THAI CHARACTER THO THUNG</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DB7</entry>
+ <entry>U+0E17</entry>
+ <entry>THAI CHARACTER THO THAHAN</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DB8</entry>
+ <entry>U+0E18</entry>
+ <entry>THAI CHARACTER THO THONG</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DB9</entry>
+ <entry>U+0E19</entry>
+ <entry>THAI CHARACTER NO NU</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DBA</entry>
+ <entry>U+0E1A</entry>
+ <entry>THAI CHARACTER BO BAIMAI</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DBB</entry>
+ <entry>U+0E1B</entry>
+ <entry>THAI CHARACTER PO PLA</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DBC</entry>
+ <entry>U+0E1C</entry>
+ <entry>THAI CHARACTER PHO PHUNG</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DBD</entry>
+ <entry>U+0E1D</entry>
+ <entry>THAI CHARACTER FO FA</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DBE</entry>
+ <entry>U+0E1E</entry>
+ <entry>THAI CHARACTER PHO PHAN</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DBF</entry>
+ <entry>U+0E1F</entry>
+ <entry>THAI CHARACTER FO FAN</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DC0</entry>
+ <entry>U+0E20</entry>
+ <entry>THAI CHARACTER PHO SAMPHAO</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DC1</entry>
+ <entry>U+0E21</entry>
+ <entry>THAI CHARACTER MO MA</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DC2</entry>
+ <entry>U+0E22</entry>
+ <entry>THAI CHARACTER YO YAK</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DC3</entry>
+ <entry>U+0E23</entry>
+ <entry>THAI CHARACTER RO RUA</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DC4</entry>
+ <entry>U+0E24</entry>
+ <entry>THAI CHARACTER RU</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DC5</entry>
+ <entry>U+0E25</entry>
+ <entry>THAI CHARACTER LO LING</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DC6</entry>
+ <entry>U+0E26</entry>
+ <entry>THAI CHARACTER LU</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DC7</entry>
+ <entry>U+0E27</entry>
+ <entry>THAI CHARACTER WO WAEN</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DC8</entry>
+ <entry>U+0E28</entry>
+ <entry>THAI CHARACTER SO SALA</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DC9</entry>
+ <entry>U+0E29</entry>
+ <entry>THAI CHARACTER SO RUSI</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DCA</entry>
+ <entry>U+0E2A</entry>
+ <entry>THAI CHARACTER SO SUA</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DCB</entry>
+ <entry>U+0E2B</entry>
+ <entry>THAI CHARACTER HO HIP</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DCC</entry>
+ <entry>U+0E2C</entry>
+ <entry>THAI CHARACTER LO CHULA</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DCD</entry>
+ <entry>U+0E2D</entry>
+ <entry>THAI CHARACTER O ANG</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DCE</entry>
+ <entry>U+0E2E</entry>
+ <entry>THAI CHARACTER HO NOKHUK</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DCF</entry>
+ <entry>U+0E2F</entry>
+ <entry>THAI CHARACTER PAIYANNOI</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DD0</entry>
+ <entry>U+0E30</entry>
+ <entry>THAI CHARACTER SARA A</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DD1</entry>
+ <entry>U+0E31</entry>
+ <entry>THAI CHARACTER MAI HAN-AKAT</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DD2</entry>
+ <entry>U+0E32</entry>
+ <entry>THAI CHARACTER SARA AA</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DD3</entry>
+ <entry>U+0E33</entry>
+ <entry>THAI CHARACTER SARA AM</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DD4</entry>
+ <entry>U+0E34</entry>
+ <entry>THAI CHARACTER SARA I</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DD5</entry>
+ <entry>U+0E35</entry>
+ <entry>THAI CHARACTER SARA II</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DD6</entry>
+ <entry>U+0E36</entry>
+ <entry>THAI CHARACTER SARA UE</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DD7</entry>
+ <entry>U+0E37</entry>
+ <entry>THAI CHARACTER SARA UEE</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DD8</entry>
+ <entry>U+0E38</entry>
+ <entry>THAI CHARACTER SARA U</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DD9</entry>
+ <entry>U+0E39</entry>
+ <entry>THAI CHARACTER SARA UU</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DDA</entry>
+ <entry>U+0E3A</entry>
+ <entry>THAI CHARACTER PHINTHU</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DDF</entry>
+ <entry>U+0E3F</entry>
+ <entry>THAI CURRENCY SYMBOL BAHT</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DE0</entry>
+ <entry>U+0E40</entry>
+ <entry>THAI CHARACTER SARA E</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DE1</entry>
+ <entry>U+0E41</entry>
+ <entry>THAI CHARACTER SARA AE</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DE2</entry>
+ <entry>U+0E42</entry>
+ <entry>THAI CHARACTER SARA O</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DE3</entry>
+ <entry>U+0E43</entry>
+ <entry>THAI CHARACTER SARA AI MAIMUAN</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DE4</entry>
+ <entry>U+0E44</entry>
+ <entry>THAI CHARACTER SARA AI MAIMALAI</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DE5</entry>
+ <entry>U+0E45</entry>
+ <entry>THAI CHARACTER LAKKHANGYAO</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DE6</entry>
+ <entry>U+0E46</entry>
+ <entry>THAI CHARACTER MAIYAMOK</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DE7</entry>
+ <entry>U+0E47</entry>
+ <entry>THAI CHARACTER MAITAIKHU</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DE8</entry>
+ <entry>U+0E48</entry>
+ <entry>THAI CHARACTER MAI EK</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DE9</entry>
+ <entry>U+0E49</entry>
+ <entry>THAI CHARACTER MAI THO</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DEA</entry>
+ <entry>U+0E4A</entry>
+ <entry>THAI CHARACTER MAI TRI</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DEB</entry>
+ <entry>U+0E4B</entry>
+ <entry>THAI CHARACTER MAI CHATTAWA</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DEC</entry>
+ <entry>U+0E4C</entry>
+ <entry>THAI CHARACTER THANTHAKHAT</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DED</entry>
+ <entry>U+0E4D</entry>
+ <entry>THAI CHARACTER NIKHAHIT</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DF0</entry>
+ <entry>U+0E50</entry>
+ <entry>THAI DIGIT ZERO</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DF1</entry>
+ <entry>U+0E51</entry>
+ <entry>THAI DIGIT ONE</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DF2</entry>
+ <entry>U+0E52</entry>
+ <entry>THAI DIGIT TWO</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DF3</entry>
+ <entry>U+0E53</entry>
+ <entry>THAI DIGIT THREE</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DF4</entry>
+ <entry>U+0E54</entry>
+ <entry>THAI DIGIT FOUR</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DF5</entry>
+ <entry>U+0E55</entry>
+ <entry>THAI DIGIT FIVE</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DF6</entry>
+ <entry>U+0E56</entry>
+ <entry>THAI DIGIT SIX</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DF7</entry>
+ <entry>U+0E57</entry>
+ <entry>THAI DIGIT SEVEN</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DF8</entry>
+ <entry>U+0E58</entry>
+ <entry>THAI DIGIT EIGHT</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0DF9</entry>
+ <entry>U+0E59</entry>
+ <entry>THAI DIGIT NINE</entry>
+ <entry>Thai</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EA1</entry>
+ <entry>-</entry>
+ <entry>HANGUL KIYEOG</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EA2</entry>
+ <entry>-</entry>
+ <entry>HANGUL SSANG KIYEOG</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EA3</entry>
+ <entry>-</entry>
+ <entry>HANGUL KIYEOG SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EA4</entry>
+ <entry>-</entry>
+ <entry>HANGUL NIEUN</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EA5</entry>
+ <entry>-</entry>
+ <entry>HANGUL NIEUN JIEUJ</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EA6</entry>
+ <entry>-</entry>
+ <entry>HANGUL NIEUN HIEUH</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EA7</entry>
+ <entry>-</entry>
+ <entry>HANGUL DIKEUD</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EA8</entry>
+ <entry>-</entry>
+ <entry>HANGUL SSANG DIKEUD</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EA9</entry>
+ <entry>-</entry>
+ <entry>HANGUL RIEUL</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EAA</entry>
+ <entry>-</entry>
+ <entry>HANGUL RIEUL KIYEOG</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EAB</entry>
+ <entry>-</entry>
+ <entry>HANGUL RIEUL MIEUM</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EAC</entry>
+ <entry>-</entry>
+ <entry>HANGUL RIEUL PIEUB</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EAD</entry>
+ <entry>-</entry>
+ <entry>HANGUL RIEUL SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EAE</entry>
+ <entry>-</entry>
+ <entry>HANGUL RIEUL TIEUT</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EAF</entry>
+ <entry>-</entry>
+ <entry>HANGUL RIEUL PHIEUF</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EB0</entry>
+ <entry>-</entry>
+ <entry>HANGUL RIEUL HIEUH</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EB1</entry>
+ <entry>-</entry>
+ <entry>HANGUL MIEUM</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EB2</entry>
+ <entry>-</entry>
+ <entry>HANGUL PIEUB</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EB3</entry>
+ <entry>-</entry>
+ <entry>HANGUL SSANG PIEUB</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EB4</entry>
+ <entry>-</entry>
+ <entry>HANGUL PIEUB SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EB5</entry>
+ <entry>-</entry>
+ <entry>HANGUL SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EB6</entry>
+ <entry>-</entry>
+ <entry>HANGUL SSANG SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EB7</entry>
+ <entry>-</entry>
+ <entry>HANGUL IEUNG</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EB8</entry>
+ <entry>-</entry>
+ <entry>HANGUL JIEUJ</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EB9</entry>
+ <entry>-</entry>
+ <entry>HANGUL SSANG JIEUJ</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EBA</entry>
+ <entry>-</entry>
+ <entry>HANGUL CIEUC</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EBB</entry>
+ <entry>-</entry>
+ <entry>HANGUL KHIEUQ</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EBC</entry>
+ <entry>-</entry>
+ <entry>HANGUL TIEUT</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EBD</entry>
+ <entry>-</entry>
+ <entry>HANGUL PHIEUF</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EBE</entry>
+ <entry>-</entry>
+ <entry>HANGUL HIEUH</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EBF</entry>
+ <entry>-</entry>
+ <entry>HANGUL A</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EC0</entry>
+ <entry>-</entry>
+ <entry>HANGUL AE</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EC1</entry>
+ <entry>-</entry>
+ <entry>HANGUL YA</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EC2</entry>
+ <entry>-</entry>
+ <entry>HANGUL YAE</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EC3</entry>
+ <entry>-</entry>
+ <entry>HANGUL EO</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EC4</entry>
+ <entry>-</entry>
+ <entry>HANGUL E</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EC5</entry>
+ <entry>-</entry>
+ <entry>HANGUL YEO</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EC6</entry>
+ <entry>-</entry>
+ <entry>HANGUL YE</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EC7</entry>
+ <entry>-</entry>
+ <entry>HANGUL O</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EC8</entry>
+ <entry>-</entry>
+ <entry>HANGUL WA</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EC9</entry>
+ <entry>-</entry>
+ <entry>HANGUL WAE</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ECA</entry>
+ <entry>-</entry>
+ <entry>HANGUL OE</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ECB</entry>
+ <entry>-</entry>
+ <entry>HANGUL YO</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ECC</entry>
+ <entry>-</entry>
+ <entry>HANGUL U</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ECD</entry>
+ <entry>-</entry>
+ <entry>HANGUL WEO</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ECE</entry>
+ <entry>-</entry>
+ <entry>HANGUL WE</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ECF</entry>
+ <entry>-</entry>
+ <entry>HANGUL WI</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ED0</entry>
+ <entry>-</entry>
+ <entry>HANGUL YU</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ED1</entry>
+ <entry>-</entry>
+ <entry>HANGUL EU</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ED2</entry>
+ <entry>-</entry>
+ <entry>HANGUL YI</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ED3</entry>
+ <entry>-</entry>
+ <entry>HANGUL I</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ED4</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG KIYEOG</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ED5</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG SSANG KIYEOG</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ED6</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG KIYEOG SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ED7</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG NIEUN</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ED8</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG NIEUN JIEUJ</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0ED9</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG NIEUN HIEUH</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EDA</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG DIKEUD</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EDB</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG RIEUL</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EDC</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG RIEUL KIYEOG</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EDD</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG RIEUL MIEUM</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EDE</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG RIEUL PIEUB</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EDF</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG RIEUL SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EE0</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG RIEUL TIEUT</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EE1</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG RIEUL PHIEUF</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EE2</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG RIEUL HIEUH</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EE3</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG MIEUM</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EE4</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG PIEUB</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EE5</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG PIEUB SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EE6</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EE7</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG SSANG SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EE8</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG IEUNG</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EE9</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG JIEUJ</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EEA</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG CIEUC</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EEB</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG KHIEUQ</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EEC</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG TIEUT</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EED</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG PHIEUF</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EEE</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG HIEUH</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EEF</entry>
+ <entry>-</entry>
+ <entry>HANGUL RIEUL YEORIN HIEUH</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EF0</entry>
+ <entry>-</entry>
+ <entry>HANGUL SUNKYEONGEUM MIEUM</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EF1</entry>
+ <entry>-</entry>
+ <entry>HANGUL SUNKYEONGEUM PIEUB</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EF2</entry>
+ <entry>-</entry>
+ <entry>HANGUL PAN SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EF3</entry>
+ <entry>-</entry>
+ <entry>HANGUL KKOGJI DALRIN IEUNG</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EF4</entry>
+ <entry>-</entry>
+ <entry>HANGUL SUNKYEONGEUM PHIEUF</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EF5</entry>
+ <entry>-</entry>
+ <entry>HANGUL YEORIN HIEUH</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EF6</entry>
+ <entry>-</entry>
+ <entry>HANGUL ARAE A</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EF7</entry>
+ <entry>-</entry>
+ <entry>HANGUL ARAE AE</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EF8</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG PAN SIOS</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EF9</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG KKOGJI DALRIN IEUNG</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EFA</entry>
+ <entry>-</entry>
+ <entry>HANGUL JONG SEONG YEORIN HIEUH</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x0EFF</entry>
+ <entry>-</entry>
+ <entry>KOREAN WON</entry>
+ <entry>Korean</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x13BC</entry>
+ <entry>U+0152</entry>
+ <entry>LATIN CAPITAL LIGATURE OE</entry>
+ <entry>Latin-9</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x13BD</entry>
+ <entry>U+0153</entry>
+ <entry>LATIN SMALL LIGATURE OE</entry>
+ <entry>Latin-9</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x13BE</entry>
+ <entry>U+0178</entry>
+ <entry>LATIN CAPITAL LETTER Y WITH DIAERESIS</entry>
+ <entry>Latin-9</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x20A0</entry>
+ <entry>-</entry>
+ <entry>CURRENCY ECU SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x20A1</entry>
+ <entry>-</entry>
+ <entry>CURRENCY COLON SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x20A2</entry>
+ <entry>-</entry>
+ <entry>CURRENCY CRUZEIRO SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x20A3</entry>
+ <entry>-</entry>
+ <entry>CURRENCY FRENCH FRANC SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x20A4</entry>
+ <entry>-</entry>
+ <entry>CURRENCY LIRA SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x20A5</entry>
+ <entry>-</entry>
+ <entry>CURRENCY MILL SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x20A6</entry>
+ <entry>-</entry>
+ <entry>CURRENCY NAIRA SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x20A7</entry>
+ <entry>-</entry>
+ <entry>CURRENCY PESETA SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x20A8</entry>
+ <entry>-</entry>
+ <entry>CURRENCY RUPEE SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x20A9</entry>
+ <entry>-</entry>
+ <entry>CURRENCY WON SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x20AA</entry>
+ <entry>-</entry>
+ <entry>CURRENCY NEW SHEQEL SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row rowsep="0">
+ <entry>#x20AB</entry>
+ <entry>-</entry>
+ <entry>CURRENCY DONG SIGN</entry>
+ <entry>Currency</entry>
+ </row>
+ <row rowsep="0">
+ <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..1cd3889
--- /dev/null
+++ b/specs/sect1-9.xml
@@ -0,0 +1,14737 @@
+<chapter>
+<title>TITLE</title>
+<sect1 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>
+</sect1>
+
+<sect1 id="protocol_formats">
+<title>Protocol Formats</title>
+<!-- .XS -->
+<!-- (SN Protocol Formats -->
+<!-- .XE -->
+<!-- .SH -->
+<para>
+<emphasis role="bold">Request Format</emphasis>
+</para>
+<para>
+Every request contains an 8-bit major opcode and a 16-bit length field
+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 extensions.
+Extensions are intended to contain multiple requests,
+so extension requests typically have an additional minor opcode encoded
+in the second data byte in the request header.
+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 sequence number,
+starting with one, that is used in replies, errors, and events.
+</para>
+<para>
+<emphasis role="bold">Reply Format</emphasis>
+</para>
+<para>
+Every reply 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>
+<!-- .SH -->
+<para>
+<emphasis role="bold">Error Format</emphasis>
+</para>
+<para>
+Error reports are 32 bytes long.
+Every error includes an 8-bit error code.
+Error codes 128 through 255 are reserved for extensions.
+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 section 4),
+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>
+
+<para>
+<emphasis role="bold">Event Format</emphasis>
+</para>
+<para>
+<!-- .LP -->
+Events 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
+<emphasis role='bold'>SendEvent </emphasis>
+request.
+Event codes 64 through 127 are reserved for extensions, although the core
+protocol does not define a mechanism for selecting interest in such events.
+Every core event (with the exception of
+<emphasis role='bold'>KeymapNotify ) </emphasis>
+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>
+</sect1>
+
+<sect1 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 section 9 are described in the following format: <!-- xref -->
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<literallayout class="monospaced">
+<emphasis role='bold'>RequestName</emphasis>
+ <emphasis remap='I'>arg1</emphasis>: type1
+ ...
+ <emphasis remap='I'>argN</emphasis>: typeN
+ -&gt;
+ result1: type1
+ ...
+ resultM: typeM
+
+ Errors: kind1, ..., kindK
+
+ Description.
+</literallayout>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If no -&gt; is present in the description,
+then the request has no reply (it is asynchronous),
+although errors may still be reported.
+If -&gt;+ is used,
+then one or more replies can be generated for a single request.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Events in section 11 are described in the following format:
+ </para> <!-- xref -->
+ </listitem>
+ <listitem>
+ <para>
+<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>
+</sect1>
+
+<sect1 id="common_types">
+<title>Common Types</title>
+<!-- .XS -->
+<!-- (SN Common Types -->
+<!-- .XE -->
+<informaltable frame="none">
+ <tgroup cols='2' align='left'>
+ <colspec colname='c1' colwidth='1*' colsep="0"/>
+ <colspec colname='c2' colwidth='2*' colsep="0"/>
+ <thead>
+ <row rowsep="0">
+ <entry>Name</entry>
+ <entry>Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row rowsep="0">
+ <entry>LISTofFOO</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 rowsep="0">
+ <entry><para>BITMASK</para><para>LISTofVALUE</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 rowsep="0">
+ <entry>OR</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 rowsep="0">
+ <entry>WINDOW</entry>
+ <entry>32-bit value (top three bits guaranteed to be zero)</entry>
+ </row>
+ <row rowsep="0">
+ <entry>PIXMAP</entry>
+ <entry>32-bit value (top three bits guaranteed to be zero)</entry>
+ </row>
+ <row rowsep="0">
+ <entry>CURSOR</entry>
+ <entry>32-bit value (top three bits guaranteed to be zero)</entry>
+ </row>
+ <row rowsep="0">
+ <entry>FONT</entry>
+ <entry>32-bit value (top three bits guaranteed to be zero)</entry>
+ </row>
+ <row rowsep="0">
+ <entry>GCONTEXT</entry>
+ <entry>32-bit value (top three bits guaranteed to be zero)</entry>
+ </row>
+ <row rowsep="0">
+ <entry>COLORMAP</entry>
+ <entry>32-bit value (top three bits guaranteed to be zero)</entry>
+ </row>
+ <row rowsep="0">
+ <entry>DRAWABLE</entry>
+ <entry>WINDOW or PIXMAP</entry>
+ </row>
+ <row rowsep="0">
+ <entry>FONTABLE</entry>
+ <entry>FONT or GCONTEXT</entry>
+ </row>
+ <row rowsep="0">
+ <entry>ATOM</entry>
+ <entry>32-bit value (top three bits guaranteed to be zero)</entry>
+ </row>
+ <row rowsep="0">
+ <entry>VISUALID</entry>
+ <entry>32-bit value (top three bits guaranteed to be zero)</entry>
+ </row>
+ <row rowsep="0">
+ <entry>VALUE</entry>
+ <entry>32-bit quantity (used only in LISTofVALUE)</entry>
+ </row>
+ <row rowsep="0">
+ <entry>BYTE</entry>
+ <entry>8-bit value</entry>
+ </row>
+ <row rowsep="0">
+ <entry>INT8</entry>
+ <entry>8-bit signed integer</entry>
+ </row>
+ <row rowsep="0">
+ <entry>INT16</entry>
+ <entry>16-bit signed integer</entry>
+ </row>
+ <row rowsep="0">
+ <entry>INT32</entry>
+ <entry>32-bit signed integer</entry>
+ </row>
+ <row rowsep="0">
+ <entry>CARD8</entry>
+ <entry>8-bit unsigned integer</entry>
+ </row>
+ <row rowsep="0">
+ <entry>CARD16</entry>
+ <entry>16-bit unsigned integer</entry>
+ </row>
+ <row rowsep="0">
+ <entry>CARD32</entry>
+ <entry>32-bit unsigned integer</entry>
+ </row>
+ <row rowsep="0">
+ <entry>TIMESTAMP</entry>
+ <entry>CARD32</entry>
+ </row>
+ <row rowsep="0">
+ <entry>BITGRAVITY</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 rowsep="0">
+ <entry>WINGRAVITY</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 rowsep="0">
+ <entry>BOOL</entry>
+ <entry>
+{ <emphasis role='bold'>True</emphasis>,
+<emphasis role='bold'>False</emphasis> }
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry>EVENT</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 rowsep="0">
+ <entry>POINTEREVENT</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 rowsep="0">
+ <entry>DEVICEEVENT</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 rowsep="0">
+ <entry>KEYSYM</entry>
+ <entry>32-bit value (top three bits guaranteed to be zero)</entry>
+ </row>
+ <row rowsep="0">
+ <entry>KEYCODE</entry>
+ <entry>CARD8</entry>
+ </row>
+ <row rowsep="0">
+ <entry>BUTTON</entry>
+ <entry>CARD8</entry>
+ </row>
+ <row rowsep="0">
+ <entry>KEYMASK</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 rowsep="0">
+ <entry>BUTMASK</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 rowsep="0">
+ <entry>KEYBUTMASK</entry>
+ <entry>KEYMASK or BUTMASK</entry>
+ </row>
+ <row rowsep="0">
+ <entry>STRING8</entry>
+ <entry>LISTofCARD8</entry>
+ </row>
+ <row rowsep="0">
+ <entry>STRING16</entry>
+ <entry>LISTofCHAR2B</entry>
+ </row>
+ <row rowsep="0">
+ <entry>CHAR2B</entry>
+ <entry>[byte1, byte2: CARD8]</entry>
+ </row>
+ <row rowsep="0">
+ <entry>POINT</entry>
+ <entry>[x, y: INT16]</entry>
+ </row>
+ <row rowsep="0">
+ <entry>RECTANGLE</entry>
+ <entry>
+<para>[x, y: INT16,</para>
+<para>width, height: CARD16]</para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry>ARC</entry>
+ <entry>
+<para>[x, y: INT16,</para>
+<para>width, height: CARD16,</para>
+<para>angle1, angle2: INT16]</para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry>HOST</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
+<emphasis role='bold'>ChangeHosts </emphasis>
+request).
+</para>
+</sect1>
+
+<sect1 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
+<emphasis role='bold'>ChangeWindowAttributes</emphasis>
+<emphasis role='bold'>ChangeGC</emphasis>,
+<emphasis role='bold'>PolyText8</emphasis>,
+<emphasis role='bold'>PolyText16</emphasis>,
+<emphasis role='bold'>FreeColors</emphasis>,
+<emphasis role='bold'>StoreColors</emphasis>
+and
+<emphasis role='bold'>ChangeKeyboardControl</emphasis>.
+</para>
+
+<para>
+The following error codes result from various requests as follows:
+</para>
+
+<informaltable frame="none">
+ <tgroup cols='2' align='left'>
+ <colspec colname='c1' colwidth='1*' colsep="0"/>
+ <colspec colname='c2' colwidth='2*' colsep="0"/>
+ <thead>
+ <row rowsep="0">
+ <entry>Error</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row rowsep="0">
+ <entry><emphasis role='bold'>Access</emphasis></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 rowsep="0">
+ <entry><emphasis role='bold'>Alloc</emphasis></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 rowsep="0">
+ <entry><emphasis role='bold'>Atom</emphasis></entry>
+ <entry>
+A value for an ATOM argument does not name a defined ATOM.
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry><emphasis role='bold'>Colormap</emphasis></entry>
+ <entry>
+A value for a COLORMAP argument does not name a defined COLORMAP.
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry><emphasis role='bold'>Cursor</emphasis></entry>
+ <entry>
+A value for a CURSOR argument does not name a defined CURSOR.
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry><emphasis role='bold'>Drawable</emphasis></entry>
+ <entry>
+A value for a DRAWABLE argument does not name a defined WINDOW
+or PIXMAP.
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry><emphasis role='bold'>Font</emphasis></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 rowsep="0">
+ <entry><emphasis role='bold'>GContext</emphasis></entry>
+ <entry>
+A value for a GCONTEXT argument does not name a defined GCONTEXT.
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry><emphasis role='bold'>IDChoice</emphasis></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 rowsep="0">
+ <entry><emphasis role='bold'>Implementation</emphasis></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 rowsep="0">
+ <entry><emphasis role='bold'>Length</emphasis></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 rowsep="0">
+ <entry><emphasis role='bold'>Match</emphasis></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 rowsep="0">
+ <entry><emphasis role='bold'>Name</emphasis></entry>
+ <entry>
+A font or color of the specified name does not exist.
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry><emphasis role='bold'>Pixmap</emphasis></entry>
+ <entry>
+A value for a PIXMAP argument does not name a defined PIXMAP.
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry><emphasis role='bold'>Request</emphasis></entry>
+ <entry>
+The major or minor opcode does not specify a valid request.
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry><emphasis role='bold'>Value</emphasis></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 rowsep="0">
+ <entry><emphasis role='bold'>Window</emphasis></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 &gt;</emphasis>.
+</para></note>
+</sect1>
+
+<sect1 id="keyboards">
+<title>Keyboards</title>
+<!-- .XS -->
+<!-- (SN Keyboards -->
+<!-- .XE -->
+<para>
+A KEYCODE represents a physical (or logical) key.
+Keycodes lie in the inclusive range [8,255].
+A keycode value carries no intrinsic information,
+although server implementors may attempt to encode geometry 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>
+A KEYSYM is an encoding of a symbol on the cap of a key.
+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
+<emphasis role='bold'>NoSymbol</emphasis>
+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> NoSymbol
+<emphasis remap='I'>K</emphasis> NoSymbol".
+If the list (ignoring trailing NoSymbol 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
+<emphasis role='bold'>NoSymbol </emphasis>
+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> NoSymbol".
+When an explicit "void" element is desired in the list,
+the value
+<emphasis role='bold'>VoidSymbol </emphasis>
+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
+<emphasis role='bold'>NoSymbol , </emphasis>
+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>
+The standard rules for obtaining a KEYSYM from a
+<emphasis role='bold'>KeyPress </emphasis>
+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
+called the "group modifier". For any KEYCODE, Group 1 is used when the
+group modifier is off, and Group 2 is used when the group modifier is on.
+</para>
+
+<para>
+The
+<emphasis role='bold'>Lock </emphasis>
+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>
+<!-- .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
+"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>
+</sect1>
+
+<sect1 id="pointers">
+<title>Pointers</title>
+<!-- .XS -->
+<!-- (SN Pointers -->
+<!-- .XE -->
+<para>
+Buttons are always numbered starting with one.
+</para>
+</sect1>
+
+<sect1 id="predefined_atoms">
+<title>Predefined Atoms</title>
+<!-- .XS -->
+<!-- (SN Predefined Atoms -->
+<!-- .XE -->
+<para>
+<!-- .LP -->
+Predefined atoms are not strictly necessary and may not be useful in all
+environments, but they will eliminate many
+<emphasis role='bold'>InternAtom </emphasis>
+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
+<emphasis remap='I'>Inter-Client Communication Conventions Manual</emphasis>
+and the <emphasis remap='I'>X Logical Font Description Conventions</emphasis>.
+</para>
+
+<para>
+The following names have predefined atom values.
+Note that uppercase and lowercase matter.
+</para>
+
+<informaltable frame="none">
+ <tgroup cols='3' align='left'>
+ <colspec colname='c1' colsep="0"/>
+ <colspec colname='c2' colsep="0"/>
+ <colspec colname='c3' colsep="0"/>
+ <tbody>
+ <row rowsep="0">
+ <entry>ARC</entry>
+ <entry>ITALIC_ANGLE</entry>
+ <entry>STRING</entry>
+ </row>
+ <row rowsep="0">
+ <entry>ATOM</entry>
+ <entry>MAX_SPACE</entry>
+ <entry>SUBSCRIPT_X</entry>
+ </row>
+ <row rowsep="0">
+ <entry>BITMAP</entry>
+ <entry>MIN_SPACE</entry>
+ <entry>SUBSCRIPT_Y</entry>
+ </row>
+ <row rowsep="0">
+ <entry>CAP_HEIGHT</entry>
+ <entry>NORM_SPACE</entry>
+ <entry>SUPERSCRIPT_X</entry>
+ </row>
+ <row rowsep="0">
+ <entry>CARDINAL</entry>
+ <entry>NOTICE</entry>
+ <entry>SUPERSCRIPT_Y</entry>
+ </row>
+ <row rowsep="0">
+ <entry>COLORMAP</entry>
+ <entry>PIXMAP</entry>
+ <entry>UNDERLINE_POSITION</entry>
+ </row>
+ <row rowsep="0">
+ <entry>COPYRIGHT</entry>
+ <entry>POINT</entry>
+ <entry>UNDERLINE_THICKNESS</entry>
+ </row>
+ <row rowsep="0">
+ <entry>CURSOR</entry>
+ <entry>POINT_SIZE</entry>
+ <entry>VISUALID</entry>
+ </row>
+ <row rowsep="0">
+ <entry>CUT_BUFFER0</entry>
+ <entry>PRIMARY</entry>
+ <entry>WEIGHT</entry>
+ </row>
+ <row rowsep="0">
+ <entry>CUT_BUFFER1</entry>
+ <entry>QUAD_WIDTH</entry>
+ <entry>WINDOW</entry>
+ </row>
+ <row rowsep="0">
+ <entry>CUT_BUFFER2</entry>
+ <entry>RECTANGLE</entry>
+ <entry>WM_CLASS</entry>
+ </row>
+ <row rowsep="0">
+ <entry>CUT_BUFFER3</entry>
+ <entry>RESOLUTION</entry>
+ <entry>WM_CLIENT_MACHINE</entry>
+ </row>
+ <row rowsep="0">
+ <entry>CUT_BUFFER4</entry>
+ <entry>RESOURCE_MANAGER</entry>
+ <entry>WM_COMMAND</entry>
+ </row>
+ <row rowsep="0">
+ <entry>CUT_BUFFER5</entry>
+ <entry>RGB_BEST_MAP</entry>
+ <entry>WM_HINTS</entry>
+ </row>
+ <row rowsep="0">
+ <entry>CUT_BUFFER6</entry>
+ <entry>RGB_BLUE_MAP</entry>
+ <entry>WM_ICON_NAME</entry>
+ </row>
+ <row rowsep="0">
+ <entry>CUT_BUFFER7</entry>
+ <entry>RGB_COLOR_MAP</entry>
+ <entry>WM_ICON_SIZE</entry>
+ </row>
+ <row rowsep="0">
+ <entry>DRAWABLE</entry>
+ <entry>RGB_DEFAULT_MAP</entry>
+ <entry>WM_NAME</entry>
+ </row>
+ <row rowsep="0">
+ <entry>END_SPACE</entry>
+ <entry>RGB_GRAY_MAP</entry>
+ <entry>WM_NORMAL_HINTS</entry>
+ </row>
+ <row rowsep="0">
+ <entry>FAMILY_NAME</entry>
+ <entry>RGB_GREEN_MAP</entry>
+ <entry>WM_SIZE_HINTS</entry>
+ </row>
+ <row rowsep="0">
+ <entry>FONT</entry>
+ <entry>RGB_RED_MAP</entry>
+ <entry>WM_TRANSIENT_FOR</entry>
+ </row>
+ <row rowsep="0">
+ <entry>FONT_NAME</entry>
+ <entry>SECONDARY</entry>
+ <entry>WM_ZOOM_HINTS</entry>
+ </row>
+ <row rowsep="0">
+ <entry>FULL_NAME</entry>
+ <entry>STRIKEOUT_ASCENT</entry>
+ <entry>X_HEIGHT</entry>
+ </row>
+ <row rowsep="0">
+ <entry>INTEGER</entry>
+ <entry></entry>
+ <entry>STRIKEOUT_DESCENT</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<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>
+</sect1>
+
+<sect1 id="connection_setup">
+<title>Connection Setup</title>
+<!-- .XS -->
+<!-- (SN Connection Setup -->
+<!-- .XE -->
+<para>
+For remote clients,
+the X protocol can be built on top of any reliable byte stream.
+</para>
+
+<para>
+<emphasis role="bold">Connection Initiation</emphasis>
+</para>
+
+<para>
+<!-- .LP -->
+The client must send an initial byte of data to identify the byte order to be
+employed.
+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>
+The authorization name indicates what authorization (and authentication)
+protocol the client
+expects the server to use, and the data is specific to that protocol.
+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>
+<para>
+<emphasis role="bold">Server Response</emphasis>
+</para>
+
+<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'>
+ <colspec colname='c1' colwidth='1*' colsep="0"/>
+ <colspec colname='c2' colwidth='2*' colsep="0"/>
+ <tbody>
+ <row rowsep="0">
+ <entry>FORMAT:</entry>
+ <entry>[depth: CARD8,</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>
+bits-per-pixel: {1, 4, 8, 16, 24, 32}
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>
+scanline-pad: {8, 16, 32}]
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry>SCREEN:</entry>
+ <entry>[root: WINDOW</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>width-in-pixels, height-in-pixels: CARD16</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>width-in-millimeters, height-in-millimeters: CARD16</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>allowed-depths: LISTofDEPTH</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>root-depth: CARD8</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>root-visual: VISUALID</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>default-colormap: COLORMAP</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>white-pixel, black-pixel: CARD32</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>min-installed-maps, max-installed-maps: CARD16</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>backing-stores: {Never, WhenMapped, Always}</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>save-unders: BOOL</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>current-input-masks: SETofEVENT]</entry>
+ </row>
+ <row rowsep="0">
+ <entry>DEPTH:</entry>
+ <entry>[depth: CARD8</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>visuals: LISTofVISUALTYPE]</entry>
+ </row>
+ <row rowsep="0">
+ <entry>VISUALTYPE:</entry>
+ <entry>[visual-id: VISUALID</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>
+class: {StaticGray, StaticColor, TrueColor, GrayScale,
+PseudoColor, DirectColor}
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>red-mask, green-mask, blue-mask: CARD32</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>bits-per-rgb-value: CARD8</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>colormap-entries: CARD16]</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+ </blockquote>
+</blockquote>
+
+<para>
+Server Information
+</para>
+
+<para>
+The information that is global to the server is:
+</para>
+
+<para>
+<!-- .LP -->
+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>
+<!-- .LP -->
+The vendor string gives some identification of the owner of the server
+implementation.
+The vendor controls the semantics of the release number.
+</para>
+<para>
+<!-- .LP -->
+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.
+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>
+<!-- .LP -->
+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>
+<!-- .LP -->
+A bitmap is represented in scanline order.
+Each scanline 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.
+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>
+<!-- .LP -->
+Pixmap-formats contains one entry for each depth value.
+The entry describes the Z format 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>
+<!-- .LP -->
+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>
+<!-- .LP -->
+The server may retain the recent history of pointer motion and do so to a
+finer granularity than is reported by
+<emphasis role='bold'>MotionNotify </emphasis>
+events.
+The
+<emphasis role='bold'>GetMotionEvents </emphasis>
+request makes such history available.
+The motion-buffer-size gives the approximate maximum number
+of elements in the history buffer.
+</para>
+<para>
+<!-- .LP -->
+Maximum-request-length specifies the maximum length of a request
+accepted by the server, in 4-byte units.
+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>
+<!-- .LP -->
+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>
+<para>
+<emphasis role="bold">Screen Information</emphasis>
+</para>
+<para>
+The information that applies per screen is:
+</para>
+
+<para>
+<!-- .LP -->
+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>
+<!-- .LP -->
+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>
+<!-- .LP -->
+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>
+<!-- .LP -->
+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>
+<!-- .LP -->
+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>
+<!-- .LP -->
+Min-installed-maps specifies the number of maps that can be guaranteed
+to be installed simultaneously (with
+<emphasis role='bold'>InstallColormap ), </emphasis>
+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>
+<!-- .LP -->
+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
+<emphasis role='bold'>CreateWindow </emphasis>
+and
+<emphasis role='bold'>ChangeWindowAttributes , </emphasis>
+although again it may be storage limited.
+</para>
+<para>
+<!-- .LP -->
+The current-input-events is what
+<emphasis role='bold'>GetWindowAttributes </emphasis>
+would return for the all-event-masks for the root window.
+<!-- .SH -->
+</para>
+<para>
+<emphasis role="bold">Visual Information</emphasis>
+</para>
+<para>
+<!-- .LP -->
+The information that applies per visual-type is:
+</para>
+<para>
+<!-- .LP -->
+A given visual type might be listed for more than one depth or for
+more than one screen.
+</para>
+<para>
+<!-- .LP -->
+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>
+<!-- .LP -->
+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>
+<!-- .LP -->
+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>
+<!-- .LP -->
+<!-- .RS -->
+<literallayout class="monospaced">
+ hw-intensity = protocol-intensity / (65536 / total-hw-intensities)
+</literallayout>
+<!-- .RE -->
+</para>
+<para>
+<!-- .LP -->
+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>
+</sect1>
+<sect1 id="requests">
+<title>Requests</title>
+<!-- .XS -->
+<!-- \*(SN Requests -->
+<!-- .XE -->
+<para>
+<emphasis role='bold'>CreateWindow</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>wid</emphasis>, <emphasis remap='I'>parent</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>class</emphasis>:
+<emphasis role='bold'>{ InputOutput , </emphasis>
+<emphasis role='bold'>InputOnly , </emphasis>
+<emphasis role='bold'>CopyFromParent }</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>depth</emphasis>: CARD8
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>visual</emphasis>: VISUALID or
+<emphasis role='bold'>CopyFromParent</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>, <emphasis remap='I'>border-width</emphasis>: CARD16
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>value-mask</emphasis>: BITMASK
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>value-list</emphasis>: LISTofVALUE
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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
+<emphasis role='bold'>VisibilityNotify </emphasis>
+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'>
+ <colspec colname='c1' colsep='0'/>
+ <colspec colname='c2' colsep='0'/>
+ <thead>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Type</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row rowsep='0'>
+ <entry>background-pixmap</entry>
+ <entry>
+PIXMAP or
+<emphasis role='bold'>None </emphasis>
+or
+<emphasis role='bold'>ParentRelative</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>background-pixel</entry>
+ <entry>CARD32</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>border-pixmap</entry>
+ <entry>
+PIXMAP or
+<emphasis role='bold'>CopyFromParent</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>border-pixel</entry>
+ <entry>CARD32</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>bit-gravity</entry>
+ <entry>BITGRAVITY</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>win-gravity</entry>
+ <entry>WINGRAVITY</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>backing-store</entry>
+ <entry>
+{ <emphasis role='bold'>NotUseful</emphasis>,
+<emphasis role='bold'>WhenMapped</emphasis>,
+<emphasis role='bold'>Always</emphasis> }
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>backing-planes</entry>
+ <entry>CARD32</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>backing-pixel</entry>
+ <entry>CARD32</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>save-under</entry>
+ <entry>BOOL</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>event-mask</entry>
+ <entry>SETofEVENT</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>do-not-propagate-mask</entry>
+ <entry>SETofDEVICEEVENT</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>override-redirect</entry>
+ <entry>BOOL</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>colormap</entry>
+ <entry>
+COLORMAP or
+<emphasis role='bold'>CopyFromParent</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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'>
+ <colspec colname='c1' colsep='0'/>
+ <colspec colname='c2' colsep='0'/>
+ <thead>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Default</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row rowsep='0'>
+ <entry>background-pixmap</entry>
+ <entry>
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>border-pixmap</entry>
+ <entry>
+<emphasis role='bold'>CopyFromParent</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>bit-gravity</entry>
+ <entry>
+<emphasis role='bold'>Forget</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>win-gravity</entry>
+ <entry>
+<emphasis role='bold'>NorthWest</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>backing-store</entry>
+ <entry>
+<emphasis role='bold'>NotUseful</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>backing-planes</entry>
+ <entry>all ones</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>backing-pixel</entry>
+ <entry>zero</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>save-under</entry>
+ <entry>
+<emphasis role='bold'>False</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>event-mask</entry>
+ <entry>{} (empty set)</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>do-not-propagate-mask</entry>
+ <entry>{} (empty set)</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>override-redirect</entry>
+ <entry>
+<emphasis role='bold'>False</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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>
+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
+<emphasis role='bold'>ConfigureWindow </emphasis>
+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>
+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
+<emphasis role='bold'>InstallColormap </emphasis>
+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
+<emphasis role='bold'>FreeColormap </emphasis>
+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
+<emphasis role='bold'>CreateNotify </emphasis>
+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>
+<para>
+<emphasis role='bold'>ChangeWindowAttributes</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>value-mask</emphasis>: BITMASK
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>value-list</emphasis>: LISTofVALUE
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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
+<emphasis role='bold'>CreateWindow .</emphasis>
+</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
+<emphasis role='bold'>ButtonPress .</emphasis>
+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
+<emphasis role='bold'>ColormapNotify </emphasis>
+event.
+Changing the colormap of a visible window might have no immediate effect
+on the screen (see
+<emphasis role='bold'>InstallColormap </emphasis>
+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>
+<para>
+<emphasis role='bold'>GetWindowAttributes</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+ ->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+visual: VISUALID
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+class:
+<emphasis role='bold'>{ InputOutput , </emphasis>
+<emphasis role='bold'>InputOnly }</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+bit-gravity: BITGRAVITY
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+win-gravity: WINGRAVITY
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+backing-store:
+<emphasis role='bold'>{ NotUseful , </emphasis>
+<emphasis role='bold'>WhenMapped , </emphasis>
+<emphasis role='bold'>Always }</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+backing-planes: CARD32
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+backing-pixel: CARD32
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+save-under: BOOL
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+colormap: COLORMAP or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+map-is-installed: BOOL
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+map-state:
+<emphasis role='bold'>{ Unmapped , </emphasis>
+<emphasis role='bold'>Unviewable , </emphasis>
+<emphasis role='bold'>Viewable }</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+all-event-masks, your-event-mask: SETofEVENT
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+do-not-propagate-mask: SETofDEVICEEVENT
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+override-redirect: BOOL
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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>
+<para>
+<emphasis role='bold'>DestroyWindow</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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
+<emphasis role='bold'>UnmapWindow </emphasis>
+request is performed automatically.
+The window and all inferiors are then destroyed, and a
+<emphasis role='bold'>DestroyNotify </emphasis>
+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>
+<para>
+<emphasis role='bold'>DestroySubwindows</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request performs a
+<emphasis role='bold'>DestroyWindow </emphasis>
+request on all children of the window, in bottom-to-top stacking order.
+<!-- .sp -->
+</para>
+<para>
+<emphasis role='bold'>ChangeSaveSet</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>mode</emphasis>:
+<emphasis role='bold'>{ Insert , </emphasis>
+<emphasis role='bold'>Delete }</emphasis>
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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 section 10.
+</para>
+<para>
+When windows are destroyed,
+the server automatically removes them from the save-set.
+<!-- .sp -->
+</para>
+<para>
+<emphasis role='bold'>ReparentWindow</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>, <emphasis remap='I'>parent</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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
+<emphasis role='bold'>UnmapWindow </emphasis>
+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
+<emphasis role='bold'>ReparentNotify </emphasis>
+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
+<emphasis role='bold'>MapWindow </emphasis>
+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>
+<para>
+<emphasis role='bold'>MapWindow</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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
+<emphasis role='bold'>MapRequest </emphasis>
+event is generated, but the window remains unmapped.
+Otherwise, the window is mapped,
+and a
+<emphasis role='bold'>MapNotify </emphasis>
+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>
+<para>
+<emphasis role='bold'>MapSubwindows</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request performs a
+<emphasis role='bold'>MapWindow </emphasis>
+request on all unmapped children of the window,
+in top-to-bottom stacking order.
+<!-- .sp -->
+</para>
+<para>
+<emphasis role='bold'>UnmapWindow</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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
+<emphasis role='bold'>UnmapNotify </emphasis>
+event is generated.
+Normal exposure processing on formerly obscured windows is performed.
+<!-- .sp -->
+</para>
+<para>
+<emphasis role='bold'>UnmapSubwindows</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+Errors:
+<emphasis role='bold'>Window</emphasis>
+<!-- .in -.2i -->
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request performs an
+<emphasis role='bold'>UnmapWindow </emphasis>
+request on all mapped children of the window,
+in bottom-to-top stacking order.
+<!-- .sp -->
+</para>
+<para>
+<emphasis role='bold'>ConfigureWindow</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>value-mask</emphasis>: BITMASK
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>value-list</emphasis>: LISTofVALUE
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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'>
+ <tgroup cols='2' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <colspec colname='c2' colsep='0'/>
+ <thead>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Type</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row rowsep='0'>
+ <entry>x</entry>
+ <entry>INT16</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>y</entry>
+ <entry>INT16</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>width</entry>
+ <entry>CARD16</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>height</entry>
+ <entry>CARD16</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>border-width</entry>
+ <entry>CARD16</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>sibling</entry>
+ <entry>WINDOW</entry>
+ </row>
+ <row rowsep='0'>
+ <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
+<emphasis role='bold'>ConfigureRequest </emphasis>
+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
+<emphasis role='bold'>ResizeRequest </emphasis>
+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>
+The geometry of the window is changed as specified,
+the window is restacked among siblings, and a
+<emphasis role='bold'>ConfigureNotify </emphasis>
+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'>
+ <tgroup cols='2' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <colspec colname='c2' colsep='0'/>
+ <thead>
+ <row>
+ <entry>Direction</entry>
+ <entry>Deltas</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<emphasis role='bold'>NorthWest</emphasis>
+ </entry>
+ <entry>[0, 0]</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis role='bold'>North</emphasis>
+ </entry>
+ <entry>[W/2, 0]</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis role='bold'>NorthEast</emphasis>
+ </entry>
+ <entry>[W, 0]</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis role='bold'>West</emphasis>
+ </entry>
+ <entry>[0, H/2]</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis role='bold'>Center</emphasis>
+ </entry>
+ <entry>[W/2, H/2]</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis role='bold'>East</emphasis>
+ </entry>
+ <entry>[W, H/2]</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis role='bold'>SouthWest</emphasis>
+ </entry>
+ <entry>[0, H]</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis role='bold'>South</emphasis>
+ </entry>
+ <entry>[W/2, H]</entry>
+ </row>
+ <row rowsep='0'>
+ <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
+<emphasis role='bold'>GravityNotify </emphasis>
+event.
+<emphasis role='bold'>GravityNotify </emphasis>
+events are generated after the
+<emphasis role='bold'>ConfigureNotify </emphasis>
+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
+<emphasis role='bold'>UnmapNotify </emphasis>
+event is generated.
+<emphasis role='bold'>UnmapNotify </emphasis>
+events are generated after the
+<emphasis role='bold'>ConfigureNotify </emphasis>
+event is generated.
+</para>
+<para>
+If a sibling and a stack-mode are specified,
+the window is restacked as follows:
+</para>
+
+<informaltable frame='none'>
+ <tgroup cols='2' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <colspec colname='c2' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<emphasis role='bold'>Above</emphasis>
+ </entry>
+ <entry>
+The window is placed just above the sibling.
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis role='bold'>Below</emphasis>
+ </entry>
+ <entry>
+The window is placed just below the sibling.
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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 rowsep='0'>
+ <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 rowsep='0'>
+ <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'>
+ <tgroup cols='2' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <colspec colname='c2' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<emphasis role='bold'>Above</emphasis>
+ </entry>
+ <entry>
+The window is placed at the top of the stack.
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis role='bold'>Below</emphasis>
+ </entry>
+ <entry>
+The window is placed at the bottom of the stack.
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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 rowsep='0'>
+ <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 rowsep='0'>
+ <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>
+
+<para>
+<emphasis role='bold'>CirculateWindow</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>direction</emphasis>:
+<emphasis role='bold'>{ RaiseLowest , </emphasis>
+<emphasis role='bold'>LowerHighest }</emphasis>
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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
+<emphasis role='bold'>CirculateRequest </emphasis>
+event is generated, and no further processing is performed.
+Otherwise, the following is performed, and then a
+<emphasis role='bold'>CirculateNotify </emphasis>
+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>
+<para>
+<emphasis role='bold'>GetGeometry</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>drawable</emphasis>: DRAWABLE
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+ ->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+root: WINDOW
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+depth: CARD8
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+x, y: INT16
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+width, height, border-width: CARD16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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>
+<para>
+<emphasis role='bold'>QueryTree</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+ ->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+root: WINDOW
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+parent: WINDOW or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+children: LISTofWINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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>
+<para>
+<emphasis role='bold'>InternAtom</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>name</emphasis>: STRING8
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>only-if-exists</emphasis>: BOOL
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+ ->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+atom: ATOM or
+<emphasis role='bold'>None</emphasis>
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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 section 10).
+<!-- .sp -->
+</para>
+<para>
+<emphasis role='bold'>GetAtomName</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>atom</emphasis>: ATOM
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+ ->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+name: STRING8
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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>
+<para>
+<emphasis role='bold'>ChangeProperty</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>property</emphasis>, <emphasis remap='I'>type</emphasis>: ATOM
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>format</emphasis>: {8, 16, 32}
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>mode</emphasis>:
+<emphasis role='bold'>{ Replace , </emphasis>
+<emphasis role='bold'>Prepend , </emphasis>
+<emphasis role='bold'>Append }</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>data</emphasis>: LISTofINT8 or LISTofINT16 or LISTofINT32
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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
+<emphasis role='bold'>PropertyNotify </emphasis>
+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 section 10).
+</para>
+<para>
+The maximum size of a property is server-dependent and may vary dynamically.
+<!-- .sp -->
+</para>
+<para>
+<emphasis role='bold'>DeleteProperty</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>property</emphasis>: ATOM
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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
+<emphasis role='bold'>PropertyNotify </emphasis>
+event on the window unless the property does not exist.
+<!-- .sp -->
+</para>
+<para>
+<emphasis role='bold'>GetProperty</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>property</emphasis>: ATOM
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>type</emphasis>: ATOM or
+<emphasis role='bold'>AnyPropertyType</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>long-offset</emphasis>, <emphasis remap='I'>long-length</emphasis>: CARD32
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>delete</emphasis>: BOOL
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+ ->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+type: ATOM or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+format: {0, 8, 16, 32}
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+bytes-after: CARD32
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+value: LISTofINT8 or LISTofINT16 or LISTofINT32
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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:
+<!-- .DS -->
+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)
+<!-- .DE -->
+</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
+<emphasis role='bold'>PropertyNotify </emphasis>
+event is generated on the window.
+<!-- .sp -->
+</para>
+<para>
+<emphasis role='bold'>RotateProperties</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>delta</emphasis>: INT16
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>properties</emphasis>: LISTofATOM
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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
+<emphasis role='bold'>PropertyNotify </emphasis>
+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>
+<para>
+<emphasis role='bold'>ListProperties</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+ ->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+atoms: LISTofATOM
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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>
+<para>
+<emphasis role='bold'>SetSelectionOwner</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>selection</emphasis>: ATOM
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>owner</emphasis>: WINDOW or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>time</emphasis>: TIMESTAMP or
+<emphasis role='bold'>CurrentTime</emphasis>
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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
+<emphasis role='bold'>SelectionClear </emphasis>
+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
+<emphasis role='bold'>GetSelectionOwner </emphasis>
+request and is reported in
+<emphasis role='bold'>SelectionRequest </emphasis>
+and
+<emphasis role='bold'>SelectionClear </emphasis>
+events.
+</para>
+<para>
+Selections are global to the server.
+<!-- .sp -->
+</para>
+<para>
+<emphasis role='bold'>GetSelectionOwner</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>selection</emphasis>: ATOM
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+ ->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+owner: WINDOW or
+<emphasis role='bold'>None</emphasis>
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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>
+<para>
+<emphasis role='bold'>ConvertSelection</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>selection</emphasis>, <emphasis remap='I'>target</emphasis>: ATOM
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>property</emphasis>: ATOM or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>requestor</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>time</emphasis>: TIMESTAMP or
+<emphasis role='bold'>CurrentTime</emphasis>
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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
+<emphasis role='bold'>SelectionRequest </emphasis>
+event to that owner.
+If no owner for the specified selection exists,
+the server generates a
+<emphasis role='bold'>SelectionNotify </emphasis>
+event to the requestor with property
+<emphasis role='bold'>None .</emphasis>
+The arguments are passed on unchanged in either of the events.
+<!-- .sp -->
+</para>
+<para>
+<emphasis role='bold'>SendEvent</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>destination</emphasis>: WINDOW or
+<emphasis role='bold'>PointerWindow </emphasis>
+or
+<emphasis role='bold'>InputFocus</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>propagate</emphasis>: BOOL
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>event-mask</emphasis>: SETofEVENT
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>event</emphasis>: &lt;normal-event-format&gt;
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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>
+<para>
+<emphasis role='bold'>GrabPointer</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>grab-window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>owner-events</emphasis>: BOOL
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>event-mask</emphasis>: SETofPOINTEREVENT
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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 rowsep='0'>
+ <entry>
+<emphasis remap='I'>confine-to</emphasis>: WINDOW or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>cursor</emphasis>: CURSOR or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>time</emphasis>: TIMESTAMP or
+<emphasis role='bold'>CurrentTime</emphasis>
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+ ->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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 rowsep='0'>
+ <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
+<emphasis role='bold'>AllowEvents </emphasis>
+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
+<emphasis role='bold'>EnterNotify </emphasis>
+and
+<emphasis role='bold'>LeaveNotify </emphasis>
+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>
+<para>
+<emphasis role='bold'>UngrabPointer</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <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
+<emphasis role='bold'>GrabPointer </emphasis>
+or
+<emphasis role='bold'>GrabButton </emphasis>
+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
+<emphasis role='bold'>EnterNotify </emphasis>
+and
+<emphasis role='bold'>LeaveNotify </emphasis>
+events.
+</para>
+<para>
+An
+<emphasis role='bold'>UngrabPointer </emphasis>
+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>
+<para>
+<emphasis role='bold'>GrabButton</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>modifiers</emphasis>: SETofKEYMASK or
+<emphasis role='bold'>AnyModifier</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>button</emphasis>: BUTTON or
+<emphasis role='bold'>AnyButton</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>grab-window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>owner-events</emphasis>: BOOL
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>event-mask</emphasis>: SETofPOINTEREVENT
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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 rowsep='0'>
+ <entry>
+<emphasis remap='I'>confine-to</emphasis>: WINDOW or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>cursor</emphasis>: CURSOR or
+<emphasis role='bold'>None</emphasis>
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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.
+In the future,
+the pointer is actively grabbed as described in
+<emphasis role='bold'>GrabPointer ,</emphasis>
+the last-pointer-grab time is set to the time at which the button was
+pressed (as transmitted in the
+<emphasis role='bold'>ButtonPress </emphasis>
+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
+<emphasis role='bold'>GrabPointer .</emphasis>
+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>
+<para>
+<emphasis role='bold'>UngrabButton</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>modifiers</emphasis>: SETofKEYMASK or
+<emphasis role='bold'>AnyModifier</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>button</emphasis>: BUTTON or
+<emphasis role='bold'>AnyButton</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>grab-window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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>
+<para>
+<emphasis role='bold'>ChangeActivePointerGrab</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>event-mask</emphasis>: SETofPOINTEREVENT
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>cursor</emphasis>: CURSOR or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>time</emphasis>: TIMESTAMP or
+<emphasis role='bold'>CurrentTime</emphasis>
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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
+<emphasis role='bold'>GrabPointer .</emphasis>
+This request has no effect on the parameters of any passive grabs established
+with
+<emphasis role='bold'>GrabButton .</emphasis>
+<!-- .sp -->
+</para>
+<para>
+<emphasis role='bold'>GrabKeyboard</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>grab-window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>owner-events</emphasis>: BOOL
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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 rowsep='0'>
+ <entry>
+<emphasis remap='I'>time</emphasis>: TIMESTAMP or
+<emphasis role='bold'>CurrentTime</emphasis>
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+ ->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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 rowsep='0'>
+ <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
+<emphasis role='bold'>KeyPress </emphasis>
+and
+<emphasis role='bold'>KeyRelease </emphasis>
+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
+<emphasis role='bold'>AllowEvents </emphasis>
+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
+<emphasis role='bold'>AllowEvents </emphasis>
+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
+<emphasis role='bold'>FocusIn </emphasis>
+and
+<emphasis role='bold'>FocusOut </emphasis>
+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>
+<para>
+<emphasis role='bold'>UngrabKeyboard</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <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
+<emphasis role='bold'>GrabKeyboard </emphasis>
+or
+<emphasis role='bold'>GrabKey ) </emphasis>
+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
+<emphasis role='bold'>FocusIn </emphasis>
+and
+<emphasis role='bold'>FocusOut </emphasis>
+events.
+</para>
+<para>
+An
+<emphasis role='bold'>UngrabKeyboard </emphasis>
+is performed automatically if the event window for an active keyboard grab
+becomes not viewable.
+<!-- .sp -->
+</para>
+<para>
+<emphasis role='bold'>GrabKey</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>key</emphasis>: KEYCODE or
+<emphasis role='bold'>AnyKey</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>modifiers</emphasis>: SETofKEYMASK or
+<emphasis role='bold'>AnyModifier</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>grab-window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>owner-events</emphasis>: BOOL
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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 rowsep='0'>
+ <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.
+In the future,
+the keyboard is actively grabbed as described in
+<emphasis role='bold'>GrabKeyboard , </emphasis>
+the last-keyboard-grab time is set to the time at which the key was pressed
+(as transmitted in the
+<emphasis role='bold'>KeyPress </emphasis>
+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
+<emphasis role='bold'>GrabKeyboard .</emphasis>
+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>
+<para>
+<emphasis role='bold'>UngrabKey</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>key</emphasis>: KEYCODE or
+<emphasis role='bold'>AnyKey</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>modifiers</emphasis>: SETofKEYMASK or
+<emphasis role='bold'>AnyModifier</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>grab-window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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>
+<para>
+<emphasis role='bold'>AllowEvents</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <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 rowsep='0'>
+ <entry>
+<emphasis role='bold'>SyncKeyboard , </emphasis>
+<emphasis role='bold'>ReplayKeyboard ,</emphasis>
+<emphasis role='bold'>AsyncBoth , </emphasis>
+<emphasis role='bold'>SyncBoth }</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>time</emphasis>: TIMESTAMP or
+<emphasis role='bold'>CurrentTime</emphasis>
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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
+<emphasis role='bold'>ButtonPress </emphasis>
+or
+<emphasis role='bold'>ButtonRelease </emphasis>
+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
+<emphasis role='bold'>GrabButton </emphasis>
+or from a previous
+<emphasis role='bold'>AllowEvents </emphasis>
+with mode
+<emphasis role='bold'>SyncPointer </emphasis>
+but not from a
+<emphasis role='bold'>GrabPointer ), </emphasis>
+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
+<emphasis role='bold'>KeyPress </emphasis>
+or
+<emphasis role='bold'>KeyRelease </emphasis>
+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
+<emphasis role='bold'>GrabKey </emphasis>
+or from a previous
+<emphasis role='bold'>AllowEvents </emphasis>
+with mode
+<emphasis role='bold'>SyncKeyboard </emphasis>
+but not from a
+<emphasis role='bold'>GrabKeyboard ), </emphasis>
+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
+<emphasis role='bold'>ButtonPress , </emphasis>
+<emphasis role='bold'>ButtonRelease , </emphasis>
+<emphasis role='bold'>KeyPress , </emphasis>
+or
+<emphasis role='bold'>KeyRelease </emphasis>
+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>
+<para>
+<emphasis role='bold'>GrabServer</emphasis>
+</para>
+<para>
+This request disables processing of requests and close-downs on all
+connections other than the one this request arrived on.
+<!-- .sp -->
+</para>
+<para>
+<emphasis role='bold'>UngrabServer</emphasis>
+</para>
+<para>
+This request restarts processing of requests and close-downs
+on other connections.
+<!-- .sp -->
+</para>
+<para>
+<emphasis role='bold'>QueryPointer</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+ ->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+root: WINDOW
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+child: WINDOW or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+same-screen: BOOL
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+root-x, root-y, win-x, win-y: INT16
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+mask: SETofKEYBUTMASK
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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>
+<para>
+<emphasis role='bold'>GetMotionEvents</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>start</emphasis>,
+<emphasis remap='I'>stop</emphasis>: TIMESTAMP or
+<emphasis role='bold'>CurrentTime</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>window</emphasis>: WINDOW
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+ ->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+events: LISTofTIMECOORD
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+where:
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+TIMECOORD: [x, y: INT16
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+ time: TIMESTAMP]
+<!-- .TE -->
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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>
+<para>
+<emphasis role='bold'>TranslateCoordinates</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>src-window</emphasis>, <emphasis remap='I'>dst-window</emphasis>: WINDOW
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>src-x</emphasis>, <emphasis remap='I'>src-y</emphasis>: INT16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+ ->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+same-screen: BOOL
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+child: WINDOW or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+dst-x, dst-y: INT16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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>
+<para>
+<emphasis role='bold'>WarpPointer</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>src-window</emphasis>: WINDOW or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>dst-window</emphasis>: WINDOW or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>src-x</emphasis>, <emphasis remap='I'>src-y</emphasis>: INT16
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>src-width</emphasis>, <emphasis remap='I'>src-height</emphasis>: CARD16
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>dst-x</emphasis>, <emphasis remap='I'>dst-y</emphasis>: INT16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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>
+<para>
+<emphasis role='bold'>SetInputFocus</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>focus</emphasis>: WINDOW or
+<emphasis role='bold'>PointerRoot </emphasis>
+or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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 rowsep='0'>
+ <entry>
+<emphasis remap='I'>time</emphasis>: TIMESTAMP or
+<emphasis role='bold'>CurrentTime</emphasis>
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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
+<emphasis role='bold'>FocusIn </emphasis>
+and
+<emphasis role='bold'>FocusOut </emphasis>
+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,
+<emphasis role='bold'>FocusIn </emphasis>
+and
+<emphasis role='bold'>FocusOut </emphasis>
+events are generated,
+but the last-focus-change time is not affected.
+<!-- .sp -->
+</para>
+<para>
+<emphasis role='bold'>GetInputFocus</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+ ->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+focus: WINDOW or
+<emphasis role='bold'>PointerRoot </emphasis>
+or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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>
+<para>
+<emphasis role='bold'>QueryKeymap</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+ ->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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>
+<para>
+<emphasis role='bold'>OpenFont</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>fid</emphasis>: FONT
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>name</emphasis>: STRING8
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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 ``?'' and ``*'' are used in a font name, a
+pattern match is performed and any matching font is used.
+In the pattern,
+the ``?'' character (octal value 77) will match any single character,
+and the ``*'' character (octal value 52) will match any number
+of characters.
+A structured format for font names is specified in the
+X.Org standard <emphasis remap='I'>X Logical Font Description Conventions</emphasis>.
+</para>
+<para>
+Fonts are not associated with a particular screen
+and can be stored as a component of any graphics context.
+<!-- .sp -->
+</para>
+<para>
+<emphasis role='bold'>CloseFont</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>font</emphasis>: FONT
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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>
+<para>
+<emphasis role='bold'>QueryFont</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>font</emphasis>: FONTABLE
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+ ->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+font-info: FONTINFO
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+char-infos: LISTofCHARINFO
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+where:
+<!-- .IP -->
+<!-- .TS -->
+l lw(3i).
+T{
+FONTINFO:
+T} T{
+[draw-direction:
+<emphasis role='bold'>{ LeftToRight , </emphasis>
+<emphasis role='bold'>RightToLeft }</emphasis>
+T}
+ \ min-char-or-byte2, max-char-or-byte2: CARD16
+ \ min-byte1, max-byte1: CARD8
+ \ all-chars-exist: BOOL
+ \ default-char: CARD16
+ \ min-bounds: CHARINFO
+ \ max-bounds: CHARINFO
+ \ font-ascent: INT16
+ \ font-descent: INT16
+ \ properties: LISTofFONTPROP]
+FONTPROP: [name: ATOM
+ \ value: &lt;32-bit-value&gt;]
+CHARINFO: [left-side-bearing: INT16
+ \ right-side-bearing: INT16
+ \ character-width: INT16
+ \ ascent: INT16
+ \ descent: INT16
+ \ attributes: CARD16]
+<!-- .TE -->
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<!-- .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:
+<!-- .DS -->
+byte1 = N/D + min-byte1
+byte2 = N\\\\D + min-char-or-byte2
+<!-- .DE -->
+</para>
+<para>
+where:
+<!-- .DS -->
+D = max-char-or-byte2 - min-char-or-byte2 + 1
+/ = integer division
+\\\\ = integer modulus
+<!-- .DE -->
+</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:
+<!-- .DS -->
+L = D * (max-byte1 - min-byte1 + 1)
+<!-- .DE -->
+</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:
+<!-- .DS -->
+[x + min-bounds.left-side-bearing, y - max-bounds.ascent]
+<!-- .DE -->
+with a width of:
+<!-- .DS -->
+max-bounds.right-side-bearing - min-bounds.left-side-bearing
+<!-- .DE -->
+</para>
+<para>
+and a height of:
+<!-- .DS -->
+max-bounds.ascent + max-bounds.descent
+<!-- .DE -->
+</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 <emphasis remap='I'>X Logical Font Description Conventions</emphasis>.
+</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:
+<!-- .DS -->
+[x + left-side-bearing, y - ascent]
+<!-- .DE -->
+</para>
+<para>
+with a width of:
+<!-- .DS -->
+right-side-bearing - left-side-bearing
+<!-- .DE -->
+</para>
+<para>
+and a height of:
+<!-- .DS -->
+ascent + descent
+<!-- .DE -->
+</para>
+<para>
+and the origin for the next character is defined to be:
+<!-- .DS -->
+[x + character-width, y]
+<!-- .DE -->
+</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>
+<para>
+<emphasis role='bold'>QueryTextExtents</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>font</emphasis>: FONTABLE
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>string</emphasis>: STRING16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+ ->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+draw-direction:
+<emphasis role='bold'>{ LeftToRight , </emphasis>
+<emphasis role='bold'>RightToLeft }</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+font-ascent: INT16
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+font-descent: INT16
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+overall-ascent: INT16
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+overall-descent: INT16
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+overall-width: INT32
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+overall-left: INT32
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+overall-right: INT32
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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
+<emphasis role='bold'>QueryFont .</emphasis>
+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>
+<para>
+<emphasis role='bold'>ListFonts</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>pattern</emphasis>: STRING8
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>max-names</emphasis>: CARD16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+ ->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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
+<emphasis role='bold'>SetFontPath </emphasis>
+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 ``?'' character (octal value 77) will match any single character,
+and the ``*'' character (octal value 52) will match any number
+of characters.
+The returned names are in lowercase.
+<!-- .sp -->
+</para>
+<para>
+<emphasis role='bold'>ListFontsWithInfo</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>pattern</emphasis>: STRING8
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>max-names</emphasis>: CARD16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+ ->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+name: STRING8
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+info FONTINFO
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+replies-hint: CARD32
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+where:
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+FONTINFO: &lt;same type definition as in
+<emphasis role='bold'>QueryFont</emphasis>&gt;
+<!-- .eM -->
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<!-- .eM -->
+<para>
+This request is similar to
+<emphasis role='bold'>ListFonts , </emphasis>
+but it also returns information about each font.
+The information returned for each font is identical to what
+<emphasis role='bold'>QueryFont </emphasis>
+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>
+<para>
+<emphasis role='bold'>SetFontPath</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>path</emphasis>: LISTofSTRING8
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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>
+<para>
+<emphasis role='bold'>GetFontPath</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+ ->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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>
+<para>
+<emphasis role='bold'>CreatePixmap</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>pid</emphasis>: PIXMAP
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>drawable</emphasis>: DRAWABLE
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>depth</emphasis>: CARD8
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>: CARD16
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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>
+<para>
+<emphasis role='bold'>FreePixmap</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>pixmap</emphasis>: PIXMAP
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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>
+<para>
+<emphasis role='bold'>CreateGC</emphasis>
+</para>
+<informaltable frame='none'>
+ <tgroup cols='1' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <tbody>
+ <row rowsep='0'>
+ <entry>
+<!-- .in +.2i -->
+<emphasis remap='I'>cid</emphasis>: GCONTEXT
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>drawable</emphasis>: DRAWABLE
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>value-mask</emphasis>: BITMASK
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>
+<emphasis remap='I'>value-list</emphasis>: LISTofVALUE
+<!-- .in -.2i -->
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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'>
+ <tgroup cols='2' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <colspec colname='c2' colsep='0'/>
+ <thead>
+ <row>
+ <entry>Component</entry>
+ <entry>Type</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row rowsep='0'>
+ <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 rowsep='0'>
+ <entry>plane-mask</entry>
+ <entry>CARD32</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>foreground</entry>
+ <entry>CARD32</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>background</entry>
+ <entry>CARD32</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>line-width</entry>
+ <entry>CARD16</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>line-style</entry>
+ <entry>
+{ <emphasis role='bold'>Solid</emphasis>,
+<emphasis role='bold'>OnOffDash</emphasis>,
+<emphasis role='bold'>DoubleDash</emphasis> }
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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 rowsep='0'>
+ <entry>join-style</entry>
+ <entry>
+{ <emphasis role='bold'>Miter</emphasis>,
+<emphasis role='bold'>Round</emphasis>,
+<emphasis role='bold'>Bevel</emphasis> }
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <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 rowsep='0'>
+ <entry>fill-rule</entry>
+ <entry>
+{ <emphasis role='bold'>EvenOdd</emphasis>,
+<emphasis role='bold'>Winding</emphasis> }
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>arc-mode</entry>
+ <entry>
+{ <emphasis role='bold'>Chord</emphasis>,
+<emphasis role='bold'>PieSlice</emphasis> }
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>tile</entry>
+ <entry>PIXMAP</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>stipple</entry>
+ <entry>PIXMAP</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>tile-stipple-x-origin</entry>
+ <entry>INT16</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>tile-stipple-y-origin</entry>
+ <entry>INT16</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>font</entry>
+ <entry>FONT</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>subwindow-mode</entry>
+ <entry>
+{ <emphasis role='bold'>ClipByChildren</emphasis>,
+<emphasis role='bold'>IncludeInferiors</emphasis> }
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>graphics-exposures</entry>
+ <entry>BOOL</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>clip-x-origin</entry>
+ <entry>INT16</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>clip-y-origin</entry>
+ <entry>INT16</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>clip-mask</entry>
+ <entry>
+PIXMAP or
+<emphasis role='bold'>None</emphasis>
+ </entry>
+ </row>
+ <row rowsep='0'>
+ <entry>dash-offset</entry>
+ <entry>CARD16</entry>
+ </row>
+ <row rowsep='0'>
+ <entry>dashes</entry>
+ <entry>CARD8</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+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>
+The meanings of the functions are:
+</para>
+
+<informaltable frame='none'>
+ <tgroup cols='2' align='left'>
+ <colspec colname='c1' colsep='0'/>
+ <colspec colname='c2' colsep='0'/>
+ <thead>
+ <row>
+ <entry>Function</entry>
+ <entry>Operat