














		  X Window System Protocol

		   X Consortium Standard

		 X Version 11, Release 6.4






		    Robert W. Scheifler
		     X Consortium, Inc.






















































X Window System is a trademark of X Consortium, Inc.

Copyright (C) 1986, 1987, 1988, 1994 X Consortium

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documenta-
tion files (the ``Software''), to deal in the Software with-
out restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to
whom the Software is furnished to do so, subject to the fol-
lowing conditions:

The above copyright notice and this permission notice shall
be included in all copies or substantial portions of the
Software.

THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PUR-
POSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE X CONSOR-
TIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
OR OTHER DEALINGS IN THE SOFTWARE.

Except as contained in this notice, the name of the X Con-
sortium shall not be used in advertising or otherwise to
promote the sale, use or other dealings in this Software
without prior written authorization from the X Consortium.




























		      Acknowledgments



The primary contributers to the X11 protocol are:


     Dave Carver (Digital HPW)
     Branko Gerovac (Digital HPW)
     Jim Gettys (MIT/Project Athena, Digital)
     Phil Karlton (Digital WSL)
     Scott McGregor (Digital SSG)
     Ram Rao (Digital UEG)
     David Rosenthal (Sun)
     Dave Winchell (Digital UEG)


The implementors of initial server who provided useful input
are:


     Susan Angebranndt (Digital)
     Raymond Drewry (Digital)
     Todd Newman (Digital)


The invited reviewers who provided useful input are:


     Andrew Cherenson (Berkeley)
     Burns Fisher (Digital)
     Dan Garfinkel (HP)
     Leo Hourvitz (Next)
     Brock Krizan (HP)
     David Laidlaw (Stellar)
     Dave Mellinger (Interleaf)
     Ron Newman (MIT)
     John Ousterhout (Berkeley)
     Andrew Palay (ITC CMU)
     Ralph Swick (MIT)
     Craig Taylor (Sun)
     Jeffery Vroom (Stellar)


Thanks go to Al Mento of Digital's UEG Documentation Group
for formatting this document.

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.














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.


Robert W. Scheifler
X Consortium, Inc.

























































1.  Protocol Formats

Request Format

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 mini-
mum length required to contain the request.  If the speci-
fied 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 interpreta-
tion of this minor opcode and of all other fields in exten-
sion 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.

Reply Format

Every reply contains a 32-bit length field expressed in
units of four bytes.  Every reply consists of 32 bytes fol-
lowed 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 corre-
sponding request.

Error Format

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 signifi-
cant 16 bits of the sequence number of the request.  For the
following errors (see section 4), the failing resource ID is
also returned: Colormap, Cursor, Drawable, Font, GContext,
IDChoice, Pixmap, and Window.  For Atom errors, the failing
atom is returned.  For Value errors, the failing value is
returned.  Other core errors return no additional data.
Unused bytes within an error are not guaranteed to be zero.

Event Format

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



			      1





X Protocol				    X11, Release 6.4


the event was generated from a SendEvent 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 excep-
tion of KeymapNotify) 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.

2.  Syntactic Conventions

The rest of this document uses the following syntactic con-
ventions.

o    The syntax {...} encloses a set of alternatives.

o    The syntax [...] encloses a set of structure compo-
     nents.

o    In general, TYPEs are in uppercase and AlternativeVal-
     ues are capitalized.

o    Requests in section 9 are described in the following
     format:


     RequestName
	    arg1: type1
	    ...
	    argN: typeN
	->
	    result1: type1
	    ...
	    resultM: typeM

	    Errors: kind1, ..., kindK

	    Description.


     If no -> is present in the description, then the
     request has no reply (it is asynchronous), although
     errors may still be reported.  If ->+ is used, then one
     or more replies can be generated for a single request.

o    Events in section 11 are described in the following
     format:


     EventName
	    value1: type1
	    ...
	    valueN: typeN




			      2





X Protocol				    X11, Release 6.4


	    Description.


3.  Common Types


-------------------------------------------------------------------
Name	       Value
-------------------------------------------------------------------
LISTofFOO      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.
BITMASK        The types BITMASK and LISTofVALUE are somewhat spe-
LISTofVALUE    cial.  Various requests contain arguments of the
	       form:
	       value-mask: BITMASK
	       value-list: LISTofVALUE
	       These are used to allow the client to specify a
	       subset of a heterogeneous collection of optional
	       arguments.  The value-mask specifies which argu-
	       ments 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 gen-
	       erates a Value 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.
OR	       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.
WINDOW	       32-bit value (top three bits guaranteed to be zero)
PIXMAP	       32-bit value (top three bits guaranteed to be zero)
CURSOR	       32-bit value (top three bits guaranteed to be zero)
FONT	       32-bit value (top three bits guaranteed to be zero)
GCONTEXT       32-bit value (top three bits guaranteed to be zero)
COLORMAP       32-bit value (top three bits guaranteed to be zero)
DRAWABLE       WINDOW or PIXMAP
FONTABLE       FONT or GCONTEXT
ATOM	       32-bit value (top three bits guaranteed to be zero)
VISUALID       32-bit value (top three bits guaranteed to be zero)
VALUE	       32-bit quantity (used only in LISTofVALUE)
BYTE	       8-bit value
INT8	       8-bit signed integer




			      3





X Protocol				    X11, Release 6.4


-------------------------------------------------------------------
Name	       Value
-------------------------------------------------------------------
INT16	       16-bit signed integer
INT32	       32-bit signed integer
CARD8	       8-bit unsigned integer
CARD16	       16-bit unsigned integer
CARD32	       32-bit unsigned integer
TIMESTAMP      CARD32
BITGRAVITY     {Forget, Static, NorthWest, North, NorthEast, West,
	       Center,
		 East, SouthWest, South, SouthEast}
WINGRAVITY     {Unmap, Static, NorthWest, North, NorthEast, West,
	       Center,
		 East, SouthWest, South, SouthEast}
BOOL	       {True, False}
EVENT	       {KeyPress, KeyRelease, OwnerGrabButton, Button-
	       Press,
		 ButtonRelease, EnterWindow, LeaveWindow, Pointer-
	       Motion,
		 PointerMotionHint, Button1Motion, Button2Motion,
		 Button3Motion, Button4Motion, Button5Motion, But-
	       tonMotion,
		 Exposure, VisibilityChange, StructureNotify,
	       ResizeRedirect,
		 SubstructureNotify, SubstructureRedirect,
	       FocusChange,
		 PropertyChange, ColormapChange, KeymapState}
POINTEREVENT   {ButtonPress, ButtonRelease, EnterWindow, LeaveWin-
	       dow,
		 PointerMotion, PointerMotionHint, Button1Motion,
		 Button2Motion, Button3Motion, Button4Motion, But-
	       ton5Motion,
		 ButtonMotion, KeymapState}
DEVICEEVENT    {KeyPress, KeyRelease, ButtonPress, ButtonRelease,
		 PointerMotion, Button1Motion, Button2Motion, But-
	       ton3Motion,
		 Button4Motion, Button5Motion, ButtonMotion}
KEYSYM	       32-bit value (top three bits guaranteed to be zero)
KEYCODE        CARD8
BUTTON	       CARD8
KEYMASK        {Shift, Lock, Control, Mod1, Mod2, Mod3, Mod4,
	       Mod5}
BUTMASK        {Button1, Button2, Button3, Button4, Button5}
KEYBUTMASK     KEYMASK or BUTMASK
STRING8        LISTofCARD8
STRING16       LISTofCHAR2B
CHAR2B	       [byte1, byte2: CARD8]
POINT	       [x, y: INT16]
RECTANGLE      [x, y: INT16,
		width, height: CARD16]






			      4





X Protocol				    X11, Release 6.4


-------------------------------------------------------------------
Name	       Value
-------------------------------------------------------------------
ARC	       [x, y: INT16,
		width, height: CARD16,
		angle1, angle2: INT16]
HOST	       [family: {Internet, DECnet, Chaos}
		address: LISTofBYTE]


The [x,y] coordinates of a RECTANGLE specify the upper-left
corner.

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.

The length, format, and interpretation of a HOST address are
specific to the family (see ChangeHosts request).

4.  Errors

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 ChangeWindowAttributes, ChangeGC, PolyText8, PolyText16,
FreeColors, StoreColors, and ChangeKeyboardControl.

The following error codes result from various requests as
follows:

-------------------------------------------------------------
Error		  Description
-------------------------------------------------------------















			      5





X Protocol				    X11, Release 6.4


-------------------------------------------------------------
Error		  Description
-------------------------------------------------------------
Access		  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 cre-
		  ated 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.
Alloc		  The server failed to allocate the
		  requested resource.  Note that the
		  explicit listing of Alloc 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 Alloc error on
		  any request for this reason, and clients
		  should be prepared to receive such errors
		  and handle or discard them.
Atom		  A value for an ATOM argument does not name
		  a defined ATOM.
Colormap	  A value for a COLORMAP argument does not
		  name a defined COLORMAP.
Cursor		  A value for a CURSOR argument does not
		  name a defined CURSOR.
Drawable	  A value for a DRAWABLE argument does not
		  name a defined WINDOW or PIXMAP.
Font		  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.
GContext	  A value for a GCONTEXT argument does not
		  name a defined GCONTEXT.
IDChoice	  The value chosen for a resource identifier
		  either is not included in the range
		  assigned to the client or is already in
		  use.







			      6





X Protocol				    X11, Release 6.4


-------------------------------------------------------------
Error		  Description
-------------------------------------------------------------
Implementation	  The server does not implement some aspect
		  of the request.  A server that generates
		  this error for a core request is defi-
		  cient.  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.
Length		  The length of a request is shorter or
		  longer than that required to minimally
		  contain the arguments.
		  The length of a request exceeds the maxi-
		  mum length accepted by the server.
Match		  An InputOnly window is used as a DRAWABLE.
		  In a graphics request, the GCONTEXT argu-
		  ment 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.
Name		  A font or color of the specified name does
		  not exist.
Pixmap		  A value for a PIXMAP argument does not
		  name a defined PIXMAP.
Request 	  The major or minor opcode does not specify
		  a valid request.
Value		  Some numeric value falls outside the range
		  of values accepted by the request.  Unless
		  a specific range is specified for an argu-
		  ment, the full range defined by the argu-
		  ment's type is accepted.  Any argument
		  defined as a set of alternatives typically
		  can generate this error (due to the encod-
		  ing).
Window		  A value for a WINDOW argument does not
		  name a defined WINDOW.
-------------------------------------------------------------


			    Note

     The Atom, Colormap, Cursor, Drawable, Font, GCon-
     text, Pixmap, and Window errors are also used when
     the argument type is extended by union with a set
     of fixed alternatives, for example, <WINDOW or
     PointerRoot or None>.








			      7





X Protocol				    X11, Release 6.4


5.  Keyboards

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 map-
ping between keys and keycodes cannot be changed using the
protocol.

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.

A list of KEYSYMs is associated with each KEYCODE.  The list
is intended to convey the set of symbols on the correspond-
ing key.  If the list (ignoring trailing NoSymbol entries)
is a single KEYSYM ``K'', then the list is treated as if it
were the list ``K NoSymbol K NoSymbol''.  If the list
(ignoring trailing NoSymbol entries) is a pair of KEYSYMs
``K1 K2'', then the list is treated as if it were the list
``K1 K2 K1 K2''.  If the list (ignoring trailing NoSymbol
entries) is a triple of KEYSYMs ``K1 K2 K3'', then the list
is treated as if it were the list ``K1 K2 K3 NoSymbol''.
When an explicit ``void'' element is desired in the list,
the value VoidSymbol can be used.

The first four elements of the list are split into two
groups of KEYSYMs.  Group 1 contains the first and second
KEYSYMs, Group 2 contains the third and fourth KEYSYMs.
Within each group, if the second element of the group is
NoSymbol, then the group should be treated as if the second
element were the same as the first element, except when the
first element is an alphabetic KEYSYM ``K'' for which both
lowercase and uppercase forms are defined.  In that case,
the group should be treated as if the first element were the
lowercase form of ``K'' and the second element were the
uppercase form of ``K''.

The standard rules for obtaining a KEYSYM from a KeyPress
event make use of only the Group 1 and Group 2 KEYSYMs; no
interpretation of other KEYSYMs in the list is 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 attach-
ing that KEYCODE to any one of the modifiers Mod1 through
Mod5.  This modifier is called the ``group modifier''.	For
any KEYCODE, Group 1 is used when the group modifier is off,
and Group 2 is used when the group modifier is on.




			      8





X Protocol				    X11, Release 6.4


The Lock modifier is interpreted as CapsLock when the KEYSYM
named CAPS LOCK is attached to some KEYCODE and that KEYCODE
is attached to the Lock modifier.  The Lock modifier is
interpreted as ShiftLock when the KEYSYM named SHIFT LOCK is
attached to some KEYCODE and that KEYCODE is attached to the
Lock modifier.	If the Lock modifier could be interpreted as
both CapsLock and ShiftLock, the CapsLock interpretation is
used.

The operation of ``keypad'' keys is controlled by the KEYSYM
named NUM LOCK, by attaching that KEYSYM to some KEYCODE and
attaching that KEYCODE to any one of the modifiers Mod1
through Mod5.  This modifier is called the ``numlock modi-
fier''.  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.

Within a group, the choice of KEYSYM is determined by apply-
ing the first rule that is satisfied from the following
list:

o    The numlock modifier is on and the second KEYSYM is a
     keypad KEYSYM.  In this case, if the Shift modifier is
     on, or if the Lock modifier is on and is interpreted as
     ShiftLock, then the first KEYSYM is used; otherwise,
     the second KEYSYM is used.

o    The Shift and Lock modifiers are both off.  In this
     case, the first KEYSYM is used.

o    The Shift modifier is off, and the Lock modifier is on
     and is interpreted as CapsLock.  In this case, the
     first KEYSYM is used, but if that KEYSYM is lowercase
     alphabetic, then the corresponding uppercase KEYSYM is
     used instead.

o    The Shift modifier is on, and the Lock modifier is on
     and is interpreted as CapsLock.  In this case, the sec-
     ond KEYSYM is used, but if that KEYSYM is lowercase
     alphabetic, then the corresponding uppercase KEYSYM is
     used instead.

o    The Shift modifier is on, or the Lock modifier is on
     and is interpreted as ShiftLock, or both.	In this
     case, the second KEYSYM is used.

The mapping between KEYCODEs and KEYSYMs is not used
directly by the server; it is merely stored for reading and
writing by clients.





			      9





X Protocol				    X11, Release 6.4


6.  Pointers

Buttons are always numbered starting with one.

7.  Predefined Atoms

Predefined atoms are not strictly necessary and may not be
useful in all environments, but they will eliminate many
InternAtom 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 Consortium standards, such as the
Inter-Client Communication Conventions Manual and the X Log-
ical Font Description Conventions.

The following names have predefined atom values.  Note that
uppercase and lowercase matter.

ARC		    ITALIC_ANGLE	 STRING
ATOM		    MAX_SPACE		 SUBSCRIPT_X
BITMAP		    MIN_SPACE		 SUBSCRIPT_Y
CAP_HEIGHT	    NORM_SPACE		 SUPERSCRIPT_X
CARDINAL	    NOTICE		 SUPERSCRIPT_Y
COLORMAP	    PIXMAP		 UNDERLINE_POSITION
COPYRIGHT	    POINT		 UNDERLINE_THICKNESS
CURSOR		    POINT_SIZE		 VISUALID
CUT_BUFFER0	    PRIMARY		 WEIGHT
CUT_BUFFER1	    QUAD_WIDTH		 WINDOW
CUT_BUFFER2	    RECTANGLE		 WM_CLASS
CUT_BUFFER3	    RESOLUTION		 WM_CLIENT_MACHINE
CUT_BUFFER4	    RESOURCE_MANAGER	 WM_COMMAND
CUT_BUFFER5	    RGB_BEST_MAP	 WM_HINTS
CUT_BUFFER6	    RGB_BLUE_MAP	 WM_ICON_NAME
CUT_BUFFER7	    RGB_COLOR_MAP	 WM_ICON_SIZE
DRAWABLE	    RGB_DEFAULT_MAP	 WM_NAME
END_SPACE	    RGB_GRAY_MAP	 WM_NORMAL_HINTS
FAMILY_NAME	    RGB_GREEN_MAP	 WM_SIZE_HINTS
FONT		    RGB_RED_MAP 	 WM_TRANSIENT_FOR
FONT_NAME	    SECONDARY		 WM_ZOOM_HINTS
FULL_NAME	    STRIKEOUT_ASCENT	 X_HEIGHT
INTEGER 				 STRIKEOUT_DESCENT


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



			     10





X Protocol				    X11, Release 6.4


that two leading underscores be used to avoid conflicts with
other names.

8.  Connection Setup

For remote clients, the X protocol can be built on top of
any reliable byte stream.

Connection Initiation

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.

Following the byte-order byte, the client sends the follow-
ing information at connection setup:

     protocol-major-version: CARD16
     protocol-minor-version: CARD16
     authorization-protocol-name: STRING8
     authorization-protocol-data: STRING8

The version numbers indicate what version of the protocol
the client expects the server to implement.

The authorization name indicates what authorization (and
authentication) protocol the client expects the server to
use, and the data is specific to that protocol.  Specifica-
tion of valid authorization mechanisms is not part of the
core X protocol.  A server that does not implement the pro-
tocol 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.''

Server Response

The client receives the following information at connection
setup:

     success: {Failed, Success, Authenticate}

The client receives the following additional data if the
returned success value is Failed, and the connection is not
successfully established:





			     11





X Protocol				    X11, Release 6.4


     protocol-major-version: CARD16
     protocol-minor-version: CARD16
     reason: STRING8

The client receives the following additional data if the
returned success value is Authenticate, and further authen-
tication negotiation is required:

     reason: STRING8

The contents of the reason string are specific to the autho-
rization protocol in use.  The semantics of this authentica-
tion negotiation are not constrained, except that the nego-
tiation must eventually terminate with a reply from the
server containing a success value of Failed or Success.

The client receives the following additional data if the
returned success value is Success, and the connection is
successfully established:

     protocol-major-version: CARD16
     protocol-minor-version: CARD16
     vendor: STRING8
     release-number: CARD32
     resource-id-base, resource-id-mask: CARD32
     image-byte-order: {LSBFirst, MSBFirst}
     bitmap-scanline-unit: {8, 16, 32}
     bitmap-scanline-pad: {8, 16, 32}
     bitmap-bit-order: {LeastSignificant, MostSignificant}
     pixmap-formats: LISTofFORMAT
     roots: LISTofSCREEN
     motion-buffer-size: CARD32
     maximum-request-length: CARD16
     min-keycode, max-keycode: KEYCODE

     where:

	  FORMAT:   [depth: CARD8,
		     bits-per-pixel: {1, 4, 8, 16, 24, 32}
		     scanline-pad: {8, 16, 32}]

















			     12





X Protocol				    X11, Release 6.4


	  SCREEN:   [root: WINDOW
		     width-in-pixels, height-in-pixels:
		    CARD16
		     width-in-millimeters, height-in-mil-
		    limeters: CARD16
		     allowed-depths: LISTofDEPTH
		     root-depth: CARD8
		     root-visual: VISUALID
		     default-colormap: COLORMAP
		     white-pixel, black-pixel: CARD32
		     min-installed-maps, max-installed-maps:
		    CARD16
		     backing-stores: {Never, WhenMapped,
		    Always}
		     save-unders: BOOL
		     current-input-masks: SETofEVENT]

	   DEPTH:   [depth: CARD8
		     visuals: LISTofVISUALTYPE]

      VISUALTYPE:   [visual-id: VISUALID
		     class: {StaticGray, StaticColor, True-
		    Color, GrayScale,
			       PseudoColor, DirectColor}
		     red-mask, green-mask, blue-mask: CARD32
		     bits-per-rgb-value: CARD8
		     colormap-entries: CARD16]


Server Information

The information that is global to the server is:

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 com-
patible 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.

The vendor string gives some identification of the owner of
the server implementation.  The vendor controls the seman-
tics of the release number.

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



			     13





X Protocol				    X11, Release 6.4


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 iden-
tifiers, 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.

Although the server is in general responsible for byte-swap-
ping 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.

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 rep-
resented as a bitmap, and the planes appear from most sig-
nificant to least significant in bit order with no padding
between planes.

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 for-
mat, 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 sig-
nificant bits are used to hold the pixmap data, and the val-
ues 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-scan-
line-pad.

How a pointing device roams the screens is up to the server
implementation and is transparent to the protocol.  No geom-
etry is defined among screens.



			     14





X Protocol				    X11, Release 6.4


The server may retain the recent history of pointer motion
and do so to a finer granularity than is reported by Motion-
Notify events.	The GetMotionEvents request makes such his-
tory available.  The motion-buffer-size gives the approxi-
mate maximum number of elements in the history buffer.

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 gen-
erate a Length 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).

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.

Screen Information

The information that applies per screen is:

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 InputOnly windows are always supported.

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 InputOut-
put.  Width-in-millimeters and height-in-millimeters can be
used to determine the physical size and the aspect ratio.

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.

Black-pixel and white-pixel can be used in implementing a
monochrome application.  These pixel values are for perma-
nently 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.





			     15





X Protocol				    X11, Release 6.4


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.

Min-installed-maps specifies the number of maps that can be
guaranteed to be installed simultaneously (with InstallCol-
ormap), 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 col-
ormaps 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 col-
ormap, both values will be 1.

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 True, the server can support the save-under mode
in CreateWindow and ChangeWindowAttributes, although again
it may be storage limited.

The current-input-events is what GetWindowAttributes would
return for the all-event-masks for the root window.

Visual Information

The information that applies per visual-type is:

A given visual type might be listed for more than one depth
or for more than one screen.

For PseudoColor, a pixel value indexes a colormap to produce
independent RGB values; the RGB values can be changed dynam-
ically.  GrayScale is treated in the same way as PseudoColor
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 DirectColor, a pixel
value is decomposed into separate RGB subfields, and each
subfield separately indexes the colormap for the correspond-
ing value.  The RGB values can be changed dynamically.
TrueColor is treated in the same way as DirectColor except
the colormap has predefined read-only RGB values.  These
values are server-dependent but provide linear or near-lin-
ear increasing ramps in each primary.  StaticColor is
treated in the same way as PseudoColor except the colormap
has predefined read-only RGB values, which are server-depen-
dent.  StaticGray is treated in the same way as StaticColor
except the red, green, and blue values are equal for any
single pixel value, resulting in shades of gray.  StaticGray
with a two-entry colormap can be thought of as monochrome.





			     16





X Protocol				    X11, Release 6.4


The red-mask, green-mask, and blue-mask are only defined for
DirectColor and TrueColor.  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.

The bits-per-rgb-value specifies the log base 2 of the num-
ber of distinct color intensity values (individually) of
red, green, and blue.  This number need not bear any rela-
tion 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:


	  hw-intensity = protocol-intensity / (65536 / total-hw-intensities)


Colormap entries are indexed from 0.  The colormap-entries
defines the number of available colormap entries in a newly
created colormap.  For DirectColor and TrueColor, 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.

9.  Requests


__
|    CreateWindow

  wid, parent: WINDOW
  class: {InputOutput, InputOnly, CopyFromParent}
  depth: CARD8
  visual: VISUALID or CopyFromParent
  x, y: INT16
  width, height, border-width: CARD16
  value-mask: BITMASK
  value-list: LISTofVALUE

  Errors: Alloc, Colormap, Cursor, IDChoice, Match, Pixmap,
|__    Value, Window


This request creates an unmapped window and assigns the
identifier wid to it.

A class of CopyFromParent means the class is taken from the
parent.  A depth of zero for class InputOutput or Copy-
FromParent means the depth is taken from the parent.  A
visual of CopyFromParent means the visual type is taken from
the parent.  For class InputOutput, the visual type and
depth must be a combination supported for the screen (or a
Match error results).  The depth need not be the same as the
parent, but the parent must not be of class InputOnly (or a



			     17





X Protocol				    X11, Release 6.4


Match error results).  For class InputOnly, the depth must
be zero (or a Match error results), and the visual must be
one supported for the screen (or a Match error results).
However, the parent can have any depth and class.

The server essentially acts as if InputOnly windows do not
exist for the purposes of graphics requests, exposure pro-
cessing, and VisibilityNotify events.  An InputOnly window
cannot be used as a drawable (as a source or destination for
graphics requests).  InputOnly and InputOutput windows act
identically in other respects-properties, grabs, input con-
trol, and so on.

The coordinate system has the X axis horizontal and the Y
axis vertical with the origin [0, 0] at the upper-left cor-
ner.  Coordinates are integral, in terms of pixels, and
coincide with pixel centers.  Each window and pixmap has its
own coordinate system.	For a window, the origin is inside
the border at the inside, upper-left corner.

The 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 Value error results).  The border-
width for an InputOnly window must be zero (or a Match error
results).

The window is placed on top in the stacking order with
respect to siblings.

The value-mask and value-list specify attributes of the win-
dow that are to be explicitly initialized.  The possible
values are:

-----------------------------------------------
Attribute	    Type
-----------------------------------------------
background-pixmap   PIXMAP or None or Paren-
		    tRelative
background-pixel    CARD32
border-pixmap	    PIXMAP or CopyFromParent
border-pixel	    CARD32
bit-gravity	    BITGRAVITY
win-gravity	    WINGRAVITY
backing-store	    {NotUseful, WhenMapped,
		    Always}
backing-planes	    CARD32
backing-pixel	    CARD32
save-under	    BOOL
event-mask	    SETofEVENT
do-not-propagate-   SETofDEVICEEVENT
mask




			     18





X Protocol				    X11, Release 6.4


-----------------------------------------------
Attribute	    Type
-----------------------------------------------
override-redirect   BOOL
colormap	    COLORMAP or CopyFromParent
cursor		    CURSOR or None
-----------------------------------------------


The default values when attributes are not explicitly ini-
tialized are:

-----------------------------------
Attribute	    Default
-----------------------------------
background-pixmap   None
border-pixmap	    CopyFromParent
bit-gravity	    Forget
win-gravity	    NorthWest
backing-store	    NotUseful
backing-planes	    all ones
backing-pixel	    zero
save-under	    False
event-mask	    {} (empty set)
do-not-propagate-   {} (empty set)
mask
override-redirect   False
colormap	    CopyFromParent
cursor		    None
-----------------------------------


Only the following attributes are defined for InputOnly win-
dows:

o    win-gravity

o    event-mask

o    do-not-propagate-mask

o    override-redirect

o    cursor

It is a Match error to specify any other attributes for
InputOnly windows.

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 Match error
results).  Any size pixmap can be used, although some sizes
may be faster than others.  If background None is specified,
the window has no defined background.  If background



			     19





X Protocol				    X11, Release 6.4


ParentRelative is specified, the parent's background is
used, but the window must have the same depth as the parent
(or a Match error results).  If the parent has background
None, then the window will also have background None.  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 back-
ground-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 Paren-
tRelative background, the background tile origin always
aligns with the parent's background tile origin.  Otherwise,
the background tile origin is always the window origin.

When no valid contents are available for regions of a window
and the regions are either visible or the server is main-
taining backing store, the server automatically tiles the
regions with the window's background unless the window has a
background of None.  If the background is None, the previous
screen contents from other windows of the same depth as the
window are simply left in place if the contents come from
the parent of the window or an inferior of the parent; oth-
erwise, the initial contents of the exposed regions are
undefined.  Exposure events are then generated for the
regions, even if the background is None.

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 Match error
results).  Any size pixmap can be used, although some sizes
may be faster than others.  If CopyFromParent 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 Match
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 bor-
der-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.

Output to a window is always clipped to the inside of the
window, so that the border is never affected.

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 ConfigureWindow request).




			     20





X Protocol				    X11, Release 6.4


A backing-store of WhenMapped advises the server that main-
taining contents of obscured regions when the window is
mapped would be beneficial.  A backing-store of Always
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 NotUseful advises the server that main-
taining 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.

If save-under is True, the server is advised that when this
window is mapped, saving the contents of windows it obscures
would be beneficial.

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.

The backing-planes indicates (with bits set to 1) which bit
planes of the window hold dynamic data that must be pre-
served in backing-stores and during save-unders.  The back-
ing-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.

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.

The override-redirect specifies whether map and configure
requests on this window should override a SubstructureRedi-
rect on the parent, typically to inform a window manager not
to tamper with the window.

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 InstallColormap requests.
The colormap must have the same visual type and root as the
window (or a Match error results).  If CopyFromParent is
specified, the parent's colormap is copied (subsequent



			     21





X Protocol				    X11, Release 6.4


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 Match error results), and the parent
must not have a colormap of None (or a Match error results).
For an explanation of None, see FreeColormap 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.

If a cursor is specified, it will be used whenever the
pointer is in the window.  If None is specified, the par-
ent's cursor will be used when the pointer is in the window,
and any change in the parent's cursor will cause an immedi-
ate change in the displayed cursor.

This request generates a CreateNotify event.

The background and border pixmaps and the cursor may be
freed immediately if no further explicit references to them
are to be made.

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.


__
|    ChangeWindowAttributes

  window: WINDOW
  value-mask: BITMASK
  value-list: LISTofVALUE

  Errors: Access, Colormap, Cursor, Match, Pixmap, Value,
|__    Window


The value-mask and value-list specify which attributes are
to be changed.	The values and restrictions are the same as
for CreateWindow.

Setting a new background, whether by background-pixmap or
background-pixel, overrides any previous background.  Set-
ting a new border, whether by border-pixel or border-pixmap,
overrides any previous border.

Changing the background does not cause the window contents
to be changed.	Setting the border or changing the back-
ground such that the border tile origin changes causes the
border to be repainted.  Changing the background of a root
window to None or ParentRelative restores the default back-
ground pixmap.	Changing the border of a root window to
CopyFromParent restores the default border pixmap.




			     22





X Protocol				    X11, Release 6.4


Changing the win-gravity does not affect the current posi-
tion of the window.

Changing the backing-store of an obscured window to When-
Mapped or Always or changing the backing-planes, backing-
pixel, or save-under of a mapped window may have no immedi-
ate effect.

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 SubstructureRedirect,
only one client at a time can select for ResizeRedirect, and
only one client at a time can select for ButtonPress.  An
attempt to violate these restrictions results in an Access
error.

There is only one do-not-propagate-mask for a window, not
one per client.

Changing the colormap of a window (by defining a new map,
not by changing the contents of the existing map) generates
a ColormapNotify event.  Changing the colormap of a visible
window might have no immediate effect on the screen (see
InstallColormap request).

Changing the cursor of a root window to None restores the
default cursor.

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.

























			     23





X Protocol				    X11, Release 6.4

__
|    GetWindowAttributes

  window: WINDOW

   ->

  visual: VISUALID
  class: {InputOutput, InputOnly}
  bit-gravity: BITGRAVITY
  win-gravity: WINGRAVITY
  backing-store: {NotUseful, WhenMapped, Always}
  backing-planes: CARD32
  backing-pixel: CARD32
  save-under: BOOL
  colormap: COLORMAP or None
  map-is-installed: BOOL
  map-state: {Unmapped, Unviewable, Viewable}
  all-event-masks, your-event-mask: SETofEVENT
  do-not-propagate-mask: SETofDEVICEEVENT
  override-redirect: BOOL

|__    Errors: Window


This request returns the current attributes of the window.
A window is Unviewable 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.


__
|    DestroyWindow

  window: WINDOW

|__    Errors: Window


If the argument window is mapped, an UnmapWindow request is
performed automatically.  The window and all inferiors are
then destroyed, and a DestroyNotify event is generated for
each window.  The ordering of the DestroyNotify events is
such that for any given window, DestroyNotify is generated
on all inferiors of the window before being generated on the
window itself.	The ordering among siblings and across sub-
hierarchies is not otherwise constrained.

Normal exposure processing on formerly obscured windows is
performed.

If the window is a root window, this request has no effect.





			     24





X Protocol				    X11, Release 6.4

__
|    DestroySubwindows

  window: WINDOW

|__    Errors: Window


This request performs a DestroyWindow request on all chil-
dren of the window, in bottom-to-top stacking order.


__
|    ChangeSaveSet

  window: WINDOW
  mode: {Insert, Delete}

Errors:
|__    Match, Value, Window


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 Match error results).  For further
information about the use of the save-set, see section 10.

When windows are destroyed, the server automatically removes
them from the save-set.


__
|    ReparentWindow

  window, parent: WINDOW
  x, y: INT16

|__    Errors: Match, Window


If the window is mapped, an UnmapWindow 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 rela-
tive 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 sib-
lings.	A ReparentNotify event is then generated.  The over-
ride-redirect attribute of the window is passed on in this
event; a value of True indicates that a window manager
should not tamper with this window.  Finally, if the window
was originally mapped, a MapWindow request is performed
automatically.





			     25





X Protocol				    X11, Release 6.4


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.

A Match error is generated if:

o    The new parent is not on the same screen as the old
     parent.

o    The new parent is the window itself or an inferior of
     the window.

o    The new parent is InputOnly, and the window is not.

o    The window has a ParentRelative background, and the new
     parent is not the same depth as the window.


__
|    MapWindow

  window: WINDOW

|__    Errors: Window


If the window is already mapped, this request has no effect.

If the override-redirect attribute of the window is False
and some other client has selected SubstructureRedirect on
the parent, then a MapRequest event is generated, but the
window remains unmapped.  Otherwise, the window is mapped,
and a MapNotify event is generated.

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.












			     26





X Protocol				    X11, Release 6.4

__
|    MapSubwindows

  window: WINDOW

|__    Errors: Window


This request performs a MapWindow request on all unmapped
children of the window, in top-to-bottom stacking order.


__
|    UnmapWindow

  window: WINDOW

|__    Errors: Window


If the window is already unmapped, this request has no
effect.  Otherwise, the window is unmapped, and an UnmapNo-
tify event is generated.  Normal exposure processing on for-
merly obscured windows is performed.


__
|    UnmapSubwindows

  window: WINDOW

|__    Errors: Window


This request performs an UnmapWindow request on all mapped
children of the window, in bottom-to-top stacking order.


__
|    ConfigureWindow

  window: WINDOW
  value-mask: BITMASK
  value-list: LISTofVALUE

|__    Errors: Match, Value, Window


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:







			     27





X Protocol				    X11, Release 6.4


-----------------------------------------------
Attribute      Type
-----------------------------------------------
x	       INT16
y	       INT16
width	       CARD16
height	       CARD16
border-width   CARD16
sibling        WINDOW
stack-mode     {Above, Below, TopIf, BottomIf,
	       Opposite}
-----------------------------------------------


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 Value
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 Match error to attempt to
make the border-width of an InputOnly window nonzero.

If the override-redirect attribute of the window is False
and some other client has selected SubstructureRedirect on
the parent, a ConfigureRequest event is generated, and no
further processing is performed.  Otherwise, the following
is performed:

If some other client has selected ResizeRedirect on the win-
dow and the inside width or height of the window is being
changed, a ResizeRequest event is generated, and the current
inside width and height are used instead.  Note that the
override-redirect attribute of the window has no effect on
ResizeRedirect and that SubstructureRedirect on the parent
has precedence over ResizeRedirect on the window.

The geometry of the window is changed as specified, the win-
dow is restacked among siblings, and a ConfigureNotify 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.

If the inside width or height of a window is not changed but
the window is moved or its border is changed, then the



			     28





X Protocol				    X11, Release 6.4


contents of the window are not lost but move with the win-
dow.  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:

-----------------------
Direction   Deltas
-----------------------
NorthWest   [0, 0]
North	    [W/2, 0]
NorthEast   [W, 0]
West	    [0, H/2]
Center	    [W/2, H/2]
East	    [W, H/2]
SouthWest   [0, H]
South	    [W/2, H]
SouthEast   [W, H]
-----------------------


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 correspond-
ing pair defines the change in position of the window within
the parent.  This repositioning generates a GravityNotify
event.	GravityNotify events are generated after the Config-
ureNotify event is generated.

A gravity of Static 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 Static gravity still only takes
effect when the width or height of the window is changed,
not when the window is simply moved.

A bit-gravity of Forget 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.

The contents and borders of inferiors are not affected by
their parent's bit-gravity.  A server is permitted to ignore
the specified bit-gravity and use Forget instead.





			     29





X Protocol				    X11, Release 6.4


A win-gravity of Unmap is like NorthWest, but the child is
also unmapped when the parent is resized, and an UnmapNotify
event is generated.  UnmapNotify events are generated after
the ConfigureNotify event is generated.

If a sibling and a stack-mode are specified, the window is
restacked as follows:

Above	     The window is placed just above the sibling.
Below	     The window is placed just below the sibling.
TopIf	     If the sibling occludes the window, then the
	     window is placed at the top of the stack.
BottomIf     If the window occludes the sibling, then the
	     window is placed at the bottom of the stack.
Opposite     If the sibling occludes the window, then the
	     window is placed at the top of the stack.	Oth-
	     erwise, if the window occludes the sibling,
	     then the window is placed at the bottom of the
	     stack.


If a stack-mode is specified but no sibling is specified,
the window is restacked as follows:

Above	     The window is placed at the top of the stack.
Below	     The window is placed at the bottom of the
	     stack.
TopIf	     If any sibling occludes the window, then the
	     window is placed at the top of the stack.
BottomIf     If the window occludes any sibling, then the
	     window is placed at the bottom of the stack.
Opposite     If any sibling occludes the window, then the
	     window is placed at the top of the stack.	Oth-
	     erwise, if the window occludes any sibling,
	     then the window is placed at the bottom of the
	     stack.


It is a Match error if a sibling is specified without a
stack-mode or if the window is not actually a sibling.

Note that the computations for BottomIf, TopIf, and Opposite
are performed with respect to the window's final geometry
(as controlled by the other arguments to the request), not
to its initial geometry.

Attempts to configure a root window have no effect.










			     30





X Protocol				    X11, Release 6.4

__
|    CirculateWindow

  window: WINDOW
  direction: {RaiseLowest, LowerHighest}

|__    Errors: Value, Window


If some other client has selected SubstructureRedirect on
the window, then a CirculateRequest event is generated, and
no further processing is performed.  Otherwise, the follow-
ing is performed, and then a CirculateNotify event is gener-
ated if the window is actually restacked.

For RaiseLowest, CirculateWindow raises the lowest mapped
child (if any) that is occluded by another child to the top
of the stack.  For LowerHighest, CirculateWindow 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.


__
|    GetGeometry

  drawable: DRAWABLE

   ->

  root: WINDOW
  depth: CARD8
  x, y: INT16
  width, height, border-width: CARD16

|__    Errors: Drawable


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 par-
ent's origin, and the width and height specify the inside
size, not including the border.

It is legal to pass an InputOnly window as a drawable to
this request.










			     31





X Protocol				    X11, Release 6.4

__
|    QueryTree

  window: WINDOW

   ->

  root: WINDOW
  parent: WINDOW or None
  children: LISTofWINDOW

|__    Errors: Window


This request returns the root, the parent, and the children
of the window.	The children are listed in bottom-to-top
stacking order.


__
|    InternAtom

  name: STRING8
  only-if-exists: BOOL

   ->

  atom: ATOM or None

|__    Errors: Alloc, Value


This request returns the atom for the given name.  If only-
if-exists is False, then the atom is created if it does not
exist.	The string should use the ISO Latin-1 encoding.
Uppercase and lowercase matter.

The lifetime of an atom is not tied to the interning client.
Atoms remain defined until server reset (see section 10).


__
|    GetAtomName

  atom: ATOM

   ->

  name: STRING8

|__    Errors: Atom


This request returns the name for the given atom.




			     32





X Protocol				    X11, Release 6.4

__
|    ChangeProperty

  window: WINDOW
  property, type: ATOM
  format: {8, 16, 32}
  mode: {Replace, Prepend, Append}
  data: LISTofINT8 or LISTofINT16 or LISTofINT32

|__    Errors: Alloc, Atom, Match, Value, Window


This request alters the property for the specified window.
The type is uninterpreted by the server.  The format speci-
fies whether the data should be viewed as a list of 8-bit,
16-bit, or 32-bit quantities so that the server can cor-
rectly byte-swap as necessary.

If the mode is Replace, the previous property value is dis-
carded.  If the mode is Prepend or Append, then the type and
format must match the existing property value (or a Match
error results).  If the property is undefined, it is treated
as defined with the correct type and format with zero-length
data.  For Prepend, the data is tacked on to the beginning
of the existing data, and for Append, it is tacked on to the
end of the existing data.

This request generates a PropertyNotify event on the window.

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).

The maximum size of a property is server-dependent and may
vary dynamically.


__
|    DeleteProperty

  window: WINDOW
  property: ATOM

|__    Errors: Atom, Window


This request deletes the property from the specified window
if the property exists and generates a PropertyNotify event
on the window unless the property does not exist.








			     33





X Protocol				    X11, Release 6.4

__
|    GetProperty

  window: WINDOW
  property: ATOM
  type: ATOM or AnyPropertyType
  long-offset, long-length: CARD32
  delete: BOOL

   ->

  type: ATOM or None
  format: {0, 8, 16, 32}
  bytes-after: CARD32
  value: LISTofINT8 or LISTofINT16 or LISTofINT32

|__    Errors: Atom, Value, Window


If the specified property does not exist for the specified
window, then the return type is None, 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 AnyPropertyType is specified or the speci-
fied 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:

     N = actual length of the stored property in bytes
	 (even if the format is 16 or 32)
     I = 4 * long-offset
     T = N - I
     L = MINIMUM(T, 4 * long-length)
     A = N - (I + L)


The returned value starts at byte index I in the property
(indexing from 0), and its length in bytes is L.  However,
it is a Value 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 True and the bytes-after is zero, the property is also
deleted from the window, and a PropertyNotify event is gen-
erated on the window.







			     34





X Protocol				    X11, Release 6.4

__
|    RotateProperties

  window: WINDOW
  delta: INT16
  properties: LISTofATOM

|__    Errors: Atom, Match, Window


If the property names in the list are viewed as being num-
bered 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).

If delta mod N is nonzero, a PropertyNotify event is gener-
ated for each property in the order listed.

If an atom occurs more than once in the list or no property
with that name is defined for the window, a Match error is
generated.  If an Atom or Match error is generated, no prop-
erties are changed.


__
|    ListProperties

  window: WINDOW

   ->

  atoms: LISTofATOM

|__    Errors: Window


This request returns the atoms of properties currently
defined on the window.


__
|    SetSelectionOwner

  selection: ATOM
  owner: WINDOW or None
  time: TIMESTAMP or CurrentTime

|__    Errors: Atom, Window






			     35





X Protocol				    X11, Release 6.4


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 CurrentTime replaced by the
current server time.  If the owner window is specified as
None, then the owner of the selection becomes None (that is,
no owner).  Otherwise, the owner of the selection becomes
the client executing the request.  If the new owner (whether
a client or None) is not the same as the current owner and
the current owner is not None, then the current owner is
sent a SelectionClear event.

If the client that is the owner of a selection is later ter-
minated (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
None, but the last-change time is not affected.

The selection atom is uninterpreted by the server.  The
owner window is returned by the GetSelectionOwner request
and is reported in SelectionRequest and SelectionClear
events.

Selections are global to the server.


__
|    GetSelectionOwner

  selection: ATOM

   ->

  owner: WINDOW or None

|__    Errors: Atom


This request returns the current owner window of the speci-
fied selection, if any.  If None is returned, then there is
no owner for the selection.














			     36





X Protocol				    X11, Release 6.4

__
|    ConvertSelection

  selection, target: ATOM
  property: ATOM or None
  requestor: WINDOW
  time: TIMESTAMP or CurrentTime

|__    Errors: Atom, Window


If the specified selection has an owner, the server sends a
SelectionRequest event to that owner.  If no owner for the
specified selection exists, the server generates a Selec-
tionNotify event to the requestor with property None.  The
arguments are passed on unchanged in either of the events.


__
|    SendEvent

  destination: WINDOW or PointerWindow or InputFocus
  propagate: BOOL
  event-mask: SETofEVENT
  event: <normal-event-format>

|__    Errors: Value, Window


If PointerWindow is specified, destination is replaced with
the window that the pointer is in.  If InputFocus is speci-
fied and the focus window contains the pointer, destination
is replaced with the window that the pointer is in.  Other-
wise, destination is replaced with the focus window.

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.

If propagate is False, then the event is sent to every
client selecting on destination any of the event types in
event-mask.

If propagate is True and no clients have selected on desti-
nation any of the event types in event-mask, then destina-
tion 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 InputFocus 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.




			     37





X Protocol				    X11, Release 6.4


The event code must be one of the core events or one of the
events defined by an extension (or a Value error results) so
that the server can correctly byte-swap the contents as nec-
essary.  The contents of the event are otherwise unaltered
and unchecked by the server except to force on the most sig-
nificant bit of the event code and to set the sequence num-
ber in the event correctly.

Active grabs are ignored for this request.


__
|    GrabPointer

  grab-window: WINDOW
  owner-events: BOOL
  event-mask: SETofPOINTEREVENT
  pointer-mode, keyboard-mode: {Synchronous, Asynchronous}
  confine-to: WINDOW or None
  cursor: CURSOR or None
  time: TIMESTAMP or CurrentTime

   ->

  status: {Success, AlreadyGrabbed, Frozen, InvalidTime,
  NotViewable}

|__    Errors: Cursor, Value, Window


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.

If owner-events is False, all generated pointer events are
reported with respect to grab-window and are only reported
if selected by event-mask.  If owner-events is True 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.

If pointer-mode is Asynchronous, 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 Synchronous, 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 AllowEvents 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.



			     38





X Protocol				    X11, Release 6.4


If keyboard-mode is Asynchronous, keyboard event processing
is unaffected by activation of the grab.  If keyboard-mode
is Synchronous, 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 AllowEvents 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.

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 sub-
windows, the normal cursor for that window is displayed.
Otherwise, the cursor for grab-window is displayed.

If a confine-to window is specified, then the pointer will
be restricted to stay contained in that window.  The con-
fine-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.

This request generates EnterNotify and LeaveNotify events.

The request fails with status AlreadyGrabbed if the pointer
is actively grabbed by some other client.  The request fails
with status Frozen if the pointer is frozen by an active
grab of another client.  The request fails with status
NotViewable if grab-window or confine-to window is not view-
able or if the confine-to window lies completely outside the
boundaries of the root window.	The request fails with sta-
tus InvalidTime 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 CurrentTime replaced by the current
server time.


__
|    UngrabPointer

|__    time: TIMESTAMP or CurrentTime


This request releases the pointer if this client has it
actively grabbed (from either GrabPointer or GrabButton 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.



			     39





X Protocol				    X11, Release 6.4


This request generates EnterNotify and LeaveNotify events.

An UngrabPointer 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.


__
|    GrabButton

  modifiers: SETofKEYMASK or AnyModifier
  button: BUTTON or AnyButton
  grab-window: WINDOW
  owner-events: BOOL
  event-mask: SETofPOINTEREVENT
  pointer-mode, keyboard-mode: {Synchronous, Asynchronous}
  confine-to: WINDOW or None
  cursor: CURSOR or None

|__    Errors: Access, Cursor, Value, Window


This request establishes a passive grab.  In the future, the
pointer is actively grabbed as described in GrabPointer, the
last-pointer-grab time is set to the time at which the but-
ton was pressed (as transmitted in the ButtonPress event),
and the ButtonPress event is reported if all of the follow-
ing conditions are true:

o    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.

o    The grab-window contains the pointer.

o    The confine-to window (if any) is viewable.

o    A passive grab on the same button/key combination does
     not exist on any ancestor of grab-window.

The interpretation of the remaining arguments is the same as
for GrabPointer.  The active grab is terminated automati-
cally 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.

This request overrides all previous passive grabs by the
same client on the same button/key combinations on the same
window.  A modifier of AnyModifier is equivalent to issuing



			     40





X Protocol				    X11, Release 6.4


the request for all possible modifier combinations (includ-
ing the combination of no modifiers).  It is not required
that all specified modifiers have currently assigned key-
codes.	A button of AnyButton 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.

An Access error is generated if some other client has
already issued a GrabButton request with the same button/key
combination on the same window.  When using AnyModifier or
AnyButton, the request fails completely (no grabs are estab-
lished), and an Access error is generated if there is a con-
flicting grab for any combination.  The request has no
effect on an active grab.


__
|    UngrabButton

  modifiers: SETofKEYMASK or AnyModifier
  button: BUTTON or AnyButton
  grab-window: WINDOW

|__    Errors: Value, Window


This request releases the passive button/key combination on
the specified window if it was grabbed by this client.	A
modifiers argument of AnyModifier is equivalent to issuing
the request for all possible modifier combinations (includ-
ing the combination of no modifiers).  A button of AnyButton
is equivalent to issuing the request for all possible but-
tons.  The request has no effect on an active grab.


__
|    ChangeActivePointerGrab

  event-mask: SETofPOINTEREVENT
  cursor: CURSOR or None
  time: TIMESTAMP or CurrentTime

|__    Errors: Cursor, Value


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 GrabPointer.  This
request has no effect on the parameters of any passive grabs
established with GrabButton.




			     41





X Protocol				    X11, Release 6.4

__
|    GrabKeyboard

  grab-window: WINDOW
  owner-events: BOOL
  pointer-mode, keyboard-mode: {Synchronous, Asynchronous}
  time: TIMESTAMP or CurrentTime

   ->

  status: {Success, AlreadyGrabbed, Frozen, InvalidTime,
  NotViewable}

|__    Errors: Value, Window


This request actively grabs control of the keyboard.  Fur-
ther key events are reported only to the grabbing client.
This request overrides any active keyboard grab by this
client.

If owner-events is False, all generated key events are
reported with respect to grab-window.  If owner-events is
True and if a generated key event would normally be reported
to this client, it is reported normally.  Otherwise, the
event is reported with respect to the grab-window.  Both
KeyPress and KeyRelease events are always reported, indepen-
dent of any event selection made by the client.

If keyboard-mode is Asynchronous, 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 Synchronous, 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 AllowEvents 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.

If pointer-mode is Asynchronous, pointer event processing is
unaffected by activation of the grab.  If pointer-mode is
Synchronous, 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 AllowEvents 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 pro-
cessing.

This request generates FocusIn and FocusOut events.

The request fails with status AlreadyGrabbed if the keyboard
is actively grabbed by some other client.  The request fails
with status Frozen if the keyboard is frozen by an active



			     42





X Protocol				    X11, Release 6.4


grab of another client.  The request fails with status
NotViewable if grab-window is not viewable.  The request
fails with status InvalidTime if the specified time is ear-
lier than the last-keyboard-grab time or later than the cur-
rent server time.  Otherwise, the last-keyboard-grab time is
set to the specified time with CurrentTime replaced by the
current server time.


__
|    UngrabKeyboard

|__    time: TIMESTAMP or CurrentTime


This request releases the keyboard if this client has it
actively grabbed (as a result of either GrabKeyboard or
GrabKey) and releases any queued events.  The request has no
effect if the specified time is earlier than the last-key-
board-grab time or is later than the current server time.

This request generates FocusIn and FocusOut events.

An UngrabKeyboard is performed automatically if the event
window for an active keyboard grab becomes not viewable.


__
|    GrabKey

  key: KEYCODE or AnyKey
  modifiers: SETofKEYMASK or AnyModifier
  grab-window: WINDOW
  owner-events: BOOL
  pointer-mode, keyboard-mode: {Synchronous, Asynchronous}

|__    Errors: Access, Value, Window


This request establishes a passive grab on the keyboard.  In
the future, the keyboard is actively grabbed as described in
GrabKeyboard, the last-keyboard-grab time is set to the time
at which the key was pressed (as transmitted in the KeyPress
event), and the KeyPress event is reported if all of the
following conditions are true:

o    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.

o    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.



			     43





X Protocol				    X11, Release 6.4


o    A passive grab on the same key combination does not
     exist on any ancestor of grab-window.

The interpretation of the remaining arguments is the same as
for GrabKeyboard.  The active grab is terminated automati-
cally when the logical state of the keyboard has the speci-
fied key released, independent of the logical state of modi-
fier 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.

This request overrides all previous passive grabs by the
same client on the same key combinations on the same window.
A modifier of AnyModifier is equivalent to issuing the
request for all possible modifier combinations (including
the combination of no modifiers).  It is not required that
all modifiers specified have currently assigned keycodes.  A
key of AnyKey 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 Value error results).

An Access error is generated if some other client has issued
a GrabKey with the same key combination on the same window.
When using AnyModifier or AnyKey, the request fails com-
pletely (no grabs are established), and an Access error is
generated if there is a conflicting grab for any combina-
tion.


__
|    UngrabKey

  key: KEYCODE or AnyKey
  modifiers: SETofKEYMASK or AnyModifier
  grab-window: WINDOW

|__    Errors: Value, Window


This request releases the key combination on the specified
window if it was grabbed by this client.  A modifiers argu-
ment of AnyModifier is equivalent to issuing the request for
all possible modifier combinations (including the combina-
tion of no modifiers).	A key of AnyKey is equivalent to
issuing the request for all possible keycodes.	This request
has no effect on an active grab.










			     44





X Protocol				    X11, Release 6.4

__
|    AllowEvents

  mode: {AsyncPointer, SyncPointer, ReplayPointer, AsyncKey-
  board,
	     SyncKeyboard, ReplayKeyboard, AsyncBoth,
  SyncBoth}
  time: TIMESTAMP or CurrentTime

|__    Errors: Value


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.

For AsyncPointer, 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, AsyncPointer thaws for both.  AsyncPointer has no
effect if the pointer is not frozen by the client, but the
pointer need not be grabbed by the client.

For SyncPointer, if the pointer is frozen and actively
grabbed by the client, pointer event processing continues
normally until the next ButtonPress or ButtonRelease 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.  SyncPointer has no effect if the pointer is not
frozen by the client or if the pointer is not grabbed by the
client.

For ReplayPointer, if the pointer is actively grabbed by the
client and is frozen as the result of an event having been
sent to the client (either from the activation of a GrabBut-
ton or from a previous AllowEvents with mode SyncPointer but
not from a GrabPointer), 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.

For AsyncKeyboard, if the keyboard is frozen by the client,
keyboard event processing continues normally.  If the key-
board is frozen twice by the client on behalf of two sepa-
rate grabs, AsyncKeyboard thaws for both.  AsyncKeyboard has
no effect if the keyboard is not frozen by the client, but
the keyboard need not be grabbed by the client.

For SyncKeyboard, if the keyboard is frozen and actively
grabbed by the client, keyboard event processing continues



			     45





X Protocol				    X11, Release 6.4


normally until the next KeyPress or KeyRelease 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.  SyncKeyboard has no effect if the keyboard is not
frozen by the client or if the keyboard is not grabbed by
the client.

For ReplayKeyboard, if the keyboard is actively grabbed by
the client and is frozen as the result of an event having
been sent to the client (either from the activation of a
GrabKey or from a previous AllowEvents with mode SyncKey-
board but not from a GrabKeyboard), 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.

For SyncBoth, if both pointer and keyboard are frozen by the
client, event processing (for both devices) continues nor-
mally until the next ButtonPress, ButtonRelease, KeyPress,
or KeyRelease event is reported to the client for a grabbed
device (button event for the pointer, key event for the key-
board), at which time the devices again appear to freeze.
However, if the reported event causes the grab to be
released, then the devices do not freeze (but if the other
device is still grabbed, then a subsequent event for it will
still cause both devices to freeze).  SyncBoth has no effect
unless both pointer and keyboard are frozen by the client.
If the pointer or keyboard is frozen twice by the client on
behalf of two separate grabs, SyncBoth thaws for both (but a
subsequent freeze for SyncBoth will only freeze each device
once).

For AsyncBoth, if the pointer and the keyboard are frozen by
the client, event processing for both devices continues nor-
mally.	If a device is frozen twice by the client on behalf
of two separate grabs, AsyncBoth thaws for both.  AsyncBoth
has no effect unless both pointer and keyboard are frozen by
the client.

AsyncPointer, SyncPointer, and ReplayPointer have no effect
on processing of keyboard events.  AsyncKeyboard, SyncKey-
board, and ReplayKeyboard have no effect on processing of
pointer events.

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 pos-
sible for a single device to be frozen because of both
grabs.	In this case, the freeze must be released on behalf



			     46





X Protocol				    X11, Release 6.4


of both grabs before events can again be processed.  If a
device is frozen twice by a single client, then a single
AllowEvents releases both.


__
|__  GrabServer


This request disables processing of requests and close-downs
on all connections other than the one this request arrived
on.


__
|__  UngrabServer


This request restarts processing of requests and close-downs
on other connections.


__
|    QueryPointer

  window: WINDOW

   ->

  root: WINDOW
  child: WINDOW or None
  same-screen: BOOL
  root-x, root-y, win-x, win-y: INT16
  mask: SETofKEYBUTMASK

|__    Errors: Window


The root window the pointer is logically on and the pointer
coordinates relative to the root's origin are returned.  If
same-screen is False, then the pointer is not on the same
screen as the argument window, child is None, and win-x and
win-y are zero.  If same-screen is True, then win-x and win-
y are the pointer coordinates relative to the argument win-
dow'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.








			     47





X Protocol				    X11, Release 6.4

__
|    GetMotionEvents

  start, stop: TIMESTAMP or CurrentTime
  window: WINDOW

   ->

  events: LISTofTIMECOORD

  where:

  TIMECOORD:   [x, y: INT16
		time: TIMESTAMP]


|__    Errors: Window


This request returns all events in the motion history buffer
that fall between the specified start and stop times (inclu-
sive) 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.

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
CurrentTime.


__
|    TranslateCoordinates

  src-window, dst-window: WINDOW
  src-x, src-y: INT16

   ->

  same-screen: BOOL
  child: WINDOW or None
  dst-x, dst-y: INT16

|__    Errors: Window


The src-x and src-y coordinates are taken relative to src-
window's origin and are returned as dst-x and dst-y coordi-
nates relative to dst-window's origin.	If same-screen is
False, 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.




			     48





X Protocol				    X11, Release 6.4

__
|    WarpPointer

  src-window: WINDOW or None
  dst-window: WINDOW or None
  src-x, src-y: INT16
  src-width, src-height: CARD16
  dst-x, dst-y: INT16

|__    Errors: Window


If dst-window is None, 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 ori-
gin.  However, if src-window is not None, the move only
takes place if src-window contains the pointer and the
pointer is contained in the specified rectangle of src-win-
dow.

The src-x and src-y coordinates are relative to src-window's
origin.  If src-height is zero, it is replaced with the cur-
rent 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.

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.

This request will generate events just as if the user had
instantaneously moved the pointer.


__
|    SetInputFocus

  focus: WINDOW or PointerRoot or None
  revert-to: {Parent, PointerRoot, None}
  time: TIMESTAMP or CurrentTime

|__    Errors: Match, Value, Window


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 Current-
Time replaced by the current server time.

If None is specified as the focus, all keyboard events are
discarded until a new focus window is set.  In this case,



			     49





X Protocol				    X11, Release 6.4


the revert-to argument is ignored.

If a window is specified as the focus, it becomes the key-
board'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.

If PointerRoot 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.

This request generates FocusIn and FocusOut events.

The specified focus window must be viewable at the time of
the request (or a Match error results).  If the focus window
later becomes not viewable, the new focus window depends on
the revert-to argument.  If revert-to is Parent, the focus
reverts to the parent (or the closest viewable ancestor) and
the new revert-to value is taken to be None.  If revert-to
is PointerRoot or None, the focus reverts to that value.
When the focus reverts, FocusIn and FocusOut events are gen-
erated, but the last-focus-change time is not affected.


__
|    GetInputFocus

   ->

  focus: WINDOW or PointerRoot or None
|__    revert-to: {Parent, PointerRoot, None}


This request returns the current focus state.


__
|    QueryKeymap

   ->

|__    keys: LISTofCARD8


This request returns a bit vector for the logical state of
the keyboard.  Each bit set to 1 indicates that the corre-
sponding key is currently pressed.  The vector is repre-
sented 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 physi-
cal state if device event processing is frozen.



			     50





X Protocol				    X11, Release 6.4

__
|    OpenFont

  fid: FONT
  name: STRING8

|__    Errors: Alloc, IDChoice, Name


This request loads the specified font, if necessary, and as-
sociates 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 charac-
ters.  A structured format for font names is specified in
the X Consortium standard X Logical Font Description Conven-
tions.

Fonts are not associated with a particular screen and can be
stored as a component of any graphics context.


__
|    CloseFont

  font: FONT

|__    Errors: Font


This request deletes the association between the resource ID
and the font.  The font itself will be freed when no other
resource references it.






















			     51





X Protocol				    X11, Release 6.4

__
|    QueryFont

  font: FONTABLE

   ->

  font-info: FONTINFO
  char-infos: LISTofCHARINFO

  where:


     FONTINFO:	 [draw-direction: {LeftToRight, RightToLeft}
		  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: <32-bit-value>]
     CHARINFO:	 [left-side-bearing: INT16
		  right-side-bearing: INT16
		  character-width: INT16
		  ascent: INT16
		  descent: INT16
		  attributes: CARD16]


|__    Errors: Font


This request returns logical information about a font.	If a
gcontext is given for font, the currently contained font is
used.

The draw-direction is just a hint and indicates whether most
char-infos have a positive, LeftToRight, or a negative,
RightToLeft, character-width metric.  The core protocol
defines no support for vertical text.

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 spec-
ifies 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:





			     52





X Protocol				    X11, Release 6.4


     byte1 = N/D + min-byte1
     byte2 = N\\D + min-char-or-byte2


where:

     D = max-char-or-byte2 - min-char-or-byte2 + 1
     / = integer division
     \\ = integer modulus


If 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:

     L = D * (max-byte1 - min-byte1 + 1)


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 True, then all characters in
char-infos have nonzero bounding boxes.

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 nonex-
istent character, then no printing is performed for an unde-
fined or nonexistent character.

The min-bounds and max-bounds contain the minimum and maxi-
mum 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:

     [x + min-bounds.left-side-bearing, y - max-bounds.ascent]

with a width of:

     max-bounds.right-side-bearing - min-bounds.left-side-bearing


and a height of:

     max-bounds.ascent + max-bounds.descent


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



			     53





X Protocol				    X11, Release 6.4


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).

A font is not guaranteed to have any properties.  The inter-
pretation of the property value (for example, INT32, CARD32)
must be derived from a priori knowledge of the property.  A
basic set of font properties is specified in the X Consor-
tium standard X Logical Font Description Conventions.

For a character origin at [x,y], the bounding box of a char-
acter (that is, the smallest rectangle enclosing the charac-
ter's shape), described in terms of CHARINFO components, is
a rectangle with its upper-left corner at:

     [x + left-side-bearing, y - ascent]


with a width of:

     right-side-bearing - left-side-bearing


and a height of:

     ascent + descent


and the origin for the next character is defined to be:

     [x + character-width, y]


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).

Note that CHARINFO metric values can be negative.

A nonexistent character is represented with all CHARINFO
components zero.

The interpretation of the per-character attributes field is
server-dependent.







			     54





X Protocol				    X11, Release 6.4

__
|    QueryTextExtents

  font: FONTABLE
  string: STRING16

   ->

  draw-direction: {LeftToRight, RightToLeft}
  font-ascent: INT16
  font-descent: INT16
  overall-ascent: INT16
  overall-descent: INT16
  overall-width: INT32
  overall-left: INT32
  overall-right: INT32

|__    Errors: Font


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 QueryFont.  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 char-
acter-width metrics of all characters in the string.  For
each character in the string, let W be the sum of the char-
acter-width metrics of all characters preceding it in the
string, let L be the left-side-bearing metric of the charac-
ter 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.

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).

Characters with all zero metrics are ignored.  If the font
has no defined default-char, then undefined characters in
the string are also ignored.












			     55





X Protocol				    X11, Release 6.4

__
|    ListFonts

  pattern: STRING8
  max-names: CARD16

   ->

|__    names: LISTofSTRING8


This request returns a list of available font names (as con-
trolled by the font search path; see SetFontPath 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.


__
|    ListFontsWithInfo

  pattern: STRING8
  max-names: CARD16

   ->

  name: STRING8
  info FONTINFO
  replies-hint: CARD32

  where:

|__  FONTINFO: <same type definition as in QueryFont>


This request is similar to ListFonts, but it also returns
information about each font.  The information returned for
each font is identical to what QueryFont 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.







			     56





X Protocol				    X11, Release 6.4

__
|    SetFontPath

  path: LISTofSTRING8

|__    Errors: Value


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.

Setting the path to the empty list restores the default path
defined for the server.

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 allo-
cated.

The meaning of an error from this request is system spe-
cific.


__
|    GetFontPath

   ->

|__    path: LISTofSTRING8


This request returns the current search path for fonts.


__
|    CreatePixmap

  pid: PIXMAP
  drawable: DRAWABLE
  depth: CARD8
  width, height: CARD16

|__    Errors: Alloc, Drawable, IDChoice, Value


This request creates a pixmap and assigns the identifier pid
to it.	The width and height must be nonzero (or a Value
error results).  The depth must be one of the depths sup-
ported by the root of the specified drawable (or a Value
error results).  The initial contents of the pixmap are
undefined.




			     57





X Protocol				    X11, Release 6.4


It is legal to pass an InputOnly window as a drawable to
this request.


__
|    FreePixmap

  pixmap: PIXMAP

|__    Errors: Pixmap


This request deletes the association between the resource ID
and the pixmap.  The pixmap storage will be freed when no
other resource references it.


__
|    CreateGC

  cid: GCONTEXT
  drawable: DRAWABLE
  value-mask: BITMASK
  value-list: LISTofVALUE

  Errors: Alloc, Drawable, Font, IDChoice, Match, Pixmap,
|__    Value


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
Match error.

The value-mask and value-list specify which components are
to be explicitly initialized.  The context components are:

-------------------------------------------------------------
Component	  Type
-------------------------------------------------------------
function	  {Clear, And, AndReverse, Copy, AndIn-
		  verted, NoOp, Xor,
		    Or, Nor, Equiv, Invert, OrReverse, Copy-
		  Inverted,
		    OrInverted, Nand, Set}
plane-mask	  CARD32
foreground	  CARD32
background	  CARD32
line-width	  CARD16
line-style	  {Solid, OnOffDash, DoubleDash}
cap-style	  {NotLast, Butt, Round, Projecting}
join-style	  {Miter, Round, Bevel}




			     58





X Protocol				    X11, Release 6.4


-------------------------------------------------------------
Component	  Type
-------------------------------------------------------------
fill-style	  {Solid, Tiled, OpaqueStippled, Stippled}
fill-rule	  {EvenOdd, Winding}
arc-mode	  {Chord, PieSlice}
tile		  PIXMAP
stipple 	  PIXMAP
tile-stipple-x-   INT16
origin
tile-stipple-y-   INT16
origin
font		  FONT
subwindow-mode	  {ClipByChildren, IncludeInferiors}
graphics-expo-	  BOOL
sures
clip-x-origin	  INT16
clip-y-origin	  INT16
clip-mask	  PIXMAP or None
dash-offset	  CARD16
dashes		  CARD8
-------------------------------------------------------------


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:


     ((src FUNC dst) AND plane-mask) OR (dst AND (NOT plane-mask))


Range checking is not performed on the values for fore-
ground, background, or plane-mask.  They are simply trun-
cated to the appropriate number of bits.

The meanings of the functions are:

---------------------------------------
Function	  Operation
---------------------------------------
Clear		  0
And		  src AND dst
AndReverse	  src AND (NOT dst)
Copy		  src
AndInverted	  (NOT src) AND dst
NoOp		  dst
Xor		  src XOR dst
Or		  src OR dst
Nor		  (NOT src) AND (NOT
		  dst)




			     59





X Protocol				    X11, Release 6.4


Equiv		  (NOT src) XOR dst
Invert		  NOT dst
OrReverse	  src OR (NOT dst)
CopyInverted	  NOT src
OrInverted	  (NOT src) OR dst
Nand		  (NOT src) OR (NOT
		  dst)
Set		  1
---------------------------------------


The line-width is measured in pixels and can be greater than
or equal to one, a wide line, or the special value zero, a
thin line.

Wide lines are drawn centered on the path described by the
graphics request.  Unless otherwise specified by the join or
cap style, the bounding box of a wide line with endpoints
[x1, y1], [x2, y2] and width w is a rectangle with vertices
at the following real coordinates:

     [x1-(w*sn/2), y1+(w*cs/2)], [x1+(w*sn/2), y1-(w*cs/2)],
     [x2-(w*sn/2), y2+(w*cs/2)], [x2+(w*sn/2), y2-(w*cs/2)]


The sn is the sine of the angle of the line and cs is the
cosine of the angle of the line.  A pixel is part of the
line (and hence drawn) if the center of the pixel is fully
inside the bounding box, which is viewed as having infinite-
ly thin edges.	If the center of the pixel is exactly on the
bounding box, it is part of the line if and only if the
interior is immediately to its right (x increasing direc-
tion).	Pixels with centers on a horizontal edge are a spe-
cial case and are part of the line if and only if the inte-
rior or the boundary is immediately below (y increasing
direction) and if the interior or the boundary is immedi-
ately to the right (x increasing direction).  Note that this
description is a mathematical model describing the pixels
that are drawn for a wide line and does not imply that
trigonometry is required to implement such a model.  Real or
fixed point arithmetic is recommended for computing the cor-
ners of the line endpoints for lines greater than one pixel
in width.

Thin lines (zero line-width) are nominally one pixel wide
lines drawn using an unspecified, device-dependent algo-
rithm.	There are only two constraints on this algorithm.
First, if a line is drawn unclipped from [x1,y1] to [x2,y2]
and another line is drawn unclipped from [x1+dx,y1+dy] to
[x2+dx,y2+dy], then a point [x,y] is touched by drawing the
first line if and only if the point [x+dx,y+dy] is touched
by drawing the second line.  Second, the effective set of
points comprising a line cannot be affected by clipping.
Thus, a point is touched in a clipped line if and only if



			     60





X Protocol				    X11, Release 6.4


the point lies inside the clipping region and the point
would be touched by the line when drawn unclipped.

Note that a wide line drawn from [x1,y1] to [x2,y2] always
draws the same pixels as a wide line drawn from [x2,y2] to
[x1,y1], not counting cap-style and join-style.  Implemen-
tors are encouraged to make this property true for thin
lines, but it is not required.	A line-width of zero may
differ from a line-width of one in which pixels are drawn.
In general, drawing a thin line will be faster than drawing
a wide line of width one, but thin lines may not mix well
aesthetically with wide lines because of the different draw-
ing algorithms.  If it is desirable to obtain precise and
uniform results across all displays, a client should always
use a line-width of one, rather than a line-width of zero.

The line-style defines which sections of a line are drawn:

Solid	     The full path of the line is drawn.
DoubleDash   The full path of the line is drawn, but the
	     even dashes are filled differently than the odd
	     dashes (see fill-style), with Butt cap-style
	     used where even and odd dashes meet.
OnOffDash    Only the even dashes are drawn, and cap-style
	     applies to all internal ends of the individual
	     dashes (except NotLast is treated as Butt).


The cap-style defines how the endpoints of a path are drawn:

NotLast      The result is equivalent to Butt, except that
	     for a line-width of zero the final endpoint is
	     not drawn.
Butt	     The result is square at the endpoint (perpen-
	     dicular to the slope of the line) with no pro-
	     jection beyond.
Round	     The result is a circular arc with its diameter
	     equal to the line-width, centered on the end-
	     point; it is equivalent to Butt for line-width
	     zero.
Projecting   The result is square at the end, but the path
	     continues beyond the endpoint for a distance
	     equal to half the line-width; it is equivalent
	     to Butt for line-width zero.


The join-style defines how corners are drawn for wide lines:

Miter	     The outer edges of the two lines extend to meet
	     at an angle.  However, if the angle is less
	     than 11 degrees, a Bevel join-style is used
	     instead.





			     61





X Protocol				    X11, Release 6.4


Round	     The result is a circular arc with a diameter
	     equal to the line-width, centered on the join-
	     point.
Bevel	     The result is Butt endpoint styles, and then
	     the triangular notch is filled.


For a line with coincident endpoints (x1=x2, y1=y2), when
the cap-style is applied to both endpoints, the semantics
depends on the line-width and the cap-style:

NotLast      thin    This is device-dependent, but the desired
		     effect is that nothing is drawn.
Butt	     thin    This is device-dependent, but the desired
		     effect is that a single pixel is drawn.
Round	     thin    This is the same as Butt/thin.
Projecting   thin    This is the same as Butt/thin.
Butt	     wide    Nothing is drawn.
Round	     wide    The closed path is a circle, centered at
		     the endpoint and with a diameter equal to
		     the line-width.
Projecting   wide    The closed path is a square, aligned with
		     the coordinate axes, centered at the end-
		     point and with sides equal to the line-
		     width.


For a line with coincident endpoints (x1=x2, y1=y2), when
the join-style is applied at one or both endpoints, the
effect is as if the line was removed from the overall path.
However, if the total path consists of (or is reduced to) a
single point joined with itself, the effect is the same as
when the cap-style is applied at both endpoints.

The tile/stipple represents an infinite two-dimensional
plane with the tile/stipple replicated in all dimensions.
When that plane is superimposed on the drawable for use in a
graphics operation, the upper-left corner of some instance
of the tile/stipple is at the coordinates within the draw-
able specified by the tile/stipple origin.  The tile/stipple
and clip origins are interpreted relative to the origin of
whatever destination drawable is specified in a graphics
request.

The tile pixmap must have the same root and depth as the
gcontext (or a Match error results).  The stipple pixmap
must have depth one and must have the same root as the gcon-
text (or a Match error results).  For fill-style Stippled
(but not fill-style OpaqueStippled), the stipple pattern is
tiled in a single plane and acts as an additional clip mask
to be ANDed with the clip-mask.  Any size pixmap can be used
for tiling or stippling, although some sizes may be faster
to use than others.




			     62





X Protocol				    X11, Release 6.4


The fill-style defines the contents of the source for line,
text, and fill requests.  For all text and fill requests
(for example, PolyText8, PolyText16, PolyFillRectangle,
FillPoly, and PolyFillArc) as well as for line requests with
line-style Solid, (for example, PolyLine, PolySegment,
PolyRectangle, PolyArc) and for the even dashes for line
requests with line-style OnOffDash or DoubleDash:

Solid	       Foreground
Tiled	       Tile
OpaqueStip-    A tile with the same width and height as
pled	       stipple but with background everywhere stip-
	       ple has a zero and with foreground everywhere
	       stipple has a one
Stippled       Foreground masked by stipple


For the odd dashes for line requests with line-style Dou-
bleDash:

Solid	       Background
Tiled	       Same as for even dashes
OpaqueStip-    Same as for even dashes
pled
Stippled       Background masked by stipple


The dashes value allowed here is actually a simplified form
of the more general patterns that can be set with SetDashes.
Specifying a value of N here is equivalent to specifying the
two element list [N, N] in SetDashes.  The value must be
nonzero (or a Value error results).  The meaning of dash-
offset and dashes are explained in the SetDashes request.

The clip-mask restricts writes to the destination drawable.
Only pixels where the clip-mask has bits set to 1 are drawn.
Pixels are not drawn outside the area covered by the clip-
mask or where the clip-mask has bits set to 0.	The clip-
mask affects all graphics requests, but it does not clip
sources.  The clip-mask origin is interpreted relative to
the origin of whatever destination drawable is specified in
a graphics request.  If a pixmap is specified as the clip-
mask, it must have depth 1 and have the same root as the
gcontext (or a Match error results).  If clip-mask is None,
then pixels are always drawn, regardless of the clip origin.
The clip-mask can also be set with the SetClipRectangles
request.

For ClipByChildren, both source and destination windows are
additionally clipped by all viewable InputOutput children.
For IncludeInferiors, neither source nor destination window
is clipped by inferiors.  This will result in including sub-
window contents in the source and drawing through subwindow
boundaries of the destination.	The use of IncludeInferiors



			     63





X Protocol				    X11, Release 6.4


with a source or destination window of one depth with mapped
inferiors of differing depth is not illegal, but the seman-
tics is undefined by the core protocol.

The fill-rule defines what pixels are inside (that is, are
drawn) for paths given in FillPoly requests.  EvenOdd means
a point is inside if an infinite ray with the point as ori-
gin crosses the path an odd number of times.  For Winding, a
point is inside if an infinite ray with the point as origin
crosses an unequal number of clockwise and counterclockwise
directed path segments.  A clockwise directed path segment
is one that crosses the ray from left to right as observed
from the point.  A counter-clockwise segment is one that
crosses the ray from right to left as observed from the
point.	The case where a directed line segment is coincident
with the ray is uninteresting because one can simply choose
a different ray that is not coincident with a segment.

For both fill rules, a point is infinitely small and the
path is an infinitely thin line.  A pixel is inside if the
center point of the pixel is inside and the center point is
not on the boundary.  If the center point is on the bound-
ary, the pixel is inside if and only if the polygon interior
is immediately to its right (x increasing direction).  Pix-
els with centers along a horizontal edge are a special case
and are inside if and only if the polygon interior is imme-
diately below (y increasing direction).

The arc-mode controls filling in the PolyFillArc request.

The graphics-exposures flag controls GraphicsExposure event
generation for CopyArea and CopyPlane requests (and any sim-
ilar requests defined by extensions).

The default component values are:

---------------------------------------------------------------
Component	      Default
---------------------------------------------------------------
function	      Copy
plane-mask	      all ones
foreground	      0
background	      1
line-width	      0
line-style	      Solid
cap-style	      Butt
join-style	      Miter
fill-style	      Solid
fill-rule	      EvenOdd
arc-mode	      PieSlice







			     64





X Protocol				    X11, Release 6.4


---------------------------------------------------------------
Component	      Default
---------------------------------------------------------------
tile		      Pixmap of unspecified size filled with
		      foreground pixel
		      (that is, client specified pixel if any,
		      else 0)
		      (subsequent changes to foreground do not
		      affect this pixmap)
stipple 	      Pixmap of unspecified size filled with
		      ones
tile-stipple-x-ori-   0
gin
tile-stipple-y-ori-   0
gin
font		      <server-dependent-font>
subwindow-mode	      ClipByChildren
graphics-exposures    True
clip-x-origin	      0
clip-y-origin	      0
clip-mask	      None
dash-offset	      0
dashes		      4 (that is, the list [4, 4])
---------------------------------------------------------------


Storing a pixmap in a gcontext might or might not result in
a copy being made.  If the pixmap is later used as the des-
tination for a graphics request, the change might or might
not be reflected in the gcontext.  If the pixmap is used
simultaneously in a graphics request as both a destination
and as a tile or stipple, the results are not defined.

It is quite likely that some amount of gcontext information
will be cached in display hardware and that such hardware
can only cache a small number of gcontexts.  Given the num-
ber and complexity of components, clients should view
switching between gcontexts with nearly identical state as
significantly more expensive than making minor changes to a
single gcontext.


__
|    ChangeGC

  gc: GCONTEXT
  value-mask: BITMASK
  value-list: LISTofVALUE

|__    Errors: Alloc, Font, GContext, Match, Pixmap, Value


This request changes components in gc.	The value-mask and
value-list specify which components are to be changed.	The



			     65





X Protocol				    X11, Release 6.4


values and restrictions are the same as for CreateGC.

Changing the clip-mask also overrides any previous Set-
ClipRectangles request on the context.	Changing dash-offset
or dashes overrides any previous SetDashes request on the
context.

The order in which components are verified and altered is
server-dependent.  If an error is generated, a subset of the
components may have been altered.


__
|    CopyGC

  src-gc, dst-gc: GCONTEXT
  value-mask: BITMASK

|__    Errors: Alloc, GContext, Match, Value


This request copies components from src-gc to dst-gc.  The
value-mask specifies which components to copy, as for Cre-
ateGC.	The two gcontexts must have the same root and the
same depth (or a Match error results).


__
|    SetDashes

  gc: GCONTEXT
  dash-offset: CARD16
  dashes: LISTofCARD8

|__    Errors: Alloc, GContext, Value


This request sets dash-offset and dashes in gc for dashed
line styles.  Dashes cannot be empty (or a Value error
results).  Specifying an odd-length list is equivalent to
specifying the same list concatenated with itself to produce
an even-length list.  The initial and alternating elements
of dashes are the even dashes; the others are the odd
dashes.  Each element specifies a dash length in pixels.
All of the elements must be nonzero (or a Value error
results).  The dash-offset defines the phase of the pattern,
specifying how many pixels into dashes the pattern should
actually begin in any single graphics request.	Dashing is
continuous through path elements combined with a join-style
but is reset to the dash-offset between each sequence of
joined lines.

The unit of measure for dashes is the same as in the ordi-
nary coordinate system.  Ideally, a dash length is measured



			     66





X Protocol				    X11, Release 6.4


along the slope of the line, but implementations are only
required to match this ideal for horizontal and vertical
lines.	Failing the ideal semantics, it is suggested that
the length be measured along the major axis of the line.
The major axis is defined as the x axis for lines drawn at
an angle of between -45 and +45 degrees or between 135 and
225 degrees from the x axis.  For all other lines, the major
axis is the y axis.

For any graphics primitive, the computation of the endpoint
of an individual dash only depends on the geometry of the
primitive, the start position of the dash, the direction of
the dash, and the dash length.

For any graphics primitive, the total set of pixels used to
render the primitive (both even and odd numbered dash ele-
ments) with DoubleDash line-style is the same as the set of
pixels used to render the primitive with Solid line-style.

For any graphics primitive, if the primitive is drawn with
OnOffDash or DoubleDash line-style unclipped at position
[x,y] and again at position [x+dx,y+dy], then a point
[x1,y1] is included in a dash in the first instance if and
only if the point [x1+dx,y1+dy] is included in the dash in
the second instance.  In addition, the effective set of
points comprising a dash cannot be affected by clipping.  A
point is included in a clipped dash if and only if the point
lies inside the clipping region and the point would be
included in the dash when drawn unclipped.


__
|    SetClipRectangles

  gc: GCONTEXT
  clip-x-origin, clip-y-origin: INT16
  rectangles: LISTofRECTANGLE
  ordering: {UnSorted, YSorted, YXSorted, YXBanded}

|__    Errors: Alloc, GContext, Match, Value


This request changes clip-mask in gc to the specified list
of rectangles and sets the clip origin.  Output will be
clipped to remain contained within the rectangles.  The clip
origin is interpreted relative to the origin of whatever
destination drawable is specified in a graphics request.
The rectangle coordinates are interpreted relative to the
clip origin.  The rectangles should be nonintersecting, or
graphics results will be undefined.  Note that the list of
rectangles can be empty, which effectively disables output.
This is the opposite of passing None as the clip-mask in
CreateGC and ChangeGC.




			     67





X Protocol				    X11, Release 6.4


If known by the client, ordering relations on the rectangles
can be specified with the ordering argument.  This may pro-
vide faster operation by the server.  If an incorrect order-
ing is specified, the server may generate a Match error, but
it is not required to do so.  If no error is generated, the
graphics results are undefined.  UnSorted means that the
rectangles are in arbitrary order.  YSorted means that the
rectangles are nondecreasing in their Y origin.  YXSorted
additionally constrains YSorted order in that all rectangles
with an equal Y origin are nondecreasing in their X origin.
YXBanded additionally constrains YXSorted by requiring that,
for every possible Y scanline, all rectangles that include
that scanline have identical Y origins and Y extents.


__
|    FreeGC

  gc: GCONTEXT

|__    Errors: GContext


This request deletes the association between the resource ID
and the gcontext and destroys the gcontext.


__
|    ClearArea

  window: WINDOW
  x, y: INT16
  width, height: CARD16
  exposures: BOOL

|__    Errors: Match, Value, Window


The x and y coordinates are relative to the window's origin
and specify the upper-left corner of the rectangle.  If
width is zero, it is replaced with the current width of the
window minus x.  If height is zero, it is replaced with the
current height of the window minus y.  If the window has a
defined background tile, the rectangle is tiled with a
plane-mask of all ones and function of Copy and a subwindow-
mode of ClipByChildren.  If the window has background None,
the contents of the window are not changed.  In either case,
if exposures is True, then one or more exposure events are
generated for regions of the rectangle that are either visi-
ble or are being retained in a backing store.

It is a Match error to use an InputOnly window in this
request.




			     68





X Protocol				    X11, Release 6.4

__
|    CopyArea

  src-drawable, dst-drawable: DRAWABLE
  gc: GCONTEXT
  src-x, src-y: INT16
  width, height: CARD16
  dst-x, dst-y: INT16

|__    Errors: Drawable, GContext, Match


This request combines the specified rectangle of src-draw-
able with the specified rectangle of dst-drawable.  The src-
x and src-y coordinates are relative to src-drawable's ori-
gin.  The dst-x and dst-y are relative to dst-drawable's
origin, each pair specifying the upper-left corner of the
rectangle.  The src-drawable must have the same root and the
same depth as dst-drawable (or a Match error results).

If regions of the source rectangle are obscured and have not
been retained in backing store or if regions outside the
boundaries of the source drawable are specified, then those
regions are not copied, but the following occurs on all cor-
responding destination regions that are either visible or
are retained in backing-store.	If the dst-drawable is a
window with a background other than None, these correspond-
ing destination regions are tiled (with plane-mask of all
ones and function Copy) with that background.  Regardless of
tiling and whether the destination is a window or a pixmap,
if graphics-exposures in gc is True, then GraphicsExposure
events for all corresponding destination regions are gener-
ated.

If graphics-exposures is True but no GraphicsExposure events
are generated, then a NoExposure event is generated.

GC components: function, plane-mask, subwindow-mode, graph-
ics-exposures, clip-x-origin, clip-y-origin, clip-mask


__
|    CopyPlane

  src-drawable, dst-drawable: DRAWABLE
  gc: GCONTEXT
  src-x, src-y: INT16
  width, height: CARD16
  dst-x, dst-y: INT16
  bit-plane: CARD32

|__    Errors: Drawable, GContext, Match, Value






			     69





X Protocol				    X11, Release 6.4


The src-drawable must have the same root as dst-drawable (or
a Match error results), but it need not have the same depth.
The bit-plane must have exactly one bit set to 1 and the
value of bit-plane must be less than 2n where n is the depth
of src-drawable (or a Value error results).  Effectively, a
pixmap of the same depth as dst-drawable and with size spec-
ified by the source region is formed using the fore-
ground/background pixels in gc (foreground everywhere the
bit-plane in src-drawable contains a bit set to 1, back-
ground everywhere the bit-plane contains a bit set to 0),
and the equivalent of a CopyArea is performed, with all the
same exposure semantics.  This can also be thought of as
using the specified region of the source bit-plane as a
stipple with a fill-style of OpaqueStippled for filling a
rectangular area of the destination.

GC components: function, plane-mask, foreground, background,
subwindow-mode, graphics-exposures, clip-x-origin, clip-y-
origin, clip-mask


__
|    PolyPoint

  drawable: DRAWABLE
  gc: GCONTEXT
  coordinate-mode: {Origin, Previous}
  points: LISTofPOINT

|__    Errors: Drawable, GContext, Match, Value


This request combines the foreground pixel in gc with the
pixel at each point in the drawable.  The points are drawn
in the order listed.

The first point is always relative to the drawable's origin.
The rest are relative either to that origin or the previous
point, depending on the coordinate-mode.

GC components: function, plane-mask, foreground, subwindow-
mode, clip-x-origin, clip-y-origin, clip-mask















			     70





X Protocol				    X11, Release 6.4

__
|    PolyLine

  drawable: DRAWABLE
  gc: GCONTEXT
  coordinate-mode: {Origin, Previous}
  points: LISTofPOINT

|__    Errors: Drawable, GContext, Match, Value


This request draws lines between each pair of points
(point[i], point[i+1]).  The lines are drawn in the order
listed.  The lines join correctly at all intermediate
points, and if the first and last points coincide, the first
and last lines also join correctly.

For any given line, no pixel is drawn more than once.  If
thin (zero line-width) lines intersect, the intersecting
pixels are drawn multiple times.  If wide lines intersect,
the intersecting pixels are drawn only once, as though the
entire PolyLine were a single filled shape.

The first point is always relative to the drawable's origin.
The rest are relative either to that origin or the previous
point, depending on the coordinate-mode.

When either of the two lines involved in a Bevel join is
neither vertical nor horizontal, then the slope and position
of the line segment defining the bevel join edge is imple-
mentation dependent.  However, the computation of the slope
and distance (relative to the join point) only depends on
the line width and the slopes of the two lines.

GC components: function, plane-mask, line-width, line-style,
cap-style, join-style, fill-style, subwindow-mode, clip-x-
origin, clip-y-origin, clip-mask

GC mode-dependent components: foreground, background, tile,
stipple, tile-stipple-x-origin, tile-stipple-y-origin, dash-
offset, dashes

















			     71





X Protocol				    X11, Release 6.4

__
|    PolySegment

  drawable: DRAWABLE
  gc: GCONTEXT
  segments: LISTofSEGMENT

  where:

  SEGMENT: [x1, y1, x2, y2: INT16]

|__    Errors: Drawable, GContext, Match


For each segment, this request draws a line between [x1, y1]
and [x2, y2].  The lines are drawn in the order listed.  No
joining is performed at coincident endpoints.  For any given
line, no pixel is drawn more than once.  If lines intersect,
the intersecting pixels are drawn multiple times.

GC components: function, plane-mask, line-width, line-style,
cap-style, fill-style, subwindow-mode, clip-x-origin, clip-
y-origin, clip-mask

GC mode-dependent components: foreground, background, tile,
stipple, tile-stipple-x-origin, tile-stipple-y-origin, dash-
offset, dashes


__
|    PolyRectangle

  drawable: DRAWABLE
  gc: GCONTEXT
  rectangles: LISTofRECTANGLE

|__    Errors: Drawable, GContext, Match


This request draws the outlines of the specified rectangles,
as if a five-point PolyLine were specified for each rectan-
gle:


     [x,y] [x+width,y] [x+width,y+height] [x,y+height] [x,y]


The x and y coordinates of each rectangle are relative to
the drawable's origin and define the upper-left corner of
the rectangle.

The rectangles are drawn in the order listed.  For any given
rectangle, no pixel is drawn more than once.  If rectangles
intersect, the intersecting pixels are drawn multiple times.




			     72





X Protocol				    X11, Release 6.4


GC components: function, plane-mask, line-width, line-style,
cap-style, join-style, fill-style, subwindow-mode, clip-x-
origin, clip-y-origin, clip-mask

GC mode-dependent components: foreground, background, tile,
stipple, tile-stipple-x-origin, tile-stipple-y-origin, dash-
offset, dashes


__
|    PolyArc

  drawable: DRAWABLE
  gc: GCONTEXT
  arcs: LISTofARC

|__    Errors: Drawable, GContext, Match


This request draws circular or elliptical arcs.  Each arc is
specified by a rectangle and two angles.  The angles are
signed integers in degrees scaled by 64, with positive indi-
cating counterclockwise motion and negative indicating
clockwise motion.  The start of the arc is specified by
angle1 relative to the three-o'clock position from the cen-
ter of the rectangle, and the path and extent of the arc is
specified by angle2 relative to the start of the arc.  If
the magnitude of angle2 is greater than 360 degrees, it is
truncated to 360 degrees.  The x and y coordinates of the
rectangle are relative to the origin of the drawable.  For
an arc specified as [x,y,w,h,a1,a2], the origin of the major
and minor axes is at [x+(w/2),y+(h/2)], and the infinitely
thin path describing the entire circle/ellipse intersects
the horizontal axis at [x,y+(h/2)] and [x+w,y+(h/2)] and
intersects the vertical axis at [x+(w/2),y] and
[x+(w/2),y+h].	These coordinates are not necessarily inte-
gral; that is, they are not truncated to discrete coordi-
nates.

For a wide line with line-width lw, the ideal bounding out-
lines for filling are given by the two infinitely thin paths
consisting of all points whose perpendicular distance from a
tangent to the path of the circle/ellipse is equal to lw/2
(which may be a fractional value).  When the width and
height of the arc are not equal and both are nonzero, then
the actual bounding outlines are implementation dependent.
However, the computation of the shape and position of the
bounding outlines (relative to the center of the arc) only
depends on the width and height of the arc and the line-
width.

The cap-style is applied the same as for a line correspond-
ing to the tangent of the circle/ellipse at the endpoint.
When the angle of an arc face is not an integral multiple of



			     73





X Protocol				    X11, Release 6.4


90 degrees, and the width and height of the arc are both are
nonzero, then the shape and position of the cap at that face
is implementation dependent.  However, for a Butt cap, the
face is defined by a straight line, and the computation of
the position (relative to the center of the arc) and the
slope of the line only depends on the width and height of
the arc and the angle of the arc face.	For other cap
styles, the computation of the position (relative to the
center of the arc) and the shape of the cap only depends on
the width and height of the arc, the line-width, the angle
of the arc face, and the direction (clockwise or counter
clockwise) of the arc from the endpoint.

The join-style is applied the same as for two lines corre-
sponding to the tangents of the circles/ellipses at the join
point.	When the width and height of both arcs are nonzero,
and the angle of either arc face is not an integral multiple
of 90 degrees, then the shape of the join is implementation
dependent.  However, the computation of the shape only
depends on the width and height of each arc, the line-width,
the angles of the two arc faces, the direction (clockwise or
counter clockwise) of the arcs from the join point, and the
relative orientation of the two arc center points.

For an arc specified as [x,y,w,h,a1,a2], the angles must be
specified in the effectively skewed coordinate system of the
ellipse (for a circle, the angles and coordinate systems are
identical).  The relationship between these angles and
angles expressed in the normal coordinate system of the
screen (as measured with a protractor) is as follows:

     skewed-angle = atan(tan(normal-angle) * w/h) + adjust


The skewed-angle and normal-angle are expressed in radians
(rather than in degrees scaled by 64) in the range [0,2*PI).
The atan returns a value in the range [-PI/2,PI/2].  The
adjust is:

     0	    for normal-angle in the range [0,PI/2)
     PI     for normal-angle in the range [PI/2,(3*PI)/2)
     2*PI   for normal-angle in the range [(3*PI)/2,2*PI)


The arcs are drawn in the order listed.  If the last point
in one arc coincides with the first point in the following
arc, the two arcs will join correctly.	If the first point
in the first arc coincides with the last point in the last
arc, the two arcs will join correctly.	For any given arc,
no pixel is drawn more than once.  If two arcs join cor-
rectly and the line-width is greater than zero and the arcs
intersect, no pixel is drawn more than once.  Otherwise, the
intersecting pixels of intersecting arcs are drawn multiple
times.	Specifying an arc with one endpoint and a clockwise



			     74





X Protocol				    X11, Release 6.4


extent draws the same pixels as specifying the other end-
point and an equivalent counterclockwise extent, except as
it affects joins.

By specifying one axis to be zero, a horizontal or vertical
line can be drawn.

Angles are computed based solely on the coordinate system,
ignoring the aspect ratio.

GC components: function, plane-mask, line-width, line-style,
cap-style, join-style, fill-style, subwindow-mode, clip-x-
origin, clip-y-origin, clip-mask

GC mode-dependent components: foreground, background, tile,
stipple, tile-stipple-x-origin, tile-stipple-y-origin, dash-
offset, dashes


__
|    FillPoly

  drawable: DRAWABLE
  gc: GCONTEXT
  shape: {Complex, Nonconvex, Convex}
  coordinate-mode: {Origin, Previous}
  points: LISTofPOINT

|__    Errors: Drawable, GContext, Match, Value


This request fills the region closed by the specified path.
The path is closed automatically if the last point in the
list does not coincide with the first point.  No pixel of
the region is drawn more than once.

The first point is always relative to the drawable's origin.
The rest are relative either to that origin or the previous
point, depending on the coordinate-mode.

The shape parameter may be used by the server to improve
performance.  Complex means the path may self-intersect.
Contiguous coincident points in the path are not treated as
self-intersection.

Nonconvex means the path does not self-intersect, but the
shape is not wholly convex.  If known by the client, speci-
fying Nonconvex over Complex may improve performance.  If
Nonconvex is specified for a self-intersecting path, the
graphics results are undefined.

Convex means that for every pair of points inside the poly-
gon, the line segment connecting them does not intersect the
path.  If known by the client, specifying Convex can improve



			     75





X Protocol				    X11, Release 6.4


performance.  If Convex is specified for a path that is not
convex, the graphics results are undefined.

GC components: function, plane-mask, fill-style, fill-rule,
subwindow-mode, clip-x-origin, clip-y-origin, clip-mask

GC mode-dependent components: foreground, background, tile,
stipple, tile-stipple-x-origin, tile-stipple-y-origin


__
|    PolyFillRectangle

  drawable: DRAWABLE
  gc: GCONTEXT
  rectangles: LISTofRECTANGLE

|__    Errors: Drawable, GContext, Match


This request fills the specified rectangles, as if a four-
point FillPoly were specified for each rectangle:

     [x,y] [x+width,y] [x+width,y+height] [x,y+height]


The x and y coordinates of each rectangle are relative to
the drawable's origin and define the upper-left corner of
the rectangle.

The rectangles are drawn in the order listed.  For any given
rectangle, no pixel is drawn more than once.  If rectangles
intersect, the intersecting pixels are drawn multiple times.

GC components: function, plane-mask, fill-style, subwindow-
mode, clip-x-origin, clip-y-origin, clip-mask

GC mode-dependent components: foreground, background, tile,
stipple, tile-stipple-x-origin, tile-stipple-y-origin


__
|    PolyFillArc

  drawable: DRAWABLE
  gc: GCONTEXT
  arcs: LISTofARC

|__    Errors: Drawable, GContext, Match


For each arc, this request fills the region closed by the
infinitely thin path described by the specified arc and one
or two line segments, depending on the arc-mode.  For Chord,



			     76





X Protocol				    X11, Release 6.4


the single line segment joining the endpoints of the arc is
used.  For PieSlice, the two line segments joining the end-
points of the arc with the center point are used.

For an arc specified as [x,y,w,h,a1,a2], the origin of the
major and minor axes is at [x+(w/2),y+(h/2)], and the infin-
itely thin path describing the entire circle/ellipse inter-
sects the horizontal axis at [x,y+(h/2)] and [x+w,y+(h/2)]
and intersects the vertical axis at [x+(w/2),y] and
[x+(w/2),y+h].	These coordinates are not necessarily inte-
gral; that is, they are not truncated to discrete coordi-
nates.

The arc angles are interpreted as specified in the PolyArc
request.  When the angle of an arc face is not an integral
multiple of 90 degrees, then the precise endpoint on the arc
is implementation dependent.  However, for Chord arc-mode,
the computation of the pair of endpoints (relative to the
center of the arc) only depends on the width and height of
the arc and the angles of the two arc faces.  For PieSlice
arc-mode, the computation of an endpoint only depends on the
angle of the arc face for that endpoint and the ratio of the
arc width to arc height.

The arcs are filled in the order listed.  For any given arc,
no pixel is drawn more than once.  If regions intersect, the
intersecting pixels are drawn multiple times.

GC components: function, plane-mask, fill-style, arc-mode,
subwindow-mode, clip-x-origin, clip-y-origin, clip-mask

GC mode-dependent components: foreground, background, tile,
stipple, tile-stipple-x-origin, tile-stipple-y-origin


__
|    PutImage

  drawable: DRAWABLE
  gc: GCONTEXT
  depth: CARD8
  width, height: CARD16
  dst-x, dst-y: INT16
  left-pad: CARD8
  format: {Bitmap, XYPixmap, ZPixmap}
  data: LISTofBYTE

|__    Errors: Drawable, GContext, Match, Value


This request combines an image with a rectangle of the draw-
able.  The dst-x and dst-y coordinates are relative to the
drawable's origin.




			     77





X Protocol				    X11, Release 6.4


If Bitmap format is used, then depth must be one (or a Match
error results), and the image must be in XY format.  The
foreground pixel in gc defines the source for bits set to 1
in the image, and the background pixel defines the source
for the bits set to 0.

For XYPixmap and ZPixmap, the depth must match the depth of
the drawable (or a Match error results).  For XYPixmap, the
image must be sent in XY format.  For ZPixmap, the image
must be sent in the Z format defined for the given depth.

The left-pad must be zero for ZPixmap format (or a Match
error results).  For Bitmap and XYPixmap format, left-pad
must be less than bitmap-scanline-pad as given in the server
connection setup information (or a Match error results).
The first left-pad bits in every scanline are to be ignored
by the server.	The actual image begins that many bits into
the data.  The width argument defines the width of the
actual image and does not include left-pad.

GC components: function, plane-mask, subwindow-mode, clip-x-
origin, clip-y-origin, clip-mask

GC mode-dependent components: foreground, background


__
|    GetImage

  drawable: DRAWABLE
  x, y: INT16
  width, height: CARD16
  plane-mask: CARD32
  format: {XYPixmap, ZPixmap}

   ->

  depth: CARD8
  visual: VISUALID or None
  data: LISTofBYTE

|__    Errors: Drawable, Match, Value


This request returns the contents of the given rectangle of
the drawable in the given format.  The x and y coordinates
are relative to the drawable's origin and define the upper-
left corner of the rectangle.  If XYPixmap is specified,
only the bit planes specified in plane-mask are transmitted,
with the planes appearing from most significant to least
significant in bit order.  If ZPixmap is specified, then
bits in all planes not specified in plane-mask are transmit-
ted as zero.  Range checking is not performed on plane-mask;
extraneous bits are simply ignored.  The returned depth is



			     78





X Protocol				    X11, Release 6.4


as specified when the drawable was created and is the same
as a depth component in a FORMAT structure (in the connec-
tion setup), not a bits-per-pixel component.  If the draw-
able is a window, its visual type is returned.	If the draw-
able is a pixmap, the visual is None.

If the drawable is a pixmap, then the given rectangle must
be wholly contained within the pixmap (or a Match error
results).  If the drawable is a window, the window must be
viewable, and it must be the case that, if there were no
inferiors or overlapping windows, the specified rectangle of
the window would be fully visible on the screen and wholly
contained within the outside edges of the window (or a Match
error results).  Note that the borders of the window can be
included and read with this request.  If the window has a
backing store, then the backing-store contents are returned
for regions of the window that are obscured by noninferior
windows; otherwise, the returned contents of such obscured
regions are undefined.	Also undefined are the returned con-
tents of visible regions of inferiors of different depth
than the specified window.  The pointer cursor image is not
included in the contents returned.

This request is not general-purpose in the same sense as
other graphics-related requests.  It is intended specifi-
cally for rudimentary hardcopy support.


__
|    PolyText8

  drawable: DRAWABLE
  gc: GCONTEXT
  x, y: INT16
  items: LISTofTEXTITEM8

  where:

  TEXTITEM8:   TEXTELT8 or FONT
   TEXTELT8:   [delta: INT8
		string: STRING8]


|__    Errors: Drawable, Font, GContext, Match


The x and y coordinates are relative to the drawable's ori-
gin and specify the baseline starting position (the initial
character origin).  Each text item is processed in turn.  A
font item causes the font to be stored in gc and to be used
for subsequent text.  Switching among fonts does not affect
the next character origin.  A text element delta specifies
an additional change in the position along the x axis before
the string is drawn; the delta is always added to the



			     79





X Protocol				    X11, Release 6.4


character origin.  Each character image, as defined by the
font in gc, is treated as an additional mask for a fill
operation on the drawable.

All contained FONTs are always transmitted most significant
byte first.

If a Font error is generated for an item, the previous items
may have been drawn.

For fonts defined with 2-byte matrix indexing, each STRING8
byte is interpreted as a byte2 value of a CHAR2B with a
byte1 value of zero.

GC components: function, plane-mask, fill-style, font, sub-
window-mode, clip-x-origin, clip-y-origin, clip-mask

GC mode-dependent components: foreground, background, tile,
stipple, tile-stipple-x-origin, tile-stipple-y-origin


__
|    PolyText16

  drawable: DRAWABLE
  gc: GCONTEXT
  x, y: INT16
  items: LISTofTEXTITEM16

  where:

  TEXTITEM16:	TEXTELT16 or FONT
   TEXTELT16:	[delta: INT8
		 string: STRING16]


|__    Errors: Drawable, Font, GContext, Match


This request is similar to PolyText8, except 2-byte (or
16-bit) characters are used.  For fonts defined with linear
indexing rather than 2-byte matrix indexing, the server will
interpret each CHAR2B as a 16-bit number that has been
transmitted most significant byte first (that is, byte1 of
the CHAR2B is taken as the most significant byte).












			     80





X Protocol				    X11, Release 6.4

__
|    ImageText8

  drawable: DRAWABLE
  gc: GCONTEXT
  x, y: INT16
  string: STRING8

|__    Errors: Drawable, GContext, Match


The x and y coordinates are relative to the drawable's ori-
gin and specify the baseline starting position (the initial
character origin).  The effect is first to fill a destina-
tion rectangle with the background pixel defined in gc and
then to paint the text with the foreground pixel.  The
upper-left corner of the filled rectangle is at:

     [x, y - font-ascent]


the width is:

     overall-width


and the height is:

     font-ascent + font-descent


The overall-width, font-ascent, and font-descent are as they
would be returned by a QueryTextExtents call using gc and
string.

The function and fill-style defined in gc are ignored for
this request.  The effective function is Copy, and the
effective fill-style Solid.

For fonts defined with 2-byte matrix indexing, each STRING8
byte is interpreted as a byte2 value of a CHAR2B with a
byte1 value of zero.

GC components: plane-mask, foreground, background, font,
subwindow-mode, clip-x-origin, clip-y-origin, clip-mask













			     81





X Protocol				    X11, Release 6.4

__
|    ImageText16

  drawable: DRAWABLE
  gc: GCONTEXT
  x, y: INT16
  string: STRING16

|__    Errors: Drawable, GContext, Match


This request is similar to ImageText8, except 2-byte (or
16-bit) characters are used.  For fonts defined with linear
indexing rather than 2-byte matrix indexing, the server will
interpret each CHAR2B as a 16-bit number that has been
transmitted most significant byte first (that is, byte1 of
the CHAR2B is taken as the most significant byte).


__
|    CreateColormap

  mid: COLORMAP
  visual: VISUALID
  window: WINDOW
  alloc: {None, All}

|__    Errors: Alloc, IDChoice, Match, Value, Window


This request creates a colormap of the specified visual type
for the screen on which the window resides and associates
the identifier mid with it.  The visual type must be one
supported by the screen (or a Match error results).  The
initial values of the colormap entries are undefined for
classes GrayScale, PseudoColor, and DirectColor.  For Stat-
icGray, StaticColor, and TrueColor, the entries will have
defined values, but those values are specific to the visual
and are not defined by the core protocol.  For StaticGray,
StaticColor, and TrueColor, alloc must be specified as None
(or a Match error results).  For the other classes, if alloc
is None, the colormap initially has no allocated entries,
and clients can allocate entries.

If alloc is All, then the entire colormap is allocated
writable.  The initial values of all allocated entries are
undefined.  For GrayScale and PseudoColor, the effect is as
if an AllocColorCells request returned all pixel values from
zero to N - 1, where N is the colormap-entries value in the
specified visual.  For DirectColor, the effect is as if an
AllocColorPlanes request returned a pixel value of zero and
red-mask, green-mask, and blue-mask values containing the
same bits as the corresponding masks in the specified
visual.  However, in all cases, none of these entries can be
freed with FreeColors.



			     82





X Protocol				    X11, Release 6.4

__
|    FreeColormap

  cmap: COLORMAP

|__    Errors: Colormap


This request deletes the association between the resource ID
and the colormap and frees the colormap storage.  If the
colormap is an installed map for a screen, it is uninstalled
(see UninstallColormap request).  If the colormap is defined
as the colormap for a window (by means of CreateWindow or
ChangeWindowAttributes), the colormap for the window is
changed to None, and a ColormapNotify event is generated.
The protocol does not define the colors displayed for a win-
dow with a colormap of None.

This request has no effect on a default colormap for a
screen.


__
|    CopyColormapAndFree

  mid, src-cmap: COLORMAP

|__    Errors: Alloc, Colormap, IDChoice


This request creates a colormap of the same visual type and
for the same screen as src-cmap, and it associates identi-
fier mid with it.  It also moves all of the client's exist-
ing allocations from src-cmap to the new colormap with their
color values intact and their read-only or writable charac-
teristics intact, and it frees those entries in src-cmap.
Color values in other entries in the new colormap are unde-
fined.	If src-cmap was created by the client with alloc All
(see CreateColormap request), then the new colormap is also
created with alloc All, all color values for all entries are
copied from src-cmap, and then all entries in src-cmap are
freed.	If src-cmap was not created by the client with alloc
All, then the allocations to be moved are all those pixels
and planes that have been allocated by the client using
either AllocColor, AllocNamedColor, AllocColorCells, or
AllocColorPlanes and that have not been freed since they
were allocated.











			     83





X Protocol				    X11, Release 6.4

__
|    InstallColormap

  cmap: COLORMAP

|__    Errors: Colormap


This request makes this colormap an installed map for its
screen.  All windows associated with this colormap immedi-
ately display with true colors.  As a side effect, addi-
tional colormaps might be implicitly installed or unin-
stalled by the server.	Which other colormaps get installed
or uninstalled is server-dependent except that the required
list must remain installed.

If cmap is not already an installed map, a ColormapNotify
event is generated on every window having cmap as an
attribute.  In addition, for every other colormap that is
installed or uninstalled as a result of the request, a Col-
ormapNotify event is generated on every window having that
colormap as an attribute.

At any time, there is a subset of the installed maps that
are viewed as an ordered list and are called the required
list.  The length of the required list is at most M, where M
is the min-installed-maps specified for the screen in the
connection setup.  The required list is maintained as fol-
lows.  When a colormap is an explicit argument to Install-
Colormap, it is added to the head of the list; the list is
truncated at the tail, if necessary, to keep the length of
the list to at most M.	When a colormap is an explicit argu-
ment to UninstallColormap and it is in the required list, it
is removed from the list.  A colormap is not added to the
required list when it is installed implicitly by the server,
and the server cannot implicitly uninstall a colormap that
is in the required list.

Initially the default colormap for a screen is installed
(but is not in the required list).


__
|    UninstallColormap

  cmap: COLORMAP

|__    Errors: Colormap


If cmap is on the required list for its screen (see Install-
Colormap request), it is removed from the list.  As a side
effect, cmap might be uninstalled, and additional colormaps
might be implicitly installed or uninstalled.  Which col-
ormaps get installed or uninstalled is server-dependent



			     84





X Protocol				    X11, Release 6.4


except that the required list must remain installed.

If cmap becomes uninstalled, a ColormapNotify event is gen-
erated on every window having cmap as an attribute.  In
addition, for every other colormap that is installed or
uninstalled as a result of the request, a ColormapNotify
event is generated on every window having that colormap as
an attribute.


__
|    ListInstalledColormaps

  window: WINDOW

   ->

  cmaps: LISTofCOLORMAP

|__    Errors: Window


This request returns a list of the currently installed col-
ormaps for the screen of the specified window.	The order of
colormaps is not significant, and there is no explicit indi-
cation of the required list (see InstallColormap request).


__
|    AllocColor

  cmap: COLORMAP
  red, green, blue: CARD16

   ->

  pixel: CARD32
  red, green, blue: CARD16

|__    Errors: Alloc, Colormap


This request allocates a read-only colormap entry corre-
sponding to the closest RGB values provided by the hardware.
It also returns the pixel and the RGB values actually used.
Multiple clients requesting the same effective RGB values
can be assigned the same read-only entry, allowing entries
to be shared.









			     85





X Protocol				    X11, Release 6.4

__
|    AllocNamedColor

  cmap: COLORMAP
  name: STRING8

   ->

  pixel: CARD32
  exact-red, exact-green, exact-blue: CARD16
  visual-red, visual-green, visual-blue: CARD16

|__    Errors: Alloc, Colormap, Name


This request looks up the named color with respect to the
screen associated with the colormap.  Then, it does an
AllocColor on cmap.  The name should use the ISO Latin-1
encoding, and uppercase and lowercase do not matter.  The
exact RGB values specify the true values for the color, and
the visual values specify the values actually used in the
colormap.


__
|    AllocColorCells

  cmap: COLORMAP
  colors, planes: CARD16
  contiguous: BOOL

   ->

  pixels, masks: LISTofCARD32

|__    Errors: Alloc, Colormap, Value


The number of colors must be positive, and the number of
planes must be nonnegative (or a Value error results).	If C
colors and P planes are requested, then C pixels and P masks
are returned.  No mask will have any bits in common with any
other mask or with any of the pixels.  By ORing together
masks and pixels, C*2P distinct pixels can be produced; all
of these are allocated writable by the request.  For
GrayScale or PseudoColor, each mask will have exactly one
bit set to 1; for DirectColor, each will have exactly three
bits set to 1.	If contiguous is True and if all masks are
ORed together, a single contiguous set of bits will be
formed for GrayScale or PseudoColor, and three contiguous
sets of bits (one within each pixel subfield) for Direct-
Color.	The RGB values of the allocated entries are unde-
fined.





			     86





X Protocol				    X11, Release 6.4

__
|    AllocColorPlanes

  cmap: COLORMAP
  colors, reds, greens, blues: CARD16
  contiguous: BOOL

   ->

  pixels: LISTofCARD32
  red-mask, green-mask, blue-mask: CARD32

|__    Errors: Alloc, Colormap, Value


The number of colors must be positive, and the reds, greens,
and blues must be nonnegative (or a Value error results).
If C colors, R reds, G greens, and B blues are requested,
then C pixels are returned, and the masks have R, G, and B
bits set, respectively.  If contiguous is True, then each
mask will have a contiguous set of bits.  No mask will have
any bits in common with any other mask or with any of the
pixels.  For DirectColor, each mask will lie within the cor-
responding pixel subfield.  By ORing together subsets of
masks with pixels, C*2R+G+B distinct pixels can be produced;
all of these are allocated writable by the request.  The
initial RGB values of the allocated entries are undefined.
In the colormap, there are only C*2R independent red
entries, C*2G independent green entries, and C*2B indepen-
dent blue entries.  This is true even for PseudoColor.	When
the colormap entry for a pixel value is changed using Store-
Colors or StoreNamedColor, the pixel is decomposed according
to the masks and the corresponding independent entries are
updated.


__
|    FreeColors

  cmap: COLORMAP
  pixels: LISTofCARD32
  plane-mask: CARD32

|__    Errors: Access, Colormap, Value


The plane-mask should not have any bits in common with any
of the pixels.	The set of all pixels is produced by ORing
together subsets of plane-mask with the pixels.  The request
frees all of these pixels that were allocated by the client
(using AllocColor, AllocNamedColor, AllocColorCells, and
AllocColorPlanes).  Note that freeing an individual pixel
obtained from AllocColorPlanes may not actually allow it to
be reused until all of its related pixels are also freed.
Similarly, a read-only entry is not actually freed until it



			     87





X Protocol				    X11, Release 6.4


has been freed by all clients, and if a client allocates the
same read-only entry multiple times, it must free the entry
that many times before the entry is actually freed.

All specified pixels that are allocated by the client in
cmap are freed, even if one or more pixels produce an error.
A Value error is generated if a specified pixel is not a
valid index into cmap.	An Access error is generated if a
specified pixel is not allocated by the client (that is, is
unallocated or is only allocated by another client) or if
the colormap was created with all entries writable (using an
alloc value of All in CreateColormap).	If more than one
pixel is in error, it is arbitrary as to which pixel is
reported.


__
|    StoreColors

  cmap: COLORMAP
  items: LISTofCOLORITEM

  where:

  COLORITEM:   [pixel: CARD32
		do-red, do-green, do-blue: BOOL
		red, green, blue: CARD16]


|__    Errors: Access, Colormap, Value


This request changes the colormap entries of the specified
pixels.  The do-red, do-green, and do-blue fields indicate
which components should actually be changed.  If the col-
ormap is an installed map for its screen, the changes are
visible immediately.

All specified pixels that are allocated writable in cmap (by
any client) are changed, even if one or more pixels produce
an error.  A Value error is generated if a specified pixel
is not a valid index into cmap, and an Access error is gen-
erated if a specified pixel is unallocated or is allocated
read-only.  If more than one pixel is in error, it is arbi-
trary as to which pixel is reported.












			     88





X Protocol				    X11, Release 6.4

__
|    StoreNamedColor

  cmap: COLORMAP
  pixel: CARD32
  name: STRING8
  do-red, do-green, do-blue: BOOL

|__    Errors: Access, Colormap, Name, Value


This request looks up the named color with respect to the
screen associated with cmap and then does a StoreColors in
cmap.  The name should use the ISO Latin-1 encoding, and
uppercase and lowercase do not matter.	The Access and Value
errors are the same as in StoreColors.


__
|    QueryColors

  cmap: COLORMAP
  pixels: LISTofCARD32

   ->

  colors: LISTofRGB

  where:

  RGB: [red, green, blue: CARD16]

|__    Errors: Colormap, Value


This request returns the hardware-specific color values
stored in cmap for the specified pixels.  The values
returned for an unallocated entry are undefined.  A Value
error is generated if a pixel is not a valid index into
cmap.  If more than one pixel is in error, it is arbitrary
as to which pixel is reported.

















			     89





X Protocol				    X11, Release 6.4

__
|    LookupColor

  cmap: COLORMAP
  name: STRING8

   ->

  exact-red, exact-green, exact-blue: CARD16
  visual-red, visual-green, visual-blue: CARD16

|__    Errors: Colormap, Name


This request looks up the string name of a color with
respect to the screen associated with cmap and returns both
the exact color values and the closest values provided by
the hardware with respect to the visual type of cmap.  The
name should use the ISO Latin-1 encoding, and uppercase and
lowercase do not matter.


__
|    CreateCursor

  cid: CURSOR
  source: PIXMAP
  mask: PIXMAP or None
  fore-red, fore-green, fore-blue: CARD16
  back-red, back-green, back-blue: CARD16
  x, y: CARD16

|__    Errors: Alloc, IDChoice, Match, Pixmap


This request creates a cursor and associates identifier cid
with it.  The foreground and background RGB values must be
specified, even if the server only has a StaticGray or
GrayScale screen.  The foreground is used for the bits set
to 1 in the source, and the background is used for the bits
set to 0.  Both source and mask (if specified) must have
depth one (or a Match error results), but they can have any
root.  The mask pixmap defines the shape of the cursor.
That is, the bits set to 1 in the mask define which source
pixels will be displayed, and where the mask has bits set to
0, the corresponding bits of the source pixmap are ignored.
If no mask is given, all pixels of the source are displayed.
The mask, if present, must be the same size as the source
(or a Match error results).  The x and y coordinates define
the hotspot relative to the source's origin and must be a
point within the source (or a Match error results).

The components of the cursor may be transformed arbitrarily
to meet display limitations.




			     90





X Protocol				    X11, Release 6.4


The pixmaps can be freed immediately if no further explicit
references to them are to be made.

Subsequent drawing in the source or mask pixmap has an unde-
fined effect on the cursor.  The server might or might not
make a copy of the pixmap.


__
|    CreateGlyphCursor

  cid: CURSOR
  source-font: FONT
  mask-font: FONT or None
  source-char, mask-char: CARD16
  fore-red, fore-green, fore-blue: CARD16
  back-red, back-green, back-blue: CARD16

|__    Errors: Alloc, Font, IDChoice, Value


This request is similar to CreateCursor, except the source
and mask bitmaps are obtained from the specified font
glyphs.  The source-char must be a defined glyph in source-
font, and if mask-font is given, mask-char must be a defined
glyph in mask-font (or a Value error results).	The mask
font and character are optional.  The origins of the source
and mask (if it is defined) glyphs are positioned coinci-
dently and define the hotspot.	The source and mask need not
have the same bounding box metrics, and there is no restric-
tion on the placement of the hotspot relative to the bound-
ing boxes.  If no mask is given, all pixels of the source
are displayed.	Note that source-char and mask-char are
CARD16, not CHAR2B.  For 2-byte matrix fonts, the 16-bit
value should be formed with byte1 in the most significant
byte and byte2 in the least significant byte.

The components of the cursor may be transformed arbitrarily
to meet display limitations.

The fonts can be freed immediately if no further explicit
references to them are to be made.


__
|    FreeCursor

  cursor: CURSOR

|__    Errors: Cursor


This request deletes the association between the resource ID
and the cursor.  The cursor storage will be freed when no



			     91





X Protocol				    X11, Release 6.4


other resource references it.


__
|    RecolorCursor

  cursor: CURSOR
  fore-red, fore-green, fore-blue: CARD16
  back-red, back-green, back-blue: CARD16

|__    Errors: Cursor


This request changes the color of a cursor.  If the cursor
is being displayed on a screen, the change is visible imme-
diately.


__
|    QueryBestSize

  class: {Cursor, Tile, Stipple}
  drawable: DRAWABLE
  width, height: CARD16

   ->

  width, height: CARD16

|__    Errors: Drawable, Match, Value


This request returns the best size that is closest to the
argument size.	For Cursor, this is the largest size that
can be fully displayed.  For Tile, this is the size that can
be tiled fastest.  For Stipple, this is the size that can be
stippled fastest.

For Cursor, the drawable indicates the desired screen.	For
Tile and Stipple, the drawable indicates the screen and also
possibly the window class and depth.  An InputOnly window
cannot be used as the drawable for Tile or Stipple (or a
Match error results).














			     92





X Protocol				    X11, Release 6.4

__
|    QueryExtension

  name: STRING8

   ->

  present: BOOL
  major-opcode: CARD8
  first-event: CARD8
|__    first-error: CARD8


This request determines if the named extension is present.
If so, the major opcode for the extension is returned, if it
has one.  Otherwise, zero is returned.	Any minor opcode and
the request formats are specific to the extension.  If the
extension involves additional event types, the base event
type code is returned.	Otherwise, zero is returned.  The
format of the events is specific to the extension.  If the
extension involves additional error codes, the base error
code is returned.  Otherwise, zero is returned.  The format
of additional data in the errors is specific to the exten-
sion.

The extension name should use the ISO Latin-1 encoding, and
uppercase and lowercase matter.


__
|    ListExtensions

   ->

|__    names: LISTofSTRING8


This request returns a list of all extensions supported by
the server.

__
|    SetModifierMapping

  keycodes-per-modifier: CARD8
  keycodes: LISTofKEYCODE

   ->

  status: {Success, Busy, Failed}

|__    Errors: Alloc, Value


This request specifies the keycodes (if any) of the keys to
be used as modifiers.  The number of keycodes in the list



			     93





X Protocol				    X11, Release 6.4


must be 8*keycodes-per-modifier (or a Length error results).
The keycodes are divided into eight sets, with each set con-
taining keycodes-per-modifier elements.  The sets are
assigned to the modifiers Shift, Lock, Control, Mod1, Mod2,
Mod3, Mod4, and Mod5, in order.  Only nonzero keycode values
are used within each set; zero values are ignored.  All of
the nonzero keycodes must be in the range specified by min-
keycode and max-keycode in the connection setup (or a Value
error results).  The order of keycodes within a set does not
matter.  If no nonzero values are specified in a set, the
use of the corresponding modifier is disabled, and the modi-
fier bit will always be zero.  Otherwise, the modifier bit
will be one whenever at least one of the keys in the corre-
sponding set is in the down position.

A server can impose restrictions on how modifiers can be
changed (for example, if certain keys do not generate up
transitions in hardware, if auto-repeat cannot be disabled
on certain keys, or if multiple keys per modifier are not
supported).  The status reply is Failed if some such
restriction is violated, and none of the modifiers is
changed.

If the new nonzero keycodes specified for a modifier differ
from those currently defined and any (current or new) keys
for that modifier are logically in the down state, then the
status reply is Busy, and none of the modifiers is changed.

This request generates a MappingNotify event on a Success
status.


__
|    GetModifierMapping

   ->

  keycodes-per-modifier: CARD8
|__    keycodes: LISTofKEYCODE


This request returns the keycodes of the keys being used as
modifiers.  The number of keycodes in the list is 8*key-
codes-per-modifier.  The keycodes are divided into eight
sets, with each set containing keycodes-per-modifier ele-
ments.	The sets are assigned to the modifiers Shift, Lock,
Control, Mod1, Mod2, Mod3, Mod4, and Mod5, in order.  The
keycodes-per-modifier value is chosen arbitrarily by the
server; zeroes are used to fill in unused elements within
each set.  If only zero values are given in a set, the use
of the corresponding modifier has been disabled.  The order
of keycodes within each set is chosen arbitrarily by the
server.




			     94





X Protocol				    X11, Release 6.4

__
|    ChangeKeyboardMapping

  first-keycode: KEYCODE
  keysyms-per-keycode: CARD8
  keysyms: LISTofKEYSYM

|__    Errors: Alloc, Value


This request defines the symbols for the specified number of
keycodes, starting with the specified keycode.	The symbols
for keycodes outside this range remained unchanged.  The
number of elements in the keysyms list must be a multiple of
keysyms-per-keycode (or a Length error results).  The first-
keycode must be greater than or equal to min-keycode as
returned in the connection setup (or a Value error results)
and:

     first-keycode + (keysyms-length / keysyms-per-keycode) - 1


must be less than or equal to max-keycode as returned in the
connection setup (or a Value error results).  KEYSYM number
N (counting from zero) for keycode K has an index (counting
from zero) of:

     (K - first-keycode) * keysyms-per-keycode + N


in keysyms.  The keysyms-per-keycode can be chosen arbitrar-
ily by the client to be large enough to hold all desired
symbols.  A special KEYSYM value of NoSymbol should be used
to fill in unused elements for individual keycodes.  It is
legal for NoSymbol to appear in nontrailing positions of the
effective list for a keycode.

This request generates a MappingNotify event.

There is no requirement that the server interpret this map-
ping; it is merely stored for reading and writing by clients
(see section 5).
















			     95





X Protocol				    X11, Release 6.4

__
|    GetKeyboardMapping

  first-keycode: KEYCODE
  count: CARD8

   ->

  keysyms-per-keycode: CARD8
  keysyms: LISTofKEYSYM

|__    Errors: Value


This request returns the symbols for the specified number of
keycodes, starting with the specified keycode.	The first-
keycode must be greater than or equal to min-keycode as
returned in the connection setup (or a Value error results),
and:

     first-keycode + count - 1


must be less than or equal to max-keycode as returned in the
connection setup (or a Value error results).  The number of
elements in the keysyms list is:

     count * keysyms-per-keycode


and KEYSYM number N (counting from zero) for keycode K has
an index (counting from zero) of:

     (K - first-keycode) * keysyms-per-keycode + N


in keysyms.  The keysyms-per-keycode value is chosen arbi-
trarily by the server to be large enough to report all
requested symbols.  A special KEYSYM value of NoSymbol is
used to fill in unused elements for individual keycodes.


__
|    ChangeKeyboardControl

  value-mask: BITMASK
  value-list: LISTofVALUE

|__    Errors: Match, Value


This request controls various aspects of the keyboard.	The
value-mask and value-list specify which controls are to be
changed.  The possible values are:




			     96





X Protocol				    X11, Release 6.4


---------------------------------------
Control 	    Type
---------------------------------------
key-click-percent   INT8
bell-percent	    INT8
bell-pitch	    INT16
bell-duration	    INT16
led		    CARD8
led-mode	    {On, Off}
key		    KEYCODE
auto-repeat-mode    {On, Off, Default}
---------------------------------------


The key-click-percent sets the volume for key clicks between
0 (off) and 100 (loud) inclusive, if possible.	Setting to
-1 restores the default.  Other negative values generate a
Value error.

The bell-percent sets the base volume for the bell between 0
(off) and 100 (loud) inclusive, if possible.  Setting to -1
restores the default.  Other negative values generate a
Value error.

The bell-pitch sets the pitch (specified in Hz) of the bell,
if possible.  Setting to -1 restores the default.  Other
negative values generate a Value error.

The bell-duration sets the duration of the bell (specified
in milliseconds), if possible.	Setting to -1 restores the
default.  Other negative values generate a Value error.

If both led-mode and led are specified, then the state of
that LED is changed, if possible.  If only led-mode is spec-
ified, then the state of all LEDs are changed, if possible.
At most 32 LEDs, numbered from one, are supported.  No stan-
dard interpretation of LEDs is defined.  It is a Match error
if an led is specified without an led-mode.

If both auto-repeat-mode and key are specified, then the
auto-repeat mode of that key is changed, if possible.  If
only auto-repeat-mode is specified, then the global auto-
repeat mode for the entire keyboard is changed, if possible,
without affecting the per-key settings.  It is a Match error
if a key is specified without an auto-repeat-mode.  Each key
has an individual mode of whether or not it should auto-
repeat and a default setting for that mode.  In addition,
there is a global mode of whether auto-repeat should be
enabled or not and a default setting for that mode.  When
the global mode is On, keys should obey their individual
auto-repeat modes.  When the global mode is Off, no keys
should auto-repeat.  An auto-repeating key generates alter-
nating KeyPress and KeyRelease events.	When a key is used
as a modifier, it is desirable for the key not to auto-



			     97





X Protocol				    X11, Release 6.4


repeat, regardless of the auto-repeat setting for that key.

A bell generator connected with the console but not directly
on the keyboard is treated as if it were part of the key-
board.

The order in which controls are verified and altered is
server-dependent.  If an error is generated, a subset of the
controls may have been altered.


__
|    GetKeyboardControl

   ->

  key-click-percent: CARD8
  bell-percent: CARD8
  bell-pitch: CARD16
  bell-duration: CARD16
  led-mask: CARD32
  global-auto-repeat: {On, Off}
|__    auto-repeats: LISTofCARD8


This request returns the current control values for the key-
board.	For the LEDs, the least significant bit of led-mask
corresponds to LED one, and each one bit in led-mask indi-
cates an LED that is lit.  The auto-repeats is a bit vector;
each one bit indicates that auto-repeat is enabled for the
corresponding key.  The vector is represented as 32 bytes.
Byte N (from 0) contains the bits for keys 8N to 8N + 7,
with the least significant bit in the byte representing key
8N.


__
|    Bell

  percent: INT8

|__    Errors: Value


This request rings the bell on the keyboard at a volume rel-
ative to the base volume for the keyboard, if possible.
Percent can range from -100 to 100 inclusive (or a Value
error results).  The volume at which the bell is rung when
percent is nonnegative is:

     base - [(base * percent) / 100] + percent






			     98





X Protocol				    X11, Release 6.4


When percent is negative, it is:

     base + [(base * percent) / 100]



__
|    SetPointerMapping

  map: LISTofCARD8

   ->

  status: {Success, Busy}

|__    Errors: Value


This request sets the mapping of the pointer.  Elements of
the list are indexed starting from one.  The length of the
list must be the same as GetPointerMapping would return (or
a Value error results).  The index is a core button number,
and the element of the list defines the effective number.

A zero element disables a button.  Elements are not
restricted in value by the number of physical buttons, but
no two elements can have the same nonzero value (or a Value
error results).

If any of the buttons to be altered are logically in the
down state, the status reply is Busy, and the mapping is not
changed.

This request generates a MappingNotify event on a Success
status.


__
|    GetPointerMapping

   ->

|__    map: LISTofCARD8


This request returns the current mapping of the pointer.
Elements of the list are indexed starting from one.  The
length of the list indicates the number of physical buttons.

The nominal mapping for a pointer is the identity mapping:
map[i]=i.






			     99





X Protocol				    X11, Release 6.4

__
|    ChangePointerControl

  do-acceleration, do-threshold: BOOL
  acceleration-numerator, acceleration-denominator: INT16
  threshold: INT16

|__    Errors: Value


This request defines how the pointer moves.  The accelera-
tion is a multiplier for movement expressed as a fraction.
For example, specifying 3/1 means the pointer moves three
times as fast as normal.  The fraction can be rounded arbi-
trarily by the server.	Acceleration only takes effect if
the pointer moves more than threshold number of pixels at
once and only applies to the amount beyond the threshold.
Setting a value to -1 restores the default.  Other negative
values generate a Value error, as does a zero value for
acceleration-denominator.


__
|    GetPointerControl

   ->

  acceleration-numerator, acceleration-denominator: CARD16
|__    threshold: CARD16


This request returns the current acceleration and threshold
for the pointer.


__
|    SetScreenSaver

  timeout, interval: INT16
  prefer-blanking: {Yes, No, Default}
  allow-exposures: {Yes, No, Default}

|__    Errors: Value


The timeout and interval are specified in seconds; setting a
value to -1 restores the default.  Other negative values
generate a Value error.  If the timeout value is zero,
screen-saver is disabled (but an activated screen-saver is
not deactivated).  If the timeout value is nonzero, screen-
saver is enabled.  Once screen-saver is enabled, if no input
from the keyboard or pointer is generated for timeout sec-
onds, screen-saver is activated.  For each screen, if blank-
ing is preferred and the hardware supports video blanking,
the screen will simply go blank.  Otherwise, if either



			     100





X Protocol				    X11, Release 6.4


exposures are allowed or the screen can be regenerated with-
out sending exposure events to clients, the screen is
changed in a server-dependent fashion to avoid phosphor
burn.  Otherwise, the state of the screens does not change,
and screen-saver is not activated.  At the next keyboard or
pointer input or at the next ForceScreenSaver with mode
Reset, screen-saver is deactivated, and all screen states
are restored.

If the server-dependent screen-saver method is amenable to
periodic change, interval serves as a hint about how long
the change period should be, with zero hinting that no peri-
odic change should be made.  Examples of ways to change the
screen include scrambling the color map periodically, moving
an icon image about the screen periodically, or tiling the
screen with the root window background tile, randomly reo-
rigined periodically.


__
|    GetScreenSaver

   ->

  timeout, interval: CARD16
  prefer-blanking: {Yes, No}
|__    allow-exposures: {Yes, No}


This request returns the current screen-saver control val-
ues.


__
|    ForceScreenSaver

  mode: {Activate, Reset}

|__    Errors: Value


If the mode is Activate and screen-saver is currently deac-
tivated, then screen-saver is activated (even if screen-
saver has been disabled with a timeout value of zero).	If
the mode is Reset and screen-saver is currently enabled,
then screen-saver is deactivated (if it was activated), and
the activation timer is reset to its initial state as if
device input had just been received.









			     101





X Protocol				    X11, Release 6.4

__
|    ChangeHosts

  mode: {Insert, Delete}
  host: HOST

|__    Errors: Access, Value


This request adds or removes the specified host from the
access control list.  When the access control mechanism is
enabled and a client attempts to establish a connection to
the server, the host on which the client resides must be in
the access control list, or the client must have been
granted permission by a server-dependent method, or the
server will refuse the connection.

The client must reside on the same host as the server and/or
have been granted permission by a server-dependent method to
execute this request (or an Access error results).

An initial access control list can usually be specified,
typically by naming a file that the server reads at startup
and reset.

The following address families are defined.  A server is not
required to support these families and may support families
not listed here.  Use of an unsupported family, an improper
address format, or an improper address length within a sup-
ported family results in a Value error.

For the Internet family, the address must be four bytes
long.  The address bytes are in standard IP order; the
server performs no automatic swapping on the address bytes.
For a Class A address, the network number is the first byte
in the address, and the host number is the remaining three
bytes, most significant byte first.  For a Class B address,
the network number is the first two bytes and the host num-
ber is the last two bytes, each most significant byte first.
For a Class C address, the network number is the first three
bytes, most significant byte first, and the last byte is the
host number.

For the DECnet family, the server performs no automatic
swapping on the address bytes.	A Phase IV address is two
bytes long: the first byte contains the least significant
eight bits of the node number, and the second byte contains
the most significant two bits of the node number in the
least significant two bits of the byte and the area in the
most significant six bits of the byte.

For the Chaos family, the address must be two bytes long.
The host number is always the first byte in the address, and
the subnet number is always the second byte.  The server
performs no automatic swapping on the address bytes.



			     102





X Protocol				    X11, Release 6.4

__
|    ListHosts

   ->

  mode: {Enabled, Disabled}
|__    hosts: LISTofHOST


This request returns the hosts on the access control list
and whether use of the list at connection setup is currently
enabled or disabled.

Each HOST is padded to a multiple of four bytes.


__
|    SetAccessControl

  mode: {Enable, Disable}

|__    Errors: Access, Value


This request enables or disables the use of the access con-
trol list at connection setups.

The client must reside on the same host as the server and/or
have been granted permission by a server-dependent method to
execute this request (or an Access error results).


__
|    SetCloseDownMode

  mode: {Destroy, RetainPermanent, RetainTemporary}

|__    Errors: Value


This request defines what will happen to the client's
resources at connection close.	A connection starts in
Destroy mode.  The meaning of the close-down mode is
described in section 10.


__
|    KillClient

  resource: CARD32 or AllTemporary

|__    Errors: Value






			     103





X Protocol				    X11, Release 6.4


If a valid resource is specified, KillClient forces a close-
down of the client that created the resource.  If the client
has already terminated in either RetainPermanent or Retain-
Temporary mode, all of the client's resources are destroyed
(see section 10).  If AllTemporary is specified, then the
resources of all clients that have terminated in RetainTem-
porary are destroyed.


__
|__  NoOperation


This request has no arguments and no results, but the
request length field allows the request to be any multiple
of four bytes in length.  The bytes contained in the request
are uninterpreted by the server.

This request can be used in its minimum four byte form as
padding where necessary by client libraries that find it
convenient to force requests to begin on 64-bit boundaries.

10.  Connection Close

At connection close, all event selections made by the client
are discarded.	If the client has the pointer actively
grabbed, an UngrabPointer is performed.  If the client has
the keyboard actively grabbed, an UngrabKeyboard is per-
formed.  All passive grabs by the client are released.	If
the client has the server grabbed, an UngrabServer is per-
formed.  All selections (see SetSelectionOwner request)
owned by the client are disowned.  If close-down mode (see
SetCloseDownMode request) is RetainPermanent or RetainTempo-
rary, then all resources (including colormap entries) allo-
cated by the client are marked as permanent or temporary,
respectively (but this does not prevent other clients from
explicitly destroying them).  If the mode is Destroy, all of
the client's resources are destroyed.

When a client's resources are destroyed, for each window in
the client's save-set, if the window is an inferior of a
window created by the client, the save-set window is repar-
ented to the closest ancestor such that the save-set window
is not an inferior of a window created by the client.  If
the save-set window is unmapped, a MapWindow request is per-
formed on it (even if it was not an inferior of a window
created by the client).  The reparenting leaves unchanged
the absolute coordinates (with respect to the root window)
of the upper-left outer corner of the save-set window.
After save-set processing, all windows created by the client
are destroyed.	For each nonwindow resource created by the
client, the appropriate Free request is performed.  All col-
ors and colormap entries allocated by the client are freed.




			     104





X Protocol				    X11, Release 6.4


A server goes through a cycle of having no connections and
having some connections.  At every transition to the state
of having no connections as a result of a connection closing
with a Destroy close-down mode, the server resets its state
as if it had just been started.  This starts by destroying
all lingering resources from clients that have terminated in
RetainPermanent or RetainTemporary mode.  It additionally
includes deleting all but the predefined atom identifiers,
deleting all properties on all root windows, resetting all
device maps and attributes (key click, bell volume, acceler-
ation), resetting the access control list, restoring the
standard root tiles and cursors, restoring the default font
path, and restoring the input focus to state PointerRoot.

Note that closing a connection with a close-down mode of
RetainPermanent or RetainTemporary will not cause the server
to reset.

11.  Events

When a button press is processed with the pointer in some
window W and no active pointer grab is in progress, the
ancestors of W are searched from the root down, looking for
a passive grab to activate.  If no matching passive grab on
the button exists, then an active grab is started automati-
cally for the client receiving the event, and the last-
pointer-grab time is set to the current server time.  The
effect is essentially equivalent to a GrabButton with argu-
ments:

-----------------------------------------------------------
Argument		 Value
-----------------------------------------------------------
event-window		 Event window
event-mask		 Client's selected pointer events
			 on the event window
pointer-mode and key-	 Asynchronous
board-mode
owner-events		 True if the client has Owner-
			 GrabButton selected on the event
			 window, otherwise False
confine-to		 None
cursor			 None
-----------------------------------------------------------


The grab is terminated automatically when the logical state
of the pointer has all buttons released.  UngrabPointer and
ChangeActivePointerGrab can both be used to modify the
active grab.







			     105





X Protocol				    X11, Release 6.4

__
|    KeyPress
KeyRelease
ButtonPress
ButtonRelease
MotionNotify

  root, event: WINDOW
  child: WINDOW or None
  same-screen: BOOL
  root-x, root-y, event-x, event-y: INT16
  detail: <see below>
  state: SETofKEYBUTMASK
|__    time: TIMESTAMP


These events are generated either when a key or button logi-
cally changes state or when the pointer logically moves.
The generation of these logical changes may lag the physical
changes if device event processing is frozen.  Note that
KeyPress and KeyRelease are generated for all keys, even
those mapped to modifier bits.	The source of the event is
the window the pointer is in.  The window the event is
reported with respect to is called the event window.  The
event window is found by starting with the source window and
looking up the hierarchy for the first window on which any
client has selected interest in the event (provided no
intervening window prohibits event generation by including
the event type in its do-not-propagate-mask).  The actual
window used for reporting can be modified by active grabs
and, in the case of keyboard events, can be modified by the
focus window.

The root is the root window of the source window, and root-x
and root-y are the pointer coordinates relative to root's
origin at the time of the event.  Event is the event window.
If the event window is on the same screen as root, then
event-x and event-y are the pointer coordinates relative to
the event window's origin.  Otherwise, event-x and event-y
are zero.  If the source window is an inferior of the event
window, then child is set to the child of the event window
that is an ancestor of (or is) the source window.  Other-
wise, it is set to None.  The state component gives the log-
ical state of the buttons and modifier keys just before the
event.	The detail component type varies with the event
type:

--------------------------------------
Event		       Component
--------------------------------------
KeyPress, KeyRelease   KEYCODE
ButtonPress, Button-   BUTTON
Release





			     106





X Protocol				    X11, Release 6.4


--------------------------------------
Event		       Component
--------------------------------------
MotionNotify	       {Normal, Hint}
--------------------------------------


MotionNotify events are only generated when the motion
begins and ends in the window.	The granularity of motion
events is not guaranteed, but a client selecting for motion
events is guaranteed to get at least one event when the
pointer moves and comes to rest.  Selecting PointerMotion
receives events independent of the state of the pointer but-
tons.  By selecting some subset of Button[1-5]Motion
instead, MotionNotify events will only be received when one
or more of the specified buttons are pressed.  By selecting
ButtonMotion, MotionNotify events will be received only when
at least one button is pressed.  The events are always of
type MotionNotify, independent of the selection.  If Point-
erMotionHint is selected, the server is free to send only
one MotionNotify event (with detail Hint) to the client for
the event window until either the key or button state
changes, the pointer leaves the event window, or the client
issues a QueryPointer or GetMotionEvents request.


__
|    EnterNotify
LeaveNotify

  root, event: WINDOW
  child: WINDOW or None
  same-screen: BOOL
  root-x, root-y, event-x, event-y: INT16
  mode: {Normal, Grab, Ungrab}
  detail: {Ancestor, Virtual, Inferior, Nonlinear, Nonlin-
  earVirtual}
  focus: BOOL
  state: SETofKEYBUTMASK
|__    time: TIMESTAMP


If pointer motion or window hierarchy change causes the
pointer to be in a different window than before, EnterNotify
and LeaveNotify events are generated instead of a MotionNo-
tify event.  Only clients selecting EnterWindow on a window
receive EnterNotify events, and only clients selecting
LeaveWindow receive LeaveNotify events.  The pointer posi-
tion reported in the event is always the final position, not
the initial position of the pointer.  The root is the root
window for this position, and root-x and root-y are the
pointer coordinates relative to root's origin at the time of
the event.  Event is the event window.	If the event window
is on the same screen as root, then event-x and event-y are



			     107





X Protocol				    X11, Release 6.4


the pointer coordinates relative to the event window's ori-
gin.  Otherwise, event-x and event-y are zero.	In a
LeaveNotify event, if a child of the event window contains
the initial position of the pointer, then the child compo-
nent is set to that child.  Otherwise, it is None.  For an
EnterNotify event, if a child of the event window contains
the final pointer position, then the child component is set
to that child.	Otherwise, it is None.	If the event window
is the focus window or an inferior of the focus window, then
focus is True.	Otherwise, focus is False.

Normal pointer motion events have mode Normal.	Pseudo-
motion events when a grab activates have mode Grab, and
pseudo-motion events when a grab deactivates have mode
Ungrab.

All EnterNotify and LeaveNotify events caused by a hierarchy
change are generated after any hierarchy event caused by
that change (that is, UnmapNotify, MapNotify, ConfigureNo-
tify, GravityNotify, CirculateNotify), but the ordering of
EnterNotify and LeaveNotify events with respect to FocusOut,
VisibilityNotify, and Expose events is not constrained.

Normal events are generated as follows:

When the pointer moves from window A to window B and A is an
inferior of B:

o    LeaveNotify with detail Ancestor is generated on A.

o    LeaveNotify with detail Virtual is generated on each
     window between A and B exclusive (in that order).

o    EnterNotify with detail Inferior is generated on B.

When the pointer moves from window A to window B and B is an
inferior of A:

o    LeaveNotify with detail Inferior is generated on A.

o    EnterNotify with detail Virtual is generated on each
     window between A and B exclusive (in that order).

o    EnterNotify with detail Ancestor is generated on B.

When the pointer moves from window A to window B and window
C is their least common ancestor:

o    LeaveNotify with detail Nonlinear is generated on A.

o    LeaveNotify with detail NonlinearVirtual is generated
     on each window between A and C exclusive (in that
     order).




			     108





X Protocol				    X11, Release 6.4


o    EnterNotify with detail NonlinearVirtual is generated
     on each window between C and B exclusive (in that
     order).

o    EnterNotify with detail Nonlinear is generated on B.

When the pointer moves from window A to window B on differ-
ent screens:

o    LeaveNotify with detail Nonlinear is generated on A.

o    If A is not a root window, LeaveNotify with detail Non-
     linearVirtual is generated on each window above A up to
     and including its root (in order).

o    If B is not a root window, EnterNotify with detail Non-
     linearVirtual is generated on each window from B's root
     down to but not including B (in order).

o    EnterNotify with detail Nonlinear is generated on B.

When a pointer grab activates (but after any initial warp
into a confine-to window and before generating any actual
ButtonPress event that activates the grab), G is the grab-
window for the grab, and P is the window the pointer is in:

o    EnterNotify and LeaveNotify events with mode Grab are
     generated (as for Normal above) as if the pointer were
     to suddenly warp from its current position in P to some
     position in G.  However, the pointer does not warp, and
     the pointer position is used as both the initial and
     final positions for the events.

When a pointer grab deactivates (but after generating any
actual ButtonRelease event that deactivates the grab), G is
the grab-window for the grab, and P is the window the
pointer is in:

o    EnterNotify and LeaveNotify events with mode Ungrab are
     generated (as for Normal above) as if the pointer were
     to suddenly warp from some position in G to its current
     position in P.  However, the pointer does not warp, and
     the current pointer position is used as both the ini-
     tial and final positions for the events.













			     109





X Protocol				    X11, Release 6.4

__
|    FocusIn
FocusOut

  event: WINDOW
  mode: {Normal, WhileGrabbed, Grab, Ungrab}
  detail: {Ancestor, Virtual, Inferior, Nonlinear, Nonlin-
  earVirtual, Pointer,
|__		   PointerRoot, None}


These events are generated when the input focus changes and
are reported to clients selecting FocusChange on the window.
Events generated by SetInputFocus when the keyboard is not
grabbed have mode Normal.  Events generated by SetInputFocus
when the keyboard is grabbed have mode WhileGrabbed.  Events
generated when a keyboard grab activates have mode Grab, and
events generated when a keyboard grab deactivates have mode
Ungrab.

All FocusOut events caused by a window unmap are generated
after any UnmapNotify event, but the ordering of FocusOut
with respect to generated EnterNotify, LeaveNotify, Visibil-
ityNotify, and Expose events is not constrained.

Normal and WhileGrabbed events are generated as follows:

When the focus moves from window A to window B, A is an
inferior of B, and the pointer is in window P:

o    FocusOut with detail Ancestor is generated on A.

o    FocusOut with detail Virtual is generated on each win-
     dow between A and B exclusive (in order).

o    FocusIn with detail Inferior is generated on B.

o    If P is an inferior of B but P is not A or an inferior
     of A or an ancestor of A, FocusIn with detail Pointer
     is generated on each window below B down to and includ-
     ing P (in order).

When the focus moves from window A to window B, B is an
inferior of A, and the pointer is in window P:

o    If P is an inferior of A but P is not an inferior of B
     or an ancestor of B, FocusOut with detail Pointer is
     generated on each window from P up to but not including
     A (in order).

o    FocusOut with detail Inferior is generated on A.

o    FocusIn with detail Virtual is generated on each window
     between A and B exclusive (in order).




			     110





X Protocol				    X11, Release 6.4


o    FocusIn with detail Ancestor is generated on B.

When the focus moves from window A to window B, window C is
their least common ancestor, and the pointer is in window P:

o    If P is an inferior of A, FocusOut with detail Pointer
     is generated on each window from P up to but not
     including A (in order).

o    FocusOut with detail Nonlinear is generated on A.

o    FocusOut with detail NonlinearVirtual is generated on
     each window between A and C exclusive (in order).

o    FocusIn with detail NonlinearVirtual is generated on
     each window between C and B exclusive (in order).

o    FocusIn with detail Nonlinear is generated on B.

o    If P is an inferior of B, FocusIn with detail Pointer
     is generated on each window below B down to and includ-
     ing P (in order).

When the focus moves from window A to window B on different
screens and the pointer is in window P:

o    If P is an inferior of A, FocusOut with detail Pointer
     is generated on each window from P up to but not
     including A (in order).

o    FocusOut with detail Nonlinear is generated on A.

o    If A is not a root window, FocusOut with detail Nonlin-
     earVirtual is generated on each window above A up to
     and including its root (in order).

o    If B is not a root window, FocusIn with detail Nonlin-
     earVirtual is generated on each window from B's root
     down to but not including B (in order).

o    FocusIn with detail Nonlinear is generated on B.

o    If P is an inferior of B, FocusIn with detail Pointer
     is generated on each window below B down to and includ-
     ing P (in order).

When the focus moves from window A to PointerRoot (or None)
and the pointer is in window P:

o    If P is an inferior of A, FocusOut with detail Pointer
     is generated on each window from P up to but not
     including A (in order).





			     111





X Protocol				    X11, Release 6.4


o    FocusOut with detail Nonlinear is generated on A.

o    If A is not a root window, FocusOut with detail Nonlin-
     earVirtual is generated on each window above A up to
     and including its root (in order).

o    FocusIn with detail PointerRoot (or None) is generated
     on all root windows.

o    If the new focus is PointerRoot, FocusIn with detail
     Pointer is generated on each window from P's root down
     to and including P (in order).

When the focus moves from PointerRoot (or None) to window A
and the pointer is in window P:

o    If the old focus is PointerRoot, FocusOut with detail
     Pointer is generated on each window from P up to and
     including P's root (in order).

o    FocusOut with detail PointerRoot (or None) is generated
     on all root windows.

o    If A is not a root window, FocusIn with detail Nonlin-
     earVirtual is generated on each window from A's root
     down to but not including A (in order).

o    FocusIn with detail Nonlinear is generated on A.

o    If P is an inferior of A, FocusIn with detail Pointer
     is generated on each window below A down to and includ-
     ing P (in order).

When the focus moves from PointerRoot to None (or vice
versa) and the pointer is in window P:

o    If the old focus is PointerRoot, FocusOut with detail
     Pointer is generated on each window from P up to and
     including P's root (in order).

o    FocusOut with detail PointerRoot (or None) is generated
     on all root windows.

o    FocusIn with detail None (or PointerRoot) is generated
     on all root windows.

o    If the new focus is PointerRoot, FocusIn with detail
     Pointer is generated on each window from P's root down
     to and including P (in order).

When a keyboard grab activates (but before generating any
actual KeyPress event that activates the grab), G is the
grab-window for the grab, and F is the current focus:




			     112





X Protocol				    X11, Release 6.4


o    FocusIn and FocusOut events with mode Grab are gener-
     ated (as for Normal above) as if the focus were to
     change from F to G.

When a keyboard grab deactivates (but after generating any
actual KeyRelease event that deactivates the grab), G is the
grab-window for the grab, and F is the current focus:

o    FocusIn and FocusOut events with mode Ungrab are gener-
     ated (as for Normal above) as if the focus were to
     change from G to F.


__
|    KeymapNotify

|__    keys: LISTofCARD8


The value is a bit vector as described in QueryKeymap.	This
event is reported to clients selecting KeymapState on a win-
dow and is generated immediately after every EnterNotify and
FocusIn.


__
|    Expose

  window: WINDOW
  x, y, width, height: CARD16
|__    count: CARD16


This event is reported to clients selecting Exposure on the
window.  It is generated when no valid contents are avail-
able for regions of a window, and either the regions are
visible, the regions are viewable and the server is (perhaps
newly) maintaining backing store on the window, or the win-
dow is not viewable but the server is (perhaps newly) honor-
ing window's backing-store attribute of Always or When-
Mapped.  The regions are decomposed into an arbitrary set of
rectangles, and an Expose event is generated for each rec-
tangle.

For a given action causing exposure events, the set of
events for a given window are guaranteed to be reported con-
tiguously.  If count is zero, then no more Expose events for
this window follow.  If count is nonzero, then at least that
many more Expose events for this window follow (and possibly
more).

The x and y coordinates are relative to window's origin and
specify the upper-left corner of a rectangle.  The width and
height specify the extent of the rectangle.



			     113





X Protocol				    X11, Release 6.4


Expose events are never generated on InputOnly windows.

All Expose events caused by a hierarchy change are generated
after any hierarchy event caused by that change (for exam-
ple, UnmapNotify, MapNotify, ConfigureNotify, GravityNotify,
CirculateNotify).  All Expose events on a given window are
generated after any VisibilityNotify event on that window,
but it is not required that all Expose events on all windows
be generated after all Visibilitity events on all windows.
The ordering of Expose events with respect to FocusOut,
EnterNotify, and LeaveNotify events is not constrained.


__
|    GraphicsExposure

  drawable: DRAWABLE
  x, y, width, height: CARD16
  count: CARD16
  major-opcode: CARD8
|__    minor-opcode: CARD16


This event is reported to a client using a graphics context
with graphics-exposures selected and is generated when a
destination region could not be computed due to an obscured
or out-of-bounds source region.  All of the regions exposed
by a given graphics request are guaranteed to be reported
contiguously.  If count is zero then no more GraphicsExpo-
sure events for this window follow.  If count is nonzero,
then at least that many more GraphicsExposure events for
this window follow (and possibly more).

The x and y coordinates are relative to drawable's origin
and specify the upper-left corner of a rectangle.  The width
and height specify the extent of the rectangle.

The major and minor opcodes identify the graphics request
used.  For the core protocol, major-opcode is always Copy-
Area or CopyPlane, and minor-opcode is always zero.


__
|    NoExposure

  drawable: DRAWABLE
  major-opcode: CARD8
|__    minor-opcode: CARD16


This event is reported to a client using a graphics context
with graphics-exposures selected and is generated when a
graphics request that might produce GraphicsExposure events
does not produce any.  The drawable specifies the



			     114





X Protocol				    X11, Release 6.4


destination used for the graphics request.

The major and minor opcodes identify the graphics request
used.  For the core protocol, major-opcode is always Copy-
Area or CopyPlane, and the minor-opcode is always zero.


__
|    VisibilityNotify

  window: WINDOW
|__    state: {Unobscured, PartiallyObscured, FullyObscured}


This event is reported to clients selecting VisibilityChange
on the window.	In the following, the state of the window is
calculated ignoring all of the window's subwindows.  When a
window changes state from partially or fully obscured or not
viewable to viewable and completely unobscured, an event
with Unobscured is generated.  When a window changes state
from viewable and completely unobscured, from viewable and
completely obscured, or from not viewable, to viewable and
partially obscured, an event with PartiallyObscured is gen-
erated.  When a window changes state from viewable and com-
pletely unobscured, from viewable and partially obscured, or
from not viewable to viewable and fully obscured, an event
with FullyObscured is generated.

VisibilityNotify events are never generated on InputOnly
windows.

All VisibilityNotify events caused by a hierarchy change are
generated after any hierarchy event caused by that change
(for example, UnmapNotify, MapNotify, ConfigureNotify, Grav-
ityNotify, CirculateNotify).  Any VisibilityNotify event on
a given window is generated before any Expose events on that
window, but it is not required that all VisibilityNotify
events on all windows be generated before all Expose events
on all windows.  The ordering of VisibilityNotify events
with respect to FocusOut, EnterNotify, and LeaveNotify
events is not constrained.


__
|    CreateNotify

  parent, window: WINDOW
  x, y: INT16
  width, height, border-width: CARD16
|__    override-redirect: BOOL


This event is reported to clients selecting SubstructureNo-
tify on the parent and is generated when the window is



			     115





X Protocol				    X11, Release 6.4


created.  The arguments are as in the CreateWindow request.


__
|    DestroyNotify

|__    event, window: WINDOW


This event is reported to clients selecting StructureNotify
on the window and to clients selecting SubstructureNotify on
the parent.  It is generated when the window is destroyed.
The event is the window on which the event was generated,
and the window is the window that is destroyed.

The ordering of the DestroyNotify events is such that for
any given window, DestroyNotify is generated on all inferi-
ors of the window before being generated on the window
itself.  The ordering among siblings and across subhierar-
chies is not otherwise constrained.


__
|    UnmapNotify

  event, window: WINDOW
|__    from-configure: BOOL


This event is reported to clients selecting StructureNotify
on the window and to clients selecting SubstructureNotify on
the parent.  It is generated when the window changes state
from mapped to unmapped.  The event is the window on which
the event was generated, and the window is the window that
is unmapped.  The from-configure flag is True if the event
was generated as a result of the window's parent being
resized when the window itself had a win-gravity of Unmap.


__
|    MapNotify

  event, window: WINDOW
|__    override-redirect: BOOL


This event is reported to clients selecting StructureNotify
on the window and to clients selecting SubstructureNotify on
the parent.  It is generated when the window changes state
from unmapped to mapped.  The event is the window on which
the event was generated, and the window is the window that
is mapped.  The override-redirect flag is from the window's
attribute.




			     116





X Protocol				    X11, Release 6.4

__
|    MapRequest

|__    parent, window: WINDOW


This event is reported to the client selecting Substructur-
eRedirect on the parent and is generated when a MapWindow
request is issued on an unmapped window with an override-re-
direct attribute of False.


__
|    ReparentNotify

  event, window, parent: WINDOW
  x, y: INT16
|__    override-redirect: BOOL


This event is reported to clients selecting SubstructureNo-
tify on either the old or the new parent and to clients
selecting StructureNotify on the window.  It is generated
when the window is reparented.	The event is the window on
which the event was generated.	The window is the window
that has been rerooted.  The parent specifies the new par-
ent.  The x and y coordinates are relative to the new par-
ent's origin and specify the position of the upper-left
outer corner of the window.  The override-redirect flag is
from the window's attribute.


__
|    ConfigureNotify

  event, window: WINDOW
  x, y: INT16
  width, height, border-width: CARD16
  above-sibling: WINDOW or None
|__    override-redirect: BOOL


This event is reported to clients selecting StructureNotify
on the window and to clients selecting SubstructureNotify on
the parent.  It is generated when a ConfigureWindow request
actually changes the state of the window.  The event is the
window on which the event was generated, and the window is
the window that is changed.  The x and y coordinates are
relative to the new parent's origin and specify the position
of the upper-left outer corner of the window.  The width and
height specify the inside size, not including the border.
If above-sibling is None, then the window is on the bottom
of the stack with respect to siblings.	Otherwise, the win-
dow is immediately on top of the specified sibling.  The
override-redirect flag is from the window's attribute.



			     117





X Protocol				    X11, Release 6.4

__
|    GravityNotify

  event, window: WINDOW
|__    x, y: INT16


This event is reported to clients selecting SubstructureNo-
tify on the parent and to clients selecting StructureNotify
on the window.	It is generated when a window is moved
because of a change in size of the parent.  The event is the
window on which the event was generated, and the window is
the window that is moved.  The x and y coordinates are rela-
tive to the new parent's origin and specify the position of
the upper-left outer corner of the window.


__
|    ResizeRequest

  window: WINDOW
|__    width, height: CARD16


This event is reported to the client selecting ResizeRedi-
rect on the window and is generated when a ConfigureWindow
request by some other client on the window attempts to
change the size of the window.	The width and height are the
requested inside size, not including the border.


__
|    ConfigureRequest

  parent, window: WINDOW
  x, y: INT16
  width, height, border-width: CARD16
  sibling: WINDOW or None
  stack-mode: {Above, Below, TopIf, BottomIf, Opposite}
|__    value-mask: BITMASK


This event is reported to the client selecting Substructur-
eRedirect on the parent and is generated when a Config-
ureWindow request is issued on the window by some other
client.  The value-mask indicates which components were
specified in the request.  The value-mask and the corre-
sponding values are reported as given in the request.  The
remaining values are filled in from the current geometry of
the window, except in the case of sibling and stack-mode,
which are reported as None and Above (respectively) if not
given in the request.






			     118





X Protocol				    X11, Release 6.4

__
|    CirculateNotify

  event, window: WINDOW
|__    place: {Top, Bottom}


This event is reported to clients selecting StructureNotify
on the window and to clients selecting SubstructureNotify on
the parent.  It is generated when the window is actually
restacked from a CirculateWindow request.  The event is the
window on which the event was generated, and the window is
the window that is restacked.  If place is Top, the window
is now on top of all siblings.	Otherwise, it is below all
siblings.


__
|    CirculateRequest

  parent, window: WINDOW
|__    place: {Top, Bottom}


This event is reported to the client selecting Substructur-
eRedirect on the parent and is generated when a Circu-
lateWindow request is issued on the parent and a window
actually needs to be restacked.  The window specifies the
window to be restacked, and the place specifies what the new
position in the stacking order should be.


__
|    PropertyNotify

  window: WINDOW
  atom: ATOM
  state: {NewValue, Deleted}
|__    time: TIMESTAMP


This event is reported to clients selecting PropertyChange
on the window and is generated with state NewValue when a
property of the window is changed using ChangeProperty or
RotateProperties, even when adding zero-length data using
ChangeProperty and when replacing all or part of a property
with identical data using ChangeProperty or RotateProper-
ties.  It is generated with state Deleted when a property of
the window is deleted using request DeleteProperty or Get-
Property.  The timestamp indicates the server time when the
property was changed.







			     119





X Protocol				    X11, Release 6.4

__
|    SelectionClear

  owner: WINDOW
  selection: ATOM
|__    time: TIMESTAMP


This event is reported to the current owner of a selection
and is generated when a new owner is being defined by means
of SetSelectionOwner.  The timestamp is the last-change time
recorded for the selection.  The owner argument is the win-
dow that was specified by the current owner in its SetSelec-
tionOwner request.


__
|    SelectionRequest

  owner: WINDOW
  selection: ATOM
  target: ATOM
  property: ATOM or None
  requestor: WINDOW
|__    time: TIMESTAMP or CurrentTime


This event is reported to the owner of a selection and is
generated when a client issues a ConvertSelection request.
The owner argument is the window that was specified in the
SetSelectionOwner request.  The remaining arguments are as
in the ConvertSelection request.

The owner should convert the selection based on the speci-
fied target type and send a SelectionNotify back to the
requestor.  A complete specification for using selections is
given in the X Consortium standard Inter-Client Communica-
tion Conventions Manual.


__
|    SelectionNotify

  requestor: WINDOW
  selection, target: ATOM
  property: ATOM or None
|__    time: TIMESTAMP or CurrentTime


This event is generated by the server in response to a Con-
vertSelection request when there is no owner for the selec-
tion.  When there is an owner, it should be generated by the
owner using SendEvent.	The owner of a selection should send
this event to a requestor either when a selection has been
converted and stored as a property or when a selection



			     120





X Protocol				    X11, Release 6.4


conversion could not be performed (indicated with property
None).


__
|    ColormapNotify

  window: WINDOW
  colormap: COLORMAP or None
  new: BOOL
|__    state: {Installed, Uninstalled}


This event is reported to clients selecting ColormapChange
on the window.	It is generated with value True for new when
the colormap attribute of the window is changed and is gen-
erated with value False for new when the colormap of a win-
dow is installed or uninstalled.  In either case, the state
indicates whether the colormap is currently installed.


__
|    MappingNotify

  request: {Modifier, Keyboard, Pointer}
|__    first-keycode, count: CARD8


This event is sent to all clients.  There is no mechanism to
express disinterest in this event.  The detail indicates the
kind of change that occurred: Modifiers for a successful
SetModifierMapping, Keyboard for a successful ChangeKey-
boardMapping, and Pointer for a successful SetPointerMap-
ping.  If the detail is Keyboard, then first-keycode and
count indicate the range of altered keycodes.


__
|    ClientMessage

  window: WINDOW
  type: ATOM
  format: {8, 16, 32}
|__    data: LISTofINT8 or LISTofINT16 or LISTofINT32


This event is only generated by clients using SendEvent.
The type specifies how the data is to be interpreted by the
receiving client; the server places no interpretation on the
type or the data.  The format specifies whether the data
should be viewed as a list of 8-bit, 16-bit, or 32-bit quan-
tities, so that the server can correctly byte-swap, as nec-
essary.  The data always consists of either 20 8-bit values
or 10 16-bit values or 5 32-bit values, although particular



			     121





X Protocol				    X11, Release 6.4


message types might not make use of all of these values.

12.  Flow Control and Concurrency

Whenever the server is writing to a given connection, it is
permissible for the server to stop reading from that connec-
tion (but if the writing would block, it must continue to
service other connections).  The server is not required to
buffer more than a single request per connection at one
time.  For a given connection to the server, a client can
block while reading from the connection but should undertake
to read (events and errors) when writing would block.  Fail-
ure on the part of a client to obey this rule could result
in a deadlocked connection, although deadlock is probably
unlikely unless either the transport layer has very little
buffering or the client attempts to send large numbers of
requests without ever reading replies or checking for errors
and events.

Whether or not a server is implemented with internal concur-
rency, the overall effect must be as if individual requests
are executed to completion in some serial order, and
requests from a given connection must be executed in deliv-
ery order (that is, the total execution order is a shuffle
of the individual streams).  The execution of a request
includes validating all arguments, collecting all data for
any reply, and generating and queueing all required events.
However, it does not include the actual transmission of the
reply and the events.  In addition, the effect of any other
cause that can generate multiple events (for example, acti-
vation of a grab or pointer motion) must effectively gener-
ate and queue all required events indivisibly with respect
to all other causes and requests.  For a request from a
given client, any events destined for that client that are
caused by executing the request must be sent to the client
before any reply or error is sent.





















			     122





X Protocol				    X11, Release 6.4




			 Appendix A

		      KEYSYM Encoding



For convenience, KEYSYM values are viewed as split into four
bytes:

o    Byte 1 (for the purposes of this encoding) is the most-
     significant 5 bits (because of the 29-bit effective
     values)

o    Byte 2 is the next most-significant 8 bits

o    Byte 3 is the next most-significant 8 bits

o    Byte 4 is the least-significant 8 bits

There are two special KEYSYM values: NoSymbol and VoidSym-
bol.  They are used to indicate the absence of symbols (see
section 5).

-----------------------------------------------
Byte 1	 Byte 2   Byte 3   Byte 4   Name
-----------------------------------------------
  0	    0	     0	      0     NoSymbol
  0	  255	   255	    255     VoidSymbol
-----------------------------------------------

All other standard KEYSYM values have zero values for bytes
1 and 2.  Byte 3 indicates a character code set, and byte 4
indicates a particular character within that set.

----------------------------------
Byte 3	 Byte 4
----------------------------------
   0	 Latin-1
   1	 Latin-2
   2	 Latin-3
   3	 Latin-4
   4	 Kana
   5	 Arabic
   6	 Cyrillic
   7	 Greek
   8	 Technical
   9	 Special
  10	 Publishing
  11	 APL
  12	 Hebrew
  13	 Thai




			     123





X Protocol				    X11, Release 6.4


  14	 Korean
  15	 Latin-5
  16	 Latin-6
  17	 Latin-7
  18	 Latin-8
  19	 Latin-9
  32	 Currency
 253	 3270
 254	 Keyboard (XKB) Extension
 255	 Keyboard
----------------------------------

Each character set contains gaps where codes have been
removed that were duplicates with codes in previous charac-
ter sets (that is, character sets with lesser byte 3 value).

The 94 and 96 character code sets have been moved to occupy
the right-hand quadrant (decimal 129 through 256), so the
ASCII subset has a unique encoding across byte 4, which cor-
responds to the ASCII character code.  However, this cannot
be guaranteed with future registrations and does not apply
to all of the Keyboard set.

To the best of our knowledge, the Latin, Kana, Arabic,
Cyrillic, Greek, APL, and Hebrew sets are from the appropri-
ate ISO and/or ECMA international standards.  There are no
Technical, Special, or Publishing international standards,
so these sets are based on Digital Equipment Corporation
standards.

The ordering between the sets (byte 3) is essentially arbi-
trary.	National and international standards bodies were
commencing deliberations regarding international 2-byte and
4-byte character sets at the time these keysyms were devel-
oped, but we did not know of any proposed layouts.

The order may be arbitrary, but it is important in dealing
with duplicate coding.	As far as possible, keysym values
(byte 4) follow the character set encoding standards, except
for the Greek and Cyrillic keysyms which are based on early
draft standards.  In the Latin-1 to Latin-4 sets, all dupli-
cate glyphs occupy the same code position.  However, dupli-
cates between Greek and Technical do not occupy the same
code position.	Applications that wish to use the Latin-2,
Latin-3, Latin-4, Greek, Cyrillic, or Technical sets may
find it convenient to use arrays to transform the keysyms.

There is a difference between European and US usage of the
names Pilcrow, Paragraph, and Section, as follows:

-----------------------------------------------------------
US name 	 European name	  code position in Latin-1





			     124





X Protocol				    X11, Release 6.4


-----------------------------------------------------------
Section sign	 Paragraph sign   10/07
Paragraph sign	 Pilcrow sign	  11/06
-----------------------------------------------------------


We have adopted the US names (by accident rather than by
design).

The Keyboard set is a miscellaneous collection of commonly
occurring keys on keyboards.  Within this set, the 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.

Keyboards tend to be comparatively standard with respect to
the alphanumeric keys, but they differ radically on the mis-
cellaneous function keys.  Many function keys are left over
from early timesharing days or are designed for a specific
application.  Keyboard layouts from large manufacturers tend
to have lots of keys for every conceivable purpose, whereas
small workstation manufacturers often add keys that are
solely for support of some of their unique functionality.
There are two ways of thinking about how to define keysyms
for such a world:

o    The Engraving approach

o    The Common approach

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 lower-
case 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.  One estimate is
that there would be on the order of 300-500 Keyboard keysyms
using this approach, without counting foreign translations
and variations.

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 would
be expected to augment the keysym set (using the vendor-spe-
cific encoding space) to include all of their unique keys



			     125





X Protocol				    X11, Release 6.4


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 sin-
gle keysym.  Under this scheme there are an estimated
100-150 keysyms.

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 functional-
ity 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 fash-
ion.

In the listings below, Code Pos is a representation of byte
4 of the KEYSYM value, expressed as most-significant/least-
significant 4-bit values.  The Code Pos numbers are for ref-
erence only and do not affect the KEYSYM value.  In all
cases, the KEYSYM value is:


     byte3 * 256 + byte4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
000    032    02/00   SPACE						 Latin-1
000    033    02/01   EXCLAMATION POINT 				 Latin-1
000    034    02/02   QUOTATION MARK					 Latin-1
000    035    02/03   NUMBER SIGN					 Latin-1
000    036    02/04   DOLLAR SIGN					 Latin-1
000    037    02/05   PERCENT SIGN					 Latin-1
000    038    02/06   AMPERSAND 					 Latin-1
000    039    02/07   APOSTROPHE					 Latin-1
000    040    02/08   LEFT PARENTHESIS					 Latin-1
000    041    02/09   RIGHT PARENTHESIS 				 Latin-1
000    042    02/10   ASTERISK						 Latin-1
000    043    02/11   PLUS SIGN 					 Latin-1
000    044    02/12   COMMA						 Latin-1
000    045    02/13   MINUS SIGN					 Latin-1
000    046    02/14   FULL STOP 					 Latin-1
000    047    02/15   SOLIDUS						 Latin-1
000    048    03/00   DIGIT ZERO					 Latin-1




			     126





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
000    049    03/01   DIGIT ONE 					 Latin-1
000    050    03/02   DIGIT TWO 					 Latin-1
000    051    03/03   DIGIT THREE					 Latin-1
000    052    03/04   DIGIT FOUR					 Latin-1
000    053    03/05   DIGIT FIVE					 Latin-1
000    054    03/06   DIGIT SIX 					 Latin-1
000    055    03/07   DIGIT SEVEN					 Latin-1
000    056    03/08   DIGIT EIGHT					 Latin-1
000    057    03/09   DIGIT NINE					 Latin-1
000    058    03/10   COLON						 Latin-1
000    059    03/11   SEMICOLON 					 Latin-1
000    060    03/12   LESS THAN SIGN					 Latin-1
000    061    03/13   EQUALS SIGN					 Latin-1
000    062    03/14   GREATER THAN SIGN 				 Latin-1
000    063    03/15   QUESTION MARK					 Latin-1
000    064    04/00   COMMERCIAL AT					 Latin-1
000    065    04/01   LATIN CAPITAL LETTER A				 Latin-1
000    066    04/02   LATIN CAPITAL LETTER B				 Latin-1
000    067    04/03   LATIN CAPITAL LETTER C				 Latin-1
000    068    04/04   LATIN CAPITAL LETTER D				 Latin-1
000    069    04/05   LATIN CAPITAL LETTER E				 Latin-1
000    070    04/06   LATIN CAPITAL LETTER F				 Latin-1
000    071    04/07   LATIN CAPITAL LETTER G				 Latin-1
000    072    04/08   LATIN CAPITAL LETTER H				 Latin-1
000    073    04/09   LATIN CAPITAL LETTER I				 Latin-1
000    074    04/10   LATIN CAPITAL LETTER J				 Latin-1
000    075    04/11   LATIN CAPITAL LETTER K				 Latin-1
000    076    04/12   LATIN CAPITAL LETTER L				 Latin-1
000    077    04/13   LATIN CAPITAL LETTER M				 Latin-1
000    078    04/14   LATIN CAPITAL LETTER N				 Latin-1
000    079    04/15   LATIN CAPITAL LETTER O				 Latin-1
000    080    05/00   LATIN CAPITAL LETTER P				 Latin-1
000    081    05/01   LATIN CAPITAL LETTER Q				 Latin-1
000    082    05/02   LATIN CAPITAL LETTER R				 Latin-1
000    083    05/03   LATIN CAPITAL LETTER S				 Latin-1
000    084    05/04   LATIN CAPITAL LETTER T				 Latin-1
000    085    05/05   LATIN CAPITAL LETTER U				 Latin-1
000    086    05/06   LATIN CAPITAL LETTER V				 Latin-1
000    087    05/07   LATIN CAPITAL LETTER W				 Latin-1
000    088    05/08   LATIN CAPITAL LETTER X				 Latin-1
000    089    05/09   LATIN CAPITAL LETTER Y				 Latin-1
000    090    05/10   LATIN CAPITAL LETTER Z				 Latin-1
000    091    05/11   LEFT SQUARE BRACKET				 Latin-1
000    092    05/12   REVERSE SOLIDUS					 Latin-1
000    093    05/13   RIGHT SQUARE BRACKET				 Latin-1
000    094    05/14   CIRCUMFLEX ACCENT 				 Latin-1
000    095    05/15   LOW LINE						 Latin-1
000    096    06/00   GRAVE ACCENT					 Latin-1
000    097    06/01   LATIN SMALL LETTER a				 Latin-1




			     127





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
000    098    06/02   LATIN SMALL LETTER b				 Latin-1
000    099    06/03   LATIN SMALL LETTER c				 Latin-1
000    100    06/04   LATIN SMALL LETTER d				 Latin-1
000    101    06/05   LATIN SMALL LETTER e				 Latin-1
000    102    06/06   LATIN SMALL LETTER f				 Latin-1
000    103    06/07   LATIN SMALL LETTER g				 Latin-1
000    104    06/08   LATIN SMALL LETTER h				 Latin-1
000    105    06/09   LATIN SMALL LETTER i				 Latin-1
000    106    06/10   LATIN SMALL LETTER j				 Latin-1
000    107    06/11   LATIN SMALL LETTER k				 Latin-1
000    108    06/12   LATIN SMALL LETTER l				 Latin-1
000    109    06/13   LATIN SMALL LETTER m				 Latin-1
000    110    06/14   LATIN SMALL LETTER n				 Latin-1
000    111    06/15   LATIN SMALL LETTER o				 Latin-1
000    112    07/00   LATIN SMALL LETTER p				 Latin-1
000    113    07/01   LATIN SMALL LETTER q				 Latin-1
000    114    07/02   LATIN SMALL LETTER r				 Latin-1
000    115    07/03   LATIN SMALL LETTER s				 Latin-1
000    116    07/04   LATIN SMALL LETTER t				 Latin-1
000    117    07/05   LATIN SMALL LETTER u				 Latin-1
000    118    07/06   LATIN SMALL LETTER v				 Latin-1
000    119    07/07   LATIN SMALL LETTER w				 Latin-1
000    120    07/08   LATIN SMALL LETTER x				 Latin-1
000    121    07/09   LATIN SMALL LETTER y				 Latin-1
000    122    07/10   LATIN SMALL LETTER z				 Latin-1
000    123    07/11   LEFT CURLY BRACKET				 Latin-1
000    124    07/12   VERTICAL LINE					 Latin-1
000    125    07/13   RIGHT CURLY BRACKET				 Latin-1
000    126    07/14   TILDE						 Latin-1
000    160    10/00   NO-BREAK SPACE					 Latin-1
000    161    10/01   INVERTED EXCLAMATION MARK 			 Latin-1
000    162    10/02   CENT SIGN 					 Latin-1
000    163    10/03   POUND SIGN					 Latin-1
000    164    10/04   CURRENCY SIGN					 Latin-1
000    165    10/05   YEN SIGN						 Latin-1
000    166    10/06   BROKEN VERTICAL BAR				 Latin-1
000    167    10/07   SECTION SIGN					 Latin-1
000    168    10/08   DIAERESIS 					 Latin-1
000    169    10/09   COPYRIGHT SIGN					 Latin-1
000    170    10/10   FEMININE ORDINAL INDICATOR			 Latin-1
000    171    10/11   LEFT ANGLE QUOTATION MARK 			 Latin-1
000    172    10/12   NOT SIGN						 Latin-1
000    173    10/13   HYPHEN						 Latin-1
000    174    10/14   REGISTERED TRADEMARK SIGN 			 Latin-1
000    175    10/15   MACRON						 Latin-1
000    176    11/00   DEGREE SIGN, RING ABOVE				 Latin-1
000    177    11/01   PLUS-MINUS SIGN					 Latin-1
000    178    11/02   SUPERSCRIPT TWO					 Latin-1
000    179    11/03   SUPERSCRIPT THREE 				 Latin-1




			     128





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
000    180    11/04   ACUTE ACCENT					 Latin-1
000    181    11/05   MICRO SIGN					 Latin-1
000    182    11/06   PARAGRAPH SIGN					 Latin-1
000    183    11/07   MIDDLE DOT					 Latin-1
000    184    11/08   CEDILLA						 Latin-1
000    185    11/09   SUPERSCRIPT ONE					 Latin-1
000    186    11/10   MASCULINE ORDINAL INDICATOR			 Latin-1
000    187    11/11   RIGHT ANGLE QUOTATION MARK			 Latin-1
000    188    11/12   VULGAR FRACTION ONE QUARTER			 Latin-1
000    189    11/13   VULGAR FRACTION ONE HALF				 Latin-1
000    190    11/14   VULGAR FRACTION THREE QUARTERS			 Latin-1
000    191    11/15   INVERTED QUESTION MARK				 Latin-1
000    192    12/00   LATIN CAPITAL LETTER A WITH GRAVE ACCENT		 Latin-1
000    193    12/01   LATIN CAPITAL LETTER A WITH ACUTE ACCENT		 Latin-1
000    194    12/02   LATIN CAPITAL LETTER A WITH CIRCUMFLEX ACCENT	 Latin-1
000    195    12/03   LATIN CAPITAL LETTER A WITH TILDE 		 Latin-1
000    196    12/04   LATIN CAPITAL LETTER A WITH DIAERESIS		 Latin-1
000    197    12/05   LATIN CAPITAL LETTER A WITH RING ABOVE		 Latin-1
000    198    12/06   LATIN CAPITAL DIPHTHONG AE			 Latin-1
000    199    12/07   LATIN CAPITAL LETTER C WITH CEDILLA		 Latin-1
000    200    12/08   LATIN CAPITAL LETTER E WITH GRAVE ACCENT		 Latin-1
000    201    12/09   LATIN CAPITAL LETTER E WITH ACUTE ACCENT		 Latin-1
000    202    12/10   LATIN CAPITAL LETTER E WITH CIRCUMFLEX ACCENT	 Latin-1
000    203    12/11   LATIN CAPITAL LETTER E WITH DIAERESIS		 Latin-1
000    204    12/12   LATIN CAPITAL LETTER I WITH GRAVE ACCENT		 Latin-1
000    205    12/13   LATIN CAPITAL LETTER I WITH ACUTE ACCENT		 Latin-1
000    206    12/14   LATIN CAPITAL LETTER I WITH CIRCUMFLEX ACCENT	 Latin-1
000    207    12/15   LATIN CAPITAL LETTER I WITH DIAERESIS		 Latin-1
000    208    13/00   ICELANDIC CAPITAL LETTER ETH			 Latin-1
000    209    13/01   LATIN CAPITAL LETTER N WITH TILDE 		 Latin-1
000    210    13/02   LATIN CAPITAL LETTER O WITH GRAVE ACCENT		 Latin-1
000    211    13/03   LATIN CAPITAL LETTER O WITH ACUTE ACCENT		 Latin-1
000    212    13/04   LATIN CAPITAL LETTER O WITH CIRCUMFLEX ACCENT	 Latin-1
000    213    13/05   LATIN CAPITAL LETTER O WITH TILDE 		 Latin-1
000    214    13/06   LATIN CAPITAL LETTER O WITH DIAERESIS		 Latin-1
000    215    13/07   MULTIPLICATION SIGN				 Latin-1
000    216    13/08   LATIN CAPITAL LETTER O WITH OBLIQUE STROKE	 Latin-1
000    217    13/09   LATIN CAPITAL LETTER U WITH GRAVE ACCENT		 Latin-1
000    218    13/10   LATIN CAPITAL LETTER U WITH ACUTE ACCENT		 Latin-1
000    219    13/11   LATIN CAPITAL LETTER U WITH CIRCUMFLEX ACCENT	 Latin-1
000    220    13/12   LATIN CAPITAL LETTER U WITH DIAERESIS		 Latin-1
000    221    13/13   LATIN CAPITAL LETTER Y WITH ACUTE ACCENT		 Latin-1
000    222    13/14   ICELANDIC CAPITAL LETTER THORN			 Latin-1
000    223    13/15   GERMAN SMALL LETTER SHARP s			 Latin-1
000    224    14/00   LATIN SMALL LETTER a WITH GRAVE ACCENT		 Latin-1
000    225    14/01   LATIN SMALL LETTER a WITH ACUTE ACCENT		 Latin-1
000    226    14/02   LATIN SMALL LETTER a WITH CIRCUMFLEX ACCENT	 Latin-1
000    227    14/03   LATIN SMALL LETTER a WITH TILDE			 Latin-1
000    228    14/04   LATIN SMALL LETTER a WITH DIAERESIS		 Latin-1




			     129





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
000    229    14/05   LATIN SMALL LETTER a WITH RING ABOVE		 Latin-1
000    230    14/06   LATIN SMALL DIPHTHONG ae				 Latin-1
000    231    14/07   LATIN SMALL LETTER c WITH CEDILLA 		 Latin-1
000    232    14/08   LATIN SMALL LETTER e WITH GRAVE ACCENT		 Latin-1
000    233    14/09   LATIN SMALL LETTER e WITH ACUTE ACCENT		 Latin-1
000    234    14/10   LATIN SMALL LETTER e WITH CIRCUMFLEX ACCENT	 Latin-1
000    235    14/11   LATIN SMALL LETTER e WITH DIAERESIS		 Latin-1
000    236    14/12   LATIN SMALL LETTER i WITH GRAVE ACCENT		 Latin-1
000    237    14/13   LATIN SMALL LETTER i WITH ACUTE ACCENT		 Latin-1
000    238    14/14   LATIN SMALL LETTER i WITH CIRCUMFLEX ACCENT	 Latin-1
000    239    14/15   LATIN SMALL LETTER i WITH DIAERESIS		 Latin-1
000    240    15/00   ICELANDIC SMALL LETTER ETH			 Latin-1
000    241    15/01   LATIN SMALL LETTER n WITH TILDE			 Latin-1
000    242    15/02   LATIN SMALL LETTER o WITH GRAVE ACCENT		 Latin-1
000    243    15/03   LATIN SMALL LETTER o WITH ACUTE ACCENT		 Latin-1
000    244    15/04   LATIN SMALL LETTER o WITH CIRCUMFLEX ACCENT	 Latin-1
000    245    15/05   LATIN SMALL LETTER o WITH TILDE			 Latin-1
000    246    15/06   LATIN SMALL LETTER o WITH DIAERESIS		 Latin-1
000    247    15/07   DIVISION SIGN					 Latin-1
000    248    15/08   LATIN SMALL LETTER o WITH OBLIQUE STROKE		 Latin-1
000    249    15/09   LATIN SMALL LETTER u WITH GRAVE ACCENT		 Latin-1
000    250    15/10   LATIN SMALL LETTER u WITH ACUTE ACCENT		 Latin-1
000    251    15/11   LATIN SMALL LETTER u WITH CIRCUMFLEX ACCENT	 Latin-1
000    252    15/12   LATIN SMALL LETTER u WITH DIAERESIS		 Latin-1
000    253    15/13   LATIN SMALL LETTER y WITH ACUTE ACCENT		 Latin-1
000    254    15/14   ICELANDIC SMALL LETTER THORN			 Latin-1
000    255    15/15   LATIN SMALL LETTER y WITH DIAERESIS		 Latin-1


001    161    10/01   LATIN CAPITAL LETTER A WITH OGONEK		 Latin-2
001    162    10/02   BREVE						 Latin-2
001    163    10/03   LATIN CAPITAL LETTER L WITH STROKE		 Latin-2
001    165    10/05   LATIN CAPITAL LETTER L WITH CARON 		 Latin-2
001    166    10/06   LATIN CAPITAL LETTER S WITH ACUTE ACCENT		 Latin-2
001    169    10/09   LATIN CAPITAL LETTER S WITH CARON 		 Latin-2
001    170    10/10   LATIN CAPITAL LETTER S WITH CEDILLA		 Latin-2
001    171    10/11   LATIN CAPITAL LETTER T WITH CARON 		 Latin-2
001    172    10/12   LATIN CAPITAL LETTER Z WITH ACUTE ACCENT		 Latin-2
001    174    10/14   LATIN CAPITAL LETTER Z WITH CARON 		 Latin-2
001    175    10/15   LATIN CAPITAL LETTER Z WITH DOT ABOVE		 Latin-2
001    177    11/01   LATIN SMALL LETTER a WITH OGONEK			 Latin-2
001    178    11/02   OGONEK						 Latin-2
001    179    11/03   LATIN SMALL LETTER l WITH STROKE			 Latin-2
001    181    11/05   LATIN SMALL LETTER l WITH CARON			 Latin-2
001    182    11/06   LATIN SMALL LETTER s WITH ACUTE ACCENT		 Latin-2
001    183    11/07   CARON						 Latin-2
001    185    11/09   LATIN SMALL LETTER s WITH CARON			 Latin-2
001    186    11/10   LATIN SMALL LETTER s WITH CEDILLA 		 Latin-2
001    187    11/11   LATIN SMALL LETTER t WITH CARON			 Latin-2




			     130





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
001    188    11/12   LATIN SMALL LETTER z WITH ACUTE ACCENT		 Latin-2
001    189    11/13   DOUBLE ACUTE ACCENT				 Latin-2
001    190    11/14   LATIN SMALL LETTER z WITH CARON			 Latin-2
001    191    11/15   LATIN SMALL LETTER z WITH DOT ABOVE		 Latin-2
001    192    12/00   LATIN CAPITAL LETTER R WITH ACUTE ACCENT		 Latin-2
001    195    12/03   LATIN CAPITAL LETTER A WITH BREVE 		 Latin-2
001    197    12/05   LATIN CAPITAL LETTER L WITH ACUTE ACCENT		 Latin-2
001    198    12/06   LATIN CAPITAL LETTER C WITH ACUTE ACCENT		 Latin-2
001    200    12/08   LATIN CAPITAL LETTER C WITH CARON 		 Latin-2
001    202    12/10   LATIN CAPITAL LETTER E WITH OGONEK		 Latin-2
001    204    12/12   LATIN CAPITAL LETTER E WITH CARON 		 Latin-2
001    207    12/15   LATIN CAPITAL LETTER D WITH CARON 		 Latin-2
001    208    13/00   LATIN CAPITAL LETTER D WITH STROKE		 Latin-2
001    209    13/01   LATIN CAPITAL LETTER N WITH ACUTE ACCENT		 Latin-2
001    210    13/02   LATIN CAPITAL LETTER N WITH CARON 		 Latin-2
001    213    13/05   LATIN CAPITAL LETTER O WITH DOUBLE ACUTE ACCENT	 Latin-2
001    216    13/08   LATIN CAPITAL LETTER R WITH CARON 		 Latin-2
001    217    13/09   LATIN CAPITAL LETTER U WITH RING ABOVE		 Latin-2
001    219    13/11   LATIN CAPITAL LETTER U WITH DOUBLE ACUTE ACCENT	 Latin-2
001    222    13/14   LATIN CAPITAL LETTER T WITH CEDILLA		 Latin-2
001    224    14/00   LATIN SMALL LETTER r WITH ACUTE ACCENT		 Latin-2
001    227    14/03   LATIN SMALL LETTER a WITH BREVE			 Latin-2
001    229    14/05   LATIN SMALL LETTER l WITH ACUTE ACCENT		 Latin-2
001    230    14/06   LATIN SMALL LETTER c WITH ACUTE ACCENT		 Latin-2
001    232    14/08   LATIN SMALL LETTER c WITH CARON			 Latin-2
001    234    14/10   LATIN SMALL LETTER e WITH OGONEK			 Latin-2
001    236    14/12   LATIN SMALL LETTER e WITH CARON			 Latin-2
001    239    14/15   LATIN SMALL LETTER d WITH CARON			 Latin-2
001    240    15/00   LATIN SMALL LETTER d WITH STROKE			 Latin-2
001    241    15/01   LATIN SMALL LETTER n WITH ACUTE ACCENT		 Latin-2
001    242    15/02   LATIN SMALL LETTER n WITH CARON			 Latin-2
001    245    15/05   LATIN SMALL LETTER o WITH DOUBLE ACUTE ACCENT	 Latin-2
001    248    15/08   LATIN SMALL LETTER r WITH CARON			 Latin-2
001    249    15/09   LATIN SMALL LETTER u WITH RING ABOVE		 Latin-2
001    251    15/11   LATIN SMALL LETTER u WITH DOUBLE ACUTE ACCENT	 Latin-2
001    254    15/14   LATIN SMALL LETTER t WITH CEDILLA 		 Latin-2
001    255    15/15   DOT ABOVE 					 Latin-2


002    161    10/01   LATIN CAPITAL LETTER H WITH STROKE		 Latin-3
002    166    10/06   LATIN CAPITAL LETTER H WITH CIRCUMFLEX ACCENT	 Latin-3
002    169    10/09   LATIN CAPITAL LETTER I WITH DOT ABOVE		 Latin-3
002    171    10/11   LATIN CAPITAL LETTER G WITH BREVE 		 Latin-3
002    172    10/12   LATIN CAPITAL LETTER J WITH CIRCUMFLEX ACCENT	 Latin-3
002    177    11/01   LATIN SMALL LETTER h WITH STROKE			 Latin-3
002    182    11/06   LATIN SMALL LETTER h WITH CIRCUMFLEX ACCENT	 Latin-3
002    185    11/09   SMALL DOTLESS LETTER i				 Latin-3
002    187    11/11   LATIN SMALL LETTER g WITH BREVE			 Latin-3
002    188    11/12   LATIN SMALL LETTER j WITH CIRCUMFLEX ACCENT	 Latin-3




			     131





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
002    197    12/05   LATIN CAPITAL LETTER C WITH DOT ABOVE		 Latin-3
002    198    12/06   LATIN CAPITAL LETTER C WITH CIRCUMFLEX ACCENT	 Latin-3
002    213    13/05   LATIN CAPITAL LETTER G WITH DOT ABOVE		 Latin-3
002    216    13/08   LATIN CAPITAL LETTER G WITH CIRCUMFLEX ACCENT	 Latin-3
002    221    13/13   LATIN CAPITAL LETTER U WITH BREVE 		 Latin-3
002    222    13/14   LATIN CAPITAL LETTER S WITH CIRCUMFLEX ACCENT	 Latin-3
002    229    14/05   LATIN SMALL LETTER c WITH DOT ABOVE		 Latin-3
002    230    14/06   LATIN SMALL LETTER c WITH CIRCUMFLEX ACCENT	 Latin-3
002    245    15/05   LATIN SMALL LETTER g WITH DOT ABOVE		 Latin-3
002    248    15/08   LATIN SMALL LETTER g WITH CIRCUMFLEX ACCENT	 Latin-3
002    253    15/13   LATIN SMALL LETTER u WITH BREVE			 Latin-3
002    254    15/14   LATIN SMALL LETTER s WITH CIRCUMFLEX ACCENT	 Latin-3


003    162    10/02   SMALL GREENLANDIC LETTER KRA			 Latin-4
003    163    10/03   LATIN CAPITAL LETTER R WITH CEDILLA		 Latin-4
003    165    10/05   LATIN CAPITAL LETTER I WITH TILDE 		 Latin-4
003    166    10/06   LATIN CAPITAL LETTER L WITH CEDILLA		 Latin-4
003    170    10/10   LATIN CAPITAL LETTER E WITH MACRON		 Latin-4
003    171    10/11   LATIN CAPITAL LETTER G WITH CEDILLA		 Latin-4
003    172    10/12   LATIN CAPITAL LETTER T WITH OBLIQUE STROKE	 Latin-4
003    179    11/03   LATIN SMALL LETTER r WITH CEDILLA 		 Latin-4
003    181    11/05   LATIN SMALL LETTER i WITH TILDE			 Latin-4
003    182    11/06   LATIN SMALL LETTER l WITH CEDILLA 		 Latin-4
003    186    11/10   LATIN SMALL LETTER e WITH MACRON			 Latin-4
003    187    11/11   LATIN SMALL LETTER g WITH CEDILLA ABOVE		 Latin-4
003    188    11/12   LATIN SMALL LETTER t WITH OBLIQUE STROKE		 Latin-4
003    189    11/13   LAPPISH CAPITAL LETTER ENG			 Latin-4
003    191    11/15   LAPPISH SMALL LETTER ENG				 Latin-4
003    192    12/00   LATIN CAPITAL LETTER A WITH MACRON		 Latin-4
003    199    12/07   LATIN CAPITAL LETTER I WITH OGONEK		 Latin-4
003    204    12/12   LATIN CAPITAL LETTER E WITH DOT ABOVE		 Latin-4
003    207    12/15   LATIN CAPITAL LETTER I WITH MACRON		 Latin-4
003    209    13/01   LATIN CAPITAL LETTER N WITH CEDILLA		 Latin-4
003    210    13/02   LATIN CAPITAL LETTER O WITH MACRON		 Latin-4
003    211    13/03   LATIN CAPITAL LETTER K WITH CEDILLA		 Latin-4
003    217    13/09   LATIN CAPITAL LETTER U WITH OGONEK		 Latin-4
003    221    13/13   LATIN CAPITAL LETTER U WITH TILDE 		 Latin-4
003    222    13/14   LATIN CAPITAL LETTER U WITH MACRON		 Latin-4
003    224    14/00   LATIN SMALL LETTER a WITH MACRON			 Latin-4
003    231    14/07   LATIN SMALL LETTER i WITH OGONEK			 Latin-4
003    236    14/12   LATIN SMALL LETTER e WITH DOT ABOVE		 Latin-4
003    239    14/15   LATIN SMALL LETTER i WITH MACRON			 Latin-4
003    241    15/01   LATIN SMALL LETTER n WITH CEDILLA 		 Latin-4
003    242    15/02   LATIN SMALL LETTER o WITH MACRON			 Latin-4
003    243    15/03   LATIN SMALL LETTER k WITH CEDILLA 		 Latin-4
003    249    15/09   LATIN SMALL LETTER u WITH OGONEK			 Latin-4
003    253    15/13   LATIN SMALL LETTER u WITH TILDE			 Latin-4
003    254    15/14   LATIN SMALL LETTER u WITH MACRON			 Latin-4




			     132





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
004    126    07/14   OVERLINE						 Kana
004    161    10/01   KANA FULL STOP					 Kana
004    162    10/02   KANA OPENING BRACKET				 Kana
004    163    10/03   KANA CLOSING BRACKET				 Kana
004    164    10/04   KANA COMMA					 Kana
004    165    10/05   KANA CONJUNCTIVE					 Kana
004    166    10/06   KANA LETTER WO					 Kana
004    167    10/07   KANA LETTER SMALL A				 Kana
004    168    10/08   KANA LETTER SMALL I				 Kana
004    169    10/09   KANA LETTER SMALL U				 Kana
004    170    10/10   KANA LETTER SMALL E				 Kana
004    171    10/11   KANA LETTER SMALL O				 Kana
004    172    10/12   KANA LETTER SMALL YA				 Kana
004    173    10/13   KANA LETTER SMALL YU				 Kana
004    174    10/14   KANA LETTER SMALL YO				 Kana
004    175    10/15   KANA LETTER SMALL TSU				 Kana
004    176    11/00   PROLONGED SOUND SYMBOL				 Kana
004    177    11/01   KANA LETTER A					 Kana
004    178    11/02   KANA LETTER I					 Kana
004    179    11/03   KANA LETTER U					 Kana
004    180    11/04   KANA LETTER E					 Kana
004    181    11/05   KANA LETTER O					 Kana
004    182    11/06   KANA LETTER KA					 Kana
004    183    11/07   KANA LETTER KI					 Kana
004    184    11/08   KANA LETTER KU					 Kana
004    185    11/09   KANA LETTER KE					 Kana
004    186    11/10   KANA LETTER KO					 Kana
004    187    11/11   KANA LETTER SA					 Kana
004    188    11/12   KANA LETTER SHI					 Kana
004    189    11/13   KANA LETTER SU					 Kana
004    190    11/14   KANA LETTER SE					 Kana
004    191    11/15   KANA LETTER SO					 Kana
004    192    12/00   KANA LETTER TA					 Kana
004    193    12/01   KANA LETTER CHI					 Kana
004    194    12/02   KANA LETTER TSU					 Kana
004    195    12/03   KANA LETTER TE					 Kana
004    196    12/04   KANA LETTER TO					 Kana
004    197    12/05   KANA LETTER NA					 Kana
004    198    12/06   KANA LETTER NI					 Kana
004    199    12/07   KANA LETTER NU					 Kana
004    200    12/08   KANA LETTER NE					 Kana
004    201    12/09   KANA LETTER NO					 Kana
004    202    12/10   KANA LETTER HA					 Kana
004    203    12/11   KANA LETTER HI					 Kana
004    204    12/12   KANA LETTER FU					 Kana
004    205    12/13   KANA LETTER HE					 Kana
004    206    12/14   KANA LETTER HO					 Kana
004    207    12/15   KANA LETTER MA					 Kana
004    208    13/00   KANA LETTER MI					 Kana




			     133





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
004    209    13/01   KANA LETTER MU					 Kana
004    210    13/02   KANA LETTER ME					 Kana
004    211    13/03   KANA LETTER MO					 Kana
004    212    13/04   KANA LETTER YA					 Kana
004    213    13/05   KANA LETTER YU					 Kana
004    214    13/06   KANA LETTER YO					 Kana
004    215    13/07   KANA LETTER RA					 Kana
004    216    13/08   KANA LETTER RI					 Kana
004    217    13/09   KANA LETTER RU					 Kana
004    218    13/10   KANA LETTER RE					 Kana
004    219    13/11   KANA LETTER RO					 Kana
004    220    13/12   KANA LETTER WA					 Kana
004    221    13/13   KANA LETTER N					 Kana
004    222    13/14   VOICED SOUND SYMBOL				 Kana
004    223    13/15   SEMIVOICED SOUND SYMBOL				 Kana


005    172    10/12   ARABIC COMMA					 Arabic
005    187    11/11   ARABIC SEMICOLON					 Arabic
005    191    11/15   ARABIC QUESTION MARK				 Arabic
005    193    12/01   ARABIC LETTER HAMZA				 Arabic
005    194    12/02   ARABIC LETTER MADDA ON ALEF			 Arabic
005    195    12/03   ARABIC LETTER HAMZA ON ALEF			 Arabic
005    196    12/04   ARABIC LETTER HAMZA ON WAW			 Arabic
005    197    12/05   ARABIC LETTER HAMZA UNDER ALEF			 Arabic
005    198    12/06   ARABIC LETTER HAMZA ON YEH			 Arabic
005    199    12/07   ARABIC LETTER ALEF				 Arabic
005    200    12/08   ARABIC LETTER BEH 				 Arabic
005    201    12/09   ARABIC LETTER TEH MARBUTA 			 Arabic
005    202    12/10   ARABIC LETTER TEH 				 Arabic
005    203    12/11   ARABIC LETTER THEH				 Arabic
005    204    12/12   ARABIC LETTER JEEM				 Arabic
005    205    12/13   ARABIC LETTER HAH 				 Arabic
005    206    12/14   ARABIC LETTER KHAH				 Arabic
005    207    12/15   ARABIC LETTER DAL 				 Arabic
005    208    13/00   ARABIC LETTER THAL				 Arabic
005    209    13/01   ARABIC LETTER RA					 Arabic
005    210    13/02   ARABIC LETTER ZAIN				 Arabic
005    211    13/03   ARABIC LETTER SEEN				 Arabic
005    212    13/04   ARABIC LETTER SHEEN				 Arabic
005    213    13/05   ARABIC LETTER SAD 				 Arabic
005    214    13/06   ARABIC LETTER DAD 				 Arabic
005    215    13/07   ARABIC LETTER TAH 				 Arabic
005    216    13/08   ARABIC LETTER ZAH 				 Arabic
005    217    13/09   ARABIC LETTER AIN 				 Arabic
005    218    13/10   ARABIC LETTER GHAIN				 Arabic
005    224    14/00   ARABIC LETTER TATWEEL				 Arabic
005    225    14/01   ARABIC LETTER FEH 				 Arabic
005    226    14/02   ARABIC LETTER QAF 				 Arabic




			     134





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
005    227    14/03   ARABIC LETTER KAF 				 Arabic
005    228    14/04   ARABIC LETTER LAM 				 Arabic
005    229    14/05   ARABIC LETTER MEEM				 Arabic
005    230    14/06   ARABIC LETTER NOON				 Arabic
005    231    14/07   ARABIC LETTER HA					 Arabic
005    232    14/08   ARABIC LETTER WAW 				 Arabic
005    233    14/09   ARABIC LETTER ALEF MAKSURA			 Arabic
005    234    14/10   ARABIC LETTER YEH 				 Arabic
005    235    14/11   ARABIC LETTER FATHATAN				 Arabic
005    236    14/12   ARABIC LETTER DAMMATAN				 Arabic
005    237    14/13   ARABIC LETTER KASRATAN				 Arabic
005    238    14/14   ARABIC LETTER FATHA				 Arabic
005    239    14/15   ARABIC LETTER DAMMA				 Arabic
005    240    15/00   ARABIC LETTER KASRA				 Arabic
005    241    15/01   ARABIC LETTER SHADDA				 Arabic
005    242    15/02   ARABIC LETTER SUKUN				 Arabic


006    161    10/01   SERBOCROATION CYRILLIC SMALL LETTER DJE		 Cyrillic
006    162    10/02   MACEDONIAN CYRILLIC SMALL LETTER GJE		 Cyrillic
006    163    10/03   CYRILLIC SMALL LETTER IO				 Cyrillic
006    164    10/04   UKRAINIAN CYRILLIC SMALL LETTER IE		 Cyrillic
006    165    10/05   MACEDONIAN SMALL LETTER DSE			 Cyrillic
006    166    10/06   BYELORUSSIAN/UKRAINIAN CYRILLIC SMALL LETTER I	 Cyrillic
006    167    10/07   UKRAINIAN SMALL LETTER YI 			 Cyrillic
006    168    10/08   CYRILLIC SMALL LETTER JE				 Cyrillic
006    169    10/09   CYRILLIC SMALL LETTER LJE 			 Cyrillic
006    170    10/10   CYRILLIC SMALL LETTER NJE 			 Cyrillic
006    171    10/11   SERBIAN SMALL LETTER TSHE 			 Cyrillic
006    172    10/12   MACEDONIAN CYRILLIC SMALL LETTER KJE		 Cyrillic
006    174    10/14   BYELORUSSIAN SMALL LETTER SHORT U 		 Cyrillic
006    175    10/15   CYRILLIC SMALL LETTER DZHE			 Cyrillic
006    176    11/00   NUMERO SIGN					 Cyrillic
006    177    11/01   SERBOCROATIAN CYRILLIC CAPITAL LETTER DJE 	 Cyrillic
006    178    11/02   MACEDONIAN CYRILLIC CAPITAL LETTER GJE		 Cyrillic
006    179    11/03   CYRILLIC CAPITAL LETTER IO			 Cyrillic
006    180    11/04   UKRAINIAN CYRILLIC CAPITAL LETTER IE		 Cyrillic
006    181    11/05   MACEDONIAN CAPITAL LETTER DSE			 Cyrillic
006    182    11/06   BYELORUSSIAN/UKRAINIAN CYRILLIC CAPITAL LETTER I	 Cyrillic
006    183    11/07   UKRAINIAN CAPITAL LETTER YI			 Cyrillic
006    184    11/08   CYRILLIC CAPITAL LETTER JE			 Cyrillic
006    185    11/09   CYRILLIC CAPITAL LETTER LJE			 Cyrillic
006    186    11/10   CYRILLIC CAPITAL LETTER NJE			 Cyrillic
006    187    11/11   SERBIAN CAPITAL LETTER TSHE			 Cyrillic
006    188    11/12   MACEDONIAN CYRILLIC CAPITAL LETTER KJE		 Cyrillic
006    190    11/14   BYELORUSSIAN CAPITAL LETTER SHORT U		 Cyrillic
006    191    11/15   CYRILLIC CAPITAL LETTER DZHE			 Cyrillic
006    192    12/00   CYRILLIC SMALL LETTER YU				 Cyrillic
006    193    12/01   CYRILLIC SMALL LETTER A				 Cyrillic




			     135





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
006    194    12/02   CYRILLIC SMALL LETTER BE				 Cyrillic
006    195    12/03   CYRILLIC SMALL LETTER TSE 			 Cyrillic
006    196    12/04   CYRILLIC SMALL LETTER DE				 Cyrillic
006    197    12/05   CYRILLIC SMALL LETTER IE				 Cyrillic
006    198    12/06   CYRILLIC SMALL LETTER EF				 Cyrillic
006    199    12/07   CYRILLIC SMALL LETTER GHE 			 Cyrillic
006    200    12/08   CYRILLIC SMALL LETTER HA				 Cyrillic
006    201    12/09   CYRILLIC SMALL LETTER I				 Cyrillic
006    202    12/10   CYRILLIC SMALL LETTER SHORT I			 Cyrillic
006    203    12/11   CYRILLIC SMALL LETTER KA				 Cyrillic
006    204    12/12   CYRILLIC SMALL LETTER EL				 Cyrillic
006    205    12/13   CYRILLIC SMALL LETTER EM				 Cyrillic
006    206    12/14   CYRILLIC SMALL LETTER EN				 Cyrillic
006    207    12/15   CYRILLIC SMALL LETTER O				 Cyrillic
006    208    13/00   CYRILLIC SMALL LETTER PE				 Cyrillic
006    209    13/01   CYRILLIC SMALL LETTER YA				 Cyrillic
006    210    13/02   CYRILLIC SMALL LETTER ER				 Cyrillic
006    211    13/03   CYRILLIC SMALL LETTER ES				 Cyrillic
006    212    13/04   CYRILLIC SMALL LETTER TE				 Cyrillic
006    213    13/05   CYRILLIC SMALL LETTER U				 Cyrillic
006    214    13/06   CYRILLIC SMALL LETTER ZHE 			 Cyrillic
006    215    13/07   CYRILLIC SMALL LETTER VE				 Cyrillic
006    216    13/08   CYRILLIC SMALL SOFT SIGN				 Cyrillic
006    217    13/09   CYRILLIC SMALL LETTER YERU			 Cyrillic
006    218    13/10   CYRILLIC SMALL LETTER ZE				 Cyrillic
006    219    13/11   CYRILLIC SMALL LETTER SHA 			 Cyrillic
006    220    13/12   CYRILLIC SMALL LETTER E				 Cyrillic
006    221    13/13   CYRILLIC SMALL LETTER SHCHA			 Cyrillic
006    222    13/14   CYRILLIC SMALL LETTER CHE 			 Cyrillic
006    223    13/15   CYRILLIC SMALL HARD SIGN				 Cyrillic
006    224    14/00   CYRILLIC CAPITAL LETTER YU			 Cyrillic
006    225    14/01   CYRILLIC CAPITAL LETTER A 			 Cyrillic
006    226    14/02   CYRILLIC CAPITAL LETTER BE			 Cyrillic
006    227    14/03   CYRILLIC CAPITAL LETTER TSE			 Cyrillic
006    228    14/04   CYRILLIC CAPITAL LETTER DE			 Cyrillic
006    229    14/05   CYRILLIC CAPITAL LETTER IE			 Cyrillic
006    230    14/06   CYRILLIC CAPITAL LETTER EF			 Cyrillic
006    231    14/07   CYRILLIC CAPITAL LETTER GHE			 Cyrillic
006    232    14/08   CYRILLIC CAPITAL LETTER HA			 Cyrillic
006    233    14/09   CYRILLIC CAPITAL LETTER I 			 Cyrillic
006    234    14/10   CYRILLIC CAPITAL LETTER SHORT I			 Cyrillic
006    235    14/11   CYRILLIC CAPITAL LETTER KA			 Cyrillic
006    236    14/12   CYRILLIC CAPITAL LETTER EL			 Cyrillic
006    237    14/13   CYRILLIC CAPITAL LETTER EM			 Cyrillic
006    238    14/14   CYRILLIC CAPITAL LETTER EN			 Cyrillic
006    239    14/15   CYRILLIC CAPITAL LETTER O 			 Cyrillic
006    240    15/00   CYRILLIC CAPITAL LETTER PE			 Cyrillic
006    241    15/01   CYRILLIC CAPITAL LETTER YA			 Cyrillic
006    242    15/02   CYRILLIC CAPITAL LETTER ER			 Cyrillic




			     136





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
006    243    15/03   CYRILLIC CAPITAL LETTER ES			 Cyrillic
006    244    15/04   CYRILLIC CAPITAL LETTER TE			 Cyrillic
006    245    15/05   CYRILLIC CAPITAL LETTER U 			 Cyrillic
006    246    15/06   CYRILLIC CAPITAL LETTER ZHE			 Cyrillic
006    247    15/07   CYRILLIC CAPITAL LETTER VE			 Cyrillic
006    248    15/08   CYRILLIC CAPITAL SOFT SIGN			 Cyrillic
006    249    15/09   CYRILLIC CAPITAL LETTER YERU			 Cyrillic
006    250    15/10   CYRILLIC CAPITAL LETTER ZE			 Cyrillic
006    251    15/11   CYRILLIC CAPITAL LETTER SHA			 Cyrillic
006    252    15/12   CYRILLIC CAPITAL LETTER E 			 Cyrillic
006    253    15/13   CYRILLIC CAPITAL LETTER SHCHA			 Cyrillic
006    254    15/14   CYRILLIC CAPITAL LETTER CHE			 Cyrillic
006    255    15/15   CYRILLIC CAPITAL HARD SIGN			 Cyrillic


007    161    10/01   GREEK CAPITAL LETTER ALPHA WITH ACCENT		 Greek
007    162    10/02   GREEK CAPITAL LETTER EPSILON WITH ACCENT		 Greek
007    163    10/03   GREEK CAPITAL LETTER ETA WITH ACCENT		 Greek
007    164    10/04   GREEK CAPITAL LETTER IOTA WITH ACCENT		 Greek
007    165    10/05   GREEK CAPITAL LETTER IOTA WITH DIAERESIS		 Greek
007    167    10/07   GREEK CAPITAL LETTER OMICRON WITH ACCENT		 Greek
007    168    10/08   GREEK CAPITAL LETTER UPSILON WITH ACCENT		 Greek
007    169    10/09   GREEK CAPITAL LETTER UPSILON WITH DIAERESIS	 Greek
007    171    10/11   GREEK CAPITAL LETTER OMEGA WITH ACCENT		 Greek
007    174    10/14   DIAERESIS AND ACCENT				 Greek
007    175    10/15   HORIZONTAL BAR					 Greek
007    177    11/01   GREEK SMALL LETTER ALPHA WITH ACCENT		 Greek
007    178    11/02   GREEK SMALL LETTER EPSILON WITH ACCENT		 Greek
007    179    11/03   GREEK SMALL LETTER ETA WITH ACCENT		 Greek
007    180    11/04   GREEK SMALL LETTER IOTA WITH ACCENT		 Greek
007    181    11/05   GREEK SMALL LETTER IOTA WITH DIAERESIS		 Greek
007    182    11/06   GREEK SMALL LETTER IOTA WITH ACCENT+DIAERESIS	 Greek
007    183    11/07   GREEK SMALL LETTER OMICRON WITH ACCENT		 Greek
007    184    11/08   GREEK SMALL LETTER UPSILON WITH ACCENT		 Greek
007    185    11/09   GREEK SMALL LETTER UPSILON WITH DIAERESIS 	 Greek
007    186    11/10   GREEK SMALL LETTER UPSILON WITH ACCENT+DIAERESIS	 Greek
007    187    11/11   GREEK SMALL LETTER OMEGA WITH ACCENT		 Greek
007    193    12/01   GREEK CAPITAL LETTER ALPHA			 Greek
007    194    12/02   GREEK CAPITAL LETTER BETA 			 Greek
007    195    12/03   GREEK CAPITAL LETTER GAMMA			 Greek
007    196    12/04   GREEK CAPITAL LETTER DELTA			 Greek
007    197    12/05   GREEK CAPITAL LETTER EPSILON			 Greek
007    198    12/06   GREEK CAPITAL LETTER ZETA 			 Greek
007    199    12/07   GREEK CAPITAL LETTER ETA				 Greek
007    200    12/08   GREEK CAPITAL LETTER THETA			 Greek
007    201    12/09   GREEK CAPITAL LETTER IOTA 			 Greek
007    202    12/10   GREEK CAPITAL LETTER KAPPA			 Greek
007    203    12/11   GREEK CAPITAL LETTER LAMDA			 Greek
007    204    12/12   GREEK CAPITAL LETTER MU				 Greek




			     137





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
007    205    12/13   GREEK CAPITAL LETTER NU				 Greek
007    206    12/14   GREEK CAPITAL LETTER XI				 Greek
007    207    12/15   GREEK CAPITAL LETTER OMICRON			 Greek
007    208    13/00   GREEK CAPITAL LETTER PI				 Greek
007    209    13/01   GREEK CAPITAL LETTER RHO				 Greek
007    210    13/02   GREEK CAPITAL LETTER SIGMA			 Greek
007    212    13/04   GREEK CAPITAL LETTER TAU				 Greek
007    213    13/05   GREEK CAPITAL LETTER UPSILON			 Greek
007    214    13/06   GREEK CAPITAL LETTER PHI				 Greek
007    215    13/07   GREEK CAPITAL LETTER CHI				 Greek
007    216    13/08   GREEK CAPITAL LETTER PSI				 Greek
007    217    13/09   GREEK CAPITAL LETTER OMEGA			 Greek
007    225    14/01   GREEK SMALL LETTER ALPHA				 Greek
007    226    14/02   GREEK SMALL LETTER BETA				 Greek
007    227    14/03   GREEK SMALL LETTER GAMMA				 Greek
007    228    14/04   GREEK SMALL LETTER DELTA				 Greek
007    229    14/05   GREEK SMALL LETTER EPSILON			 Greek
007    230    14/06   GREEK SMALL LETTER ZETA				 Greek
007    231    14/07   GREEK SMALL LETTER ETA				 Greek
007    232    14/08   GREEK SMALL LETTER THETA				 Greek
007    233    14/09   GREEK SMALL LETTER IOTA				 Greek
007    234    14/10   GREEK SMALL LETTER KAPPA				 Greek
007    235    14/11   GREEK SMALL LETTER LAMDA				 Greek
007    236    14/12   GREEK SMALL LETTER MU				 Greek
007    237    14/13   GREEK SMALL LETTER NU				 Greek
007    238    14/14   GREEK SMALL LETTER XI				 Greek
007    239    14/15   GREEK SMALL LETTER OMICRON			 Greek
007    240    15/00   GREEK SMALL LETTER PI				 Greek
007    241    15/01   GREEK SMALL LETTER RHO				 Greek
007    242    15/02   GREEK SMALL LETTER SIGMA				 Greek
007    243    15/03   GREEK SMALL LETTER FINAL SMALL SIGMA		 Greek
007    244    15/04   GREEK SMALL LETTER TAU				 Greek
007    245    15/05   GREEK SMALL LETTER UPSILON			 Greek
007    246    15/06   GREEK SMALL LETTER PHI				 Greek
007    247    15/07   GREEK SMALL LETTER CHI				 Greek
007    248    15/08   GREEK SMALL LETTER PSI				 Greek
007    249    15/09   GREEK SMALL LETTER OMEGA				 Greek


008    161    10/01   LEFT RADICAL					 Technical
008    162    10/02   TOP LEFT RADICAL					 Technical
008    163    10/03   HORIZONTAL CONNECTOR				 Technical
008    164    10/04   TOP INTEGRAL					 Technical
008    165    10/05   BOTTOM INTEGRAL					 Technical
008    166    10/06   VERTICAL CONNECTOR				 Technical
008    167    10/07   TOP LEFT SQUARE BRACKET				 Technical
008    168    10/08   BOTTOM LEFT SQUARE BRACKET			 Technical
008    169    10/09   TOP RIGHT SQUARE BRACKET				 Technical
008    170    10/10   BOTTOM RIGHT SQUARE BRACKET			 Technical




			     138





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
008    171    10/11   TOP LEFT PARENTHESIS				 Technical
008    172    10/12   BOTTOM LEFT PARENTHESIS				 Technical
008    173    10/13   TOP RIGHT PARENTHESIS				 Technical
008    174    10/14   BOTTOM RIGHT PARENTHESIS				 Technical
008    175    10/15   LEFT MIDDLE CURLY BRACE				 Technical
008    176    11/00   RIGHT MIDDLE CURLY BRACE				 Technical
008    177    11/01   TOP LEFT SUMMATION				 Technical
008    178    11/02   BOTTOM LEFT SUMMATION				 Technical
008    179    11/03   TOP VERTICAL SUMMATION CONNECTOR			 Technical
008    180    11/04   BOTTOM VERTICAL SUMMATION CONNECTOR		 Technical
008    181    11/05   TOP RIGHT SUMMATION				 Technical
008    182    11/06   BOTTOM RIGHT SUMMATION				 Technical
008    183    11/07   RIGHT MIDDLE SUMMATION				 Technical
008    188    11/12   LESS THAN OR EQUAL SIGN				 Technical
008    189    11/13   NOT EQUAL SIGN					 Technical
008    190    11/14   GREATER THAN OR EQUAL SIGN			 Technical
008    191    11/15   INTEGRAL						 Technical
008    192    12/00   THEREFORE 					 Technical
008    193    12/01   VARIATION, PROPORTIONAL TO			 Technical
008    194    12/02   INFINITY						 Technical
008    197    12/05   NABLA, DEL					 Technical
008    200    12/08   IS APPROXIMATE TO 				 Technical
008    201    12/09   SIMILAR OR EQUAL TO				 Technical
008    205    12/13   IF AND ONLY IF					 Technical
008    206    12/14   IMPLIES						 Technical
008    207    12/15   IDENTICAL TO					 Technical
008    214    13/06   RADICAL						 Technical
008    218    13/10   IS INCLUDED IN					 Technical
008    219    13/11   INCLUDES						 Technical
008    220    13/12   INTERSECTION					 Technical
008    221    13/13   UNION						 Technical
008    222    13/14   LOGICAL AND					 Technical
008    223    13/15   LOGICAL OR					 Technical
008    239    14/15   PARTIAL DERIVATIVE				 Technical
008    246    15/06   FUNCTION						 Technical
008    251    15/11   LEFT ARROW					 Technical
008    252    15/12   UPWARD ARROW					 Technical
008    253    15/13   RIGHT ARROW					 Technical
008    254    15/14   DOWNWARD ARROW					 Technical


009    223    13/15   BLANK						 Special
009    224    14/00   SOLID DIAMOND					 Special
009    225    14/01   CHECKERBOARD					 Special
009    226    14/02   ``HT''						 Special
009    227    14/03   ``FF''						 Special
009    228    14/04   ``CR''						 Special
009    229    14/05   ``LF''						 Special
009    232    14/08   ``NL''						 Special




			     139





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
009    233    14/09   ``VT''						 Special
009    234    14/10   LOWER-RIGHT CORNER				 Special
009    235    14/11   UPPER-RIGHT CORNER				 Special
009    236    14/12   UPPER-LEFT CORNER 				 Special
009    237    14/13   LOWER-LEFT CORNER 				 Special
009    238    14/14   CROSSING-LINES					 Special
009    239    14/15   HORIZONTAL LINE, SCAN 1				 Special
009    240    15/00   HORIZONTAL LINE, SCAN 3				 Special
009    241    15/01   HORIZONTAL LINE, SCAN 5				 Special
009    242    15/02   HORIZONTAL LINE, SCAN 7				 Special
009    243    15/03   HORIZONTAL LINE, SCAN 9				 Special
009    244    15/04   LEFT ``T''					 Special
009    245    15/05   RIGHT ``T''					 Special
009    246    15/06   BOTTOM ``T''					 Special
009    247    15/07   TOP ``T'' 					 Special
009    248    15/08   VERTICAL BAR					 Special


010    161    10/01   EM SPACE						 Publish
010    162    10/02   EN SPACE						 Publish
010    163    10/03   3/EM SPACE					 Publish
010    164    10/04   4/EM SPACE					 Publish
010    165    10/05   DIGIT SPACE					 Publish
010    166    10/06   PUNCTUATION SPACE 				 Publish
010    167    10/07   THIN SPACE					 Publish
010    168    10/08   HAIR SPACE					 Publish
010    169    10/09   EM DASH						 Publish
010    170    10/10   EN DASH						 Publish
010    172    10/12   SIGNIFICANT BLANK SYMBOL				 Publish
010    174    10/14   ELLIPSIS						 Publish
010    175    10/15   DOUBLE BASELINE DOT				 Publish
010    176    11/00   VULGAR FRACTION ONE THIRD 			 Publish
010    177    11/01   VULGAR FRACTION TWO THIRDS			 Publish
010    178    11/02   VULGAR FRACTION ONE FIFTH 			 Publish
010    179    11/03   VULGAR FRACTION TWO FIFTHS			 Publish
010    180    11/04   VULGAR FRACTION THREE FIFTHS			 Publish
010    181    11/05   VULGAR FRACTION FOUR FIFTHS			 Publish
010    182    11/06   VULGAR FRACTION ONE SIXTH 			 Publish
010    183    11/07   VULGAR FRACTION FIVE SIXTHS			 Publish
010    184    11/08   CARE OF						 Publish
010    187    11/11   FIGURE DASH					 Publish
010    188    11/12   LEFT ANGLE BRACKET				 Publish
010    189    11/13   DECIMAL POINT					 Publish
010    190    11/14   RIGHT ANGLE BRACKET				 Publish
010    191    11/15   MARKER						 Publish
010    195    12/03   VULGAR FRACTION ONE EIGHTH			 Publish
010    196    12/04   VULGAR FRACTION THREE EIGHTHS			 Publish
010    197    12/05   VULGAR FRACTION FIVE EIGHTHS			 Publish
010    198    12/06   VULGAR FRACTION SEVEN EIGHTHS			 Publish




			     140





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
010    201    12/09   TRADEMARK SIGN					 Publish
010    202    12/10   SIGNATURE MARK					 Publish
010    203    12/11   TRADEMARK SIGN IN CIRCLE				 Publish
010    204    12/12   LEFT OPEN TRIANGLE				 Publish
010    205    12/13   RIGHT OPEN TRIANGLE				 Publish
010    206    12/14   EM OPEN CIRCLE					 Publish
010    207    12/15   EM OPEN RECTANGLE 				 Publish
010    208    13/00   LEFT SINGLE QUOTATION MARK			 Publish
010    209    13/01   RIGHT SINGLE QUOTATION MARK			 Publish
010    210    13/02   LEFT DOUBLE QUOTATION MARK			 Publish
010    211    13/03   RIGHT DOUBLE QUOTATION MARK			 Publish
010    212    13/04   PRESCRIPTION, TAKE, RECIPE			 Publish
010    214    13/06   MINUTES						 Publish
010    215    13/07   SECONDS						 Publish
010    217    13/09   LATIN CROSS					 Publish
010    218    13/10   HEXAGRAM						 Publish
010    219    13/11   FILLED RECTANGLE BULLET				 Publish
010    220    13/12   FILLED LEFT TRIANGLE BULLET			 Publish
010    221    13/13   FILLED RIGHT TRIANGLE BULLET			 Publish
010    222    13/14   EM FILLED CIRCLE					 Publish
010    223    13/15   EM FILLED RECTANGLE				 Publish
010    224    14/00   EN OPEN CIRCLE BULLET				 Publish
010    225    14/01   EN OPEN SQUARE BULLET				 Publish
010    226    14/02   OPEN RECTANGULAR BULLET				 Publish
010    227    14/03   OPEN TRIANGULAR BULLET UP 			 Publish
010    228    14/04   OPEN TRIANGULAR BULLET DOWN			 Publish
010    229    14/05   OPEN STAR 					 Publish
010    230    14/06   EN FILLED CIRCLE BULLET				 Publish
010    231    14/07   EN FILLED SQUARE BULLET				 Publish
010    232    14/08   FILLED TRIANGULAR BULLET UP			 Publish
010    233    14/09   FILLED TRIANGULAR BULLET DOWN			 Publish
010    234    14/10   LEFT POINTER					 Publish
010    235    14/11   RIGHT POINTER					 Publish
010    236    14/12   CLUB						 Publish
010    237    14/13   DIAMOND						 Publish
010    238    14/14   HEART						 Publish
010    240    15/00   MALTESE CROSS					 Publish
010    241    15/01   DAGGER						 Publish
010    242    15/02   DOUBLE DAGGER					 Publish
010    243    15/03   CHECK MARK, TICK					 Publish
010    244    15/04   BALLOT CROSS					 Publish
010    245    15/05   MUSICAL SHARP					 Publish
010    246    15/06   MUSICAL FLAT					 Publish
010    247    15/07   MALE SYMBOL					 Publish
010    248    15/08   FEMALE SYMBOL					 Publish
010    249    15/09   TELEPHONE SYMBOL					 Publish
010    250    15/10   TELEPHONE RECORDER SYMBOL 			 Publish
010    251    15/11   PHONOGRAPH COPYRIGHT SIGN 			 Publish
010    252    15/12   CARET						 Publish




			     141





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
010    253    15/13   SINGLE LOW QUOTATION MARK 			 Publish
010    254    15/14   DOUBLE LOW QUOTATION MARK 			 Publish
010    255    15/15   CURSOR						 Publish


011    163    10/03   LEFT CARET					 APL
011    166    10/06   RIGHT CARET					 APL
011    168    10/08   DOWN CARET					 APL
011    169    10/09   UP CARET						 APL
011    192    12/00   OVERBAR						 APL
011    194    12/02   DOWN TACK 					 APL
011    195    12/03   UP SHOE (CAP)					 APL
011    196    12/04   DOWN STILE					 APL
011    198    12/06   UNDERBAR						 APL
011    202    12/10   JOT						 APL
011    204    12/12   QUAD						 APL
011    206    12/14   UP TACK						 APL
011    207    12/15   CIRCLE						 APL
011    211    13/03   UP STILE						 APL
011    214    13/06   DOWN SHOE (CUP)					 APL
011    216    13/08   RIGHT SHOE					 APL
011    218    13/10   LEFT SHOE 					 APL
011    220    13/12   LEFT TACK 					 APL
011    252    15/12   RIGHT TACK					 APL


012    223    13/15   DOUBLE LOW LINE					 Hebrew
012    224    14/00   HEBREW LETTER ALEPH				 Hebrew
012    225    14/01   HEBREW LETTER BET 				 Hebrew
012    226    14/02   HEBREW LETTER GIMEL				 Hebrew
012    227    14/03   HEBREW LETTER DALET				 Hebrew
012    228    14/04   HEBREW LETTER HE					 Hebrew
012    229    14/05   HEBREW LETTER WAW 				 Hebrew
012    230    14/06   HEBREW LETTER ZAIN				 Hebrew
012    231    14/07   HEBREW LETTER CHET				 Hebrew
012    232    14/08   HEBREW LETTER TET 				 Hebrew
012    233    14/09   HEBREW LETTER YOD 				 Hebrew
012    234    14/10   HEBREW LETTER FINAL KAPH				 Hebrew
012    235    14/11   HEBREW LETTER KAPH				 Hebrew
012    236    14/12   HEBREW LETTER LAMED				 Hebrew
012    237    14/13   HEBREW LETTER FINAL MEM				 Hebrew
012    238    14/14   HEBREW LETTER MEM 				 Hebrew
012    239    14/15   HEBREW LETTER FINAL NUN				 Hebrew
012    240    15/00   HEBREW LETTER NUN 				 Hebrew
012    241    15/01   HEBREW LETTER SAMECH				 Hebrew
012    242    15/02   HEBREW LETTER A'YIN				 Hebrew
012    243    15/03   HEBREW LETTER FINAL PE				 Hebrew
012    244    15/04   HEBREW LETTER PE					 Hebrew
012    245    15/05   HEBREW LETTER FINAL ZADE				 Hebrew




			     142





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
012    246    15/06   HEBREW LETTER ZADE				 Hebrew
012    247    15/07   HEBREW QOPH					 Hebrew
012    248    15/08   HEBREW RESH					 Hebrew
012    249    15/09   HEBREW SHIN					 Hebrew
012    250    15/10   HEBREW TAW					 Hebrew


013    161    10/01   THAI KOKAI					 Thai
013    162    10/02   THAI KHOKHAI					 Thai
013    163    10/03   THAI KHOKHUAT					 Thai
013    164    10/04   THAI KHOKHWAI					 Thai
013    165    10/05   THAI KHOKHON					 Thai
013    166    10/06   THAI KHORAKHANG					 Thai
013    167    10/07   THAI NGONGU					 Thai
013    168    10/08   THAI CHOCHAN					 Thai
013    169    10/09   THAI CHOCHING					 Thai
013    170    10/10   THAI CHOCHANG					 Thai
013    171    10/11   THAI SOSO 					 Thai
013    172    10/12   THAI CHOCHOE					 Thai
013    173    10/13   THAI YOYING					 Thai
013    174    10/14   THAI DOCHADA					 Thai
013    175    10/15   THAI TOPATAK					 Thai
013    176    11/00   THAI THOTHAN					 Thai
013    177    11/01   THAI THONANGMONTHO				 Thai
013    178    11/02   THAI THOPHUTHAO					 Thai
013    179    11/03   THAI NONEN					 Thai
013    180    11/04   THAI DODEK					 Thai
013    181    11/05   THAI TOTAO					 Thai
013    182    11/06   THAI THOTHUNG					 Thai
013    183    11/07   THAI THOTHAHAN					 Thai
013    184    11/08   THAI THOTHONG					 Thai
013    185    11/09   THAI NONU 					 Thai
013    186    11/10   THAI BOBAIMAI					 Thai
013    187    11/11   THAI POPLA					 Thai
013    188    11/12   THAI PHOPHUNG					 Thai
013    189    11/13   THAI FOFA 					 Thai
013    190    11/14   THAI PHOPHAN					 Thai
013    191    11/15   THAI FOFAN					 Thai
013    192    12/00   THAI PHOSAMPHAO					 Thai
013    193    12/01   THAI MOMA 					 Thai
013    194    12/02   THAI YOYAK					 Thai
013    195    12/03   THAI RORUA					 Thai
013    196    12/04   THAI RU						 Thai
013    197    12/05   THAI LOLING					 Thai
013    198    12/06   THAI LU						 Thai
013    199    12/07   THAI WOWAEN					 Thai
013    200    12/08   THAI SOSALA					 Thai
013    201    12/09   THAI SORUSI					 Thai
013    202    12/10   THAI SOSUA					 Thai




			     143





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
013    203    12/11   THAI HOHIP					 Thai
013    204    12/12   THAI LOCHULA					 Thai
013    205    12/13   THAI OANG 					 Thai
013    206    12/14   THAI HONOKHUK					 Thai
013    207    12/15   THAI PAIYANNOI					 Thai
013    208    13/00   THAI SARAA					 Thai
013    209    13/01   THAI MAIHANAKAT					 Thai
013    210    13/02   THAI SARAAA					 Thai
013    211    13/03   THAI SARAAM					 Thai
013    212    13/04   THAI SARAI					 Thai
013    213    13/05   THAI SARAII					 Thai
013    214    13/06   THAI SARAUE					 Thai
013    215    13/07   THAI SARAUEE					 Thai
013    216    13/08   THAI SARAU					 Thai
013    217    13/09   THAI SARAUU					 Thai
013    218    13/10   THAI PHINTHU					 Thai
013    222    13/14   THAI MAIHANAKAT					 Thai
013    223    13/15   THAI BAHT 					 Thai
013    224    14/00   THAI SARAE					 Thai
013    225    14/01   THAI SARAAE					 Thai
013    226    14/02   THAI SARAO					 Thai
013    227    14/03   THAI SARAAIMAIMUAN				 Thai
013    228    14/04   THAI SARAAIMAIMALAI				 Thai
013    229    14/05   THAI LAKKHANGYAO					 Thai
013    230    14/06   THAI MAIYAMOK					 Thai
013    231    14/07   THAI MAITAIKHU					 Thai
013    232    14/08   THAI MAIEK					 Thai
013    233    14/09   THAI MAITHO					 Thai
013    234    14/10   THAI MAITRI					 Thai
013    235    14/11   THAI MAICHATTAWA					 Thai
013    236    14/12   THAI THANTHAKHAT					 Thai
013    237    14/13   THAI NIKHAHIT					 Thai
013    240    15/00   THAI LEKSUN					 Thai
013    241    15/01   THAI LEKNUNG					 Thai
013    242    15/02   THAI LEKSONG					 Thai
013    243    15/03   THAI LEKSAM					 Thai
013    244    15/04   THAI LEKSI					 Thai
013    245    15/05   THAI LEKHA					 Thai
013    246    15/06   THAI LEKHOK					 Thai
013    247    15/07   THAI LEKCHET					 Thai
013    248    15/08   THAI LEKPAET					 Thai
013    249    15/09   THAI LEKKAO					 Thai


014    161    10/01   HANGUL KIYEOG					 Korean
014    162    10/02   HANGUL SSANG KIYEOG				 Korean
014    163    10/03   HANGUL KIYEOG SIOS				 Korean
014    164    10/04   HANGUL NIEUN					 Korean
014    165    10/05   HANGUL NIEUN JIEUJ				 Korean




			     144





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
014    166    10/06   HANGUL NIEUN HIEUH				 Korean
014    167    10/07   HANGUL DIKEUD					 Korean
014    168    10/08   HANGUL SSANG DIKEUD				 Korean
014    169    10/09   HANGUL RIEUL					 Korean
014    170    10/10   HANGUL RIEUL KIYEOG				 Korean
014    171    10/11   HANGUL RIEUL MIEUM				 Korean
014    172    10/12   HANGUL RIEUL PIEUB				 Korean
014    173    10/13   HANGUL RIEUL SIOS 				 Korean
014    174    10/14   HANGUL RIEUL TIEUT				 Korean
014    175    10/15   HANGUL RIEUL PHIEUF				 Korean
014    176    11/00   HANGUL RIEUL HIEUH				 Korean
014    177    11/01   HANGUL MIEUM					 Korean
014    178    11/02   HANGUL PIEUB					 Korean
014    179    11/03   HANGUL SSANG PIEUB				 Korean
014    180    11/04   HANGUL PIEUB SIOS 				 Korean
014    181    11/05   HANGUL SIOS					 Korean
014    182    11/06   HANGUL SSANG SIOS 				 Korean
014    183    11/07   HANGUL IEUNG					 Korean
014    184    11/08   HANGUL JIEUJ					 Korean
014    185    11/09   HANGUL SSANG JIEUJ				 Korean
014    186    11/10   HANGUL CIEUC					 Korean
014    187    11/11   HANGUL KHIEUQ					 Korean
014    188    11/12   HANGUL TIEUT					 Korean
014    189    11/13   HANGUL PHIEUF					 Korean
014    190    11/14   HANGUL HIEUH					 Korean
014    191    11/15   HANGUL A						 Korean
014    192    12/00   HANGUL AE 					 Korean
014    193    12/01   HANGUL YA 					 Korean
014    194    12/02   HANGUL YAE					 Korean
014    195    12/03   HANGUL EO 					 Korean
014    196    12/04   HANGUL E						 Korean
014    197    12/05   HANGUL YEO					 Korean
014    198    12/06   HANGUL YE 					 Korean
014    199    12/07   HANGUL O						 Korean
014    200    12/08   HANGUL WA 					 Korean
014    201    12/09   HANGUL WAE					 Korean
014    202    12/10   HANGUL OE 					 Korean
014    203    12/11   HANGUL YO 					 Korean
014    204    12/12   HANGUL U						 Korean
014    205    12/13   HANGUL WEO					 Korean
014    206    12/14   HANGUL WE 					 Korean
014    207    12/15   HANGUL WI 					 Korean
014    208    13/00   HANGUL YU 					 Korean
014    209    13/01   HANGUL EU 					 Korean
014    210    13/02   HANGUL YI 					 Korean
014    211    13/03   HANGUL I						 Korean
014    212    13/04   HANGUL JONG SEONG KIYEOG				 Korean
014    213    13/05   HANGUL JONG SEONG SSANG KIYEOG			 Korean
014    214    13/06   HANGUL JONG SEONG KIYEOG SIOS			 Korean




			     145





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
014    215    13/07   HANGUL JONG SEONG NIEUN				 Korean
014    216    13/08   HANGUL JONG SEONG NIEUN JIEUJ			 Korean
014    217    13/09   HANGUL JONG SEONG NIEUN HIEUH			 Korean
014    218    13/10   HANGUL JONG SEONG DIKEUD				 Korean
014    219    13/11   HANGUL JONG SEONG RIEUL				 Korean
014    220    13/12   HANGUL JONG SEONG RIEUL KIYEOG			 Korean
014    221    13/13   HANGUL JONG SEONG RIEUL MIEUM			 Korean
014    222    13/14   HANGUL JONG SEONG RIEUL PIEUB			 Korean
014    223    13/15   HANGUL JONG SEONG RIEUL SIOS			 Korean
014    224    14/00   HANGUL JONG SEONG RIEUL TIEUT			 Korean
014    225    14/01   HANGUL JONG SEONG RIEUL PHIEUF			 Korean
014    226    14/02   HANGUL JONG SEONG RIEUL HIEUH			 Korean
014    227    14/03   HANGUL JONG SEONG MIEUM				 Korean
014    228    14/04   HANGUL JONG SEONG PIEUB				 Korean
014    229    14/05   HANGUL JONG SEONG PIEUB SIOS			 Korean
014    230    14/06   HANGUL JONG SEONG SIOS				 Korean
014    231    14/07   HANGUL JONG SEONG SSANG SIOS			 Korean
014    232    14/08   HANGUL JONG SEONG IEUNG				 Korean
014    233    14/09   HANGUL JONG SEONG JIEUJ				 Korean
014    234    14/10   HANGUL JONG SEONG CIEUC				 Korean
014    235    14/11   HANGUL JONG SEONG KHIEUQ				 Korean
014    236    14/12   HANGUL JONG SEONG TIEUT				 Korean
014    237    14/13   HANGUL JONG SEONG PHIEUF				 Korean
014    238    14/14   HANGUL JONG SEONG HIEUH				 Korean
014    239    14/15   HANGUL RIEUL YEORIN HIEUH 			 Korean
014    240    15/00   HANGUL SUNKYEONGEUM MIEUM 			 Korean
014    241    15/01   HANGUL SUNKYEONGEUM PIEUB 			 Korean
014    242    15/02   HANGUL PAN SIOS					 Korean
014    243    15/03   HANGUL KKOGJI DALRIN IEUNG			 Korean
014    244    15/04   HANGUL SUNKYEONGEUM PHIEUF			 Korean
014    245    15/05   HANGUL YEORIN HIEUH				 Korean
014    246    15/06   HANGUL ARAE A					 Korean
014    247    15/07   HANGUL ARAE AE					 Korean
014    248    15/08   HANGUL JONG SEONG PAN SIOS			 Korean
014    249    15/09   HANGUL JONG SEONG KKOGJI DALRIN IEUNG		 Korean
014    250    15/10   HANGUL JONG SEONG YEORIN HIEUH			 Korean
014    255    15/15   KOREAN WON					 Korean


019    188    11/12   LATIN CAPITAL DIPHTHONG OE			 Latin-9
019    189    11/13   LATIN SMALL DIPHTHONG oe				 Latin-9
019    190    11/14   LATIN CAPITAL LETTER Y WITH DIAERESIS		 Latin-9


032    160    10/00   CURRENCY ECU SIGN 				 Currency
032    161    10/01   CURRENCY COLON SIGN				 Currency
032    162    10/02   CURRENCY CRUZEIRO SIGN				 Currency
032    163    10/03   CURRENCY FRENCH FRANC SIGN			 Currency
032    164    10/04   CURRENCY LIRA SIGN				 Currency




			     146





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
032    165    10/05   CURRENCY MILL SIGN				 Currency
032    166    10/06   CURRENCY NAIRA SIGN				 Currency
032    167    10/07   CURRENCY PESETA SIGN				 Currency
032    168    10/08   CURRENCY RUPEE SIGN				 Currency
032    169    10/09   CURRENCY WON SIGN 				 Currency
032    170    10/10   CURRENCY NEW SHEQEL SIGN				 Currency
032    171    10/11   CURRENCY DONG SIGN				 Currency
032    172    10/12   CURRENCY EURO SIGN				 Currency


253    001    00/01   3270 DUPLICATE					 3270
253    002    00/02   3270 FIELDMARK					 3270
253    003    00/03   3270 RIGHT2					 3270
253    004    00/04   3270 LEFT2					 3270
253    005    00/05   3270 BACKTAB					 3270
253    006    00/06   3270 ERASEEOF					 3270
253    007    00/07   3270 ERASEINPUT					 3270
253    008    00/08   3270 RESET					 3270
253    009    00/09   3270 QUIT 					 3270
253    010    00/10   3270 PA1						 3270
253    011    00/11   3270 PA2						 3270
253    012    00/12   3270 PA3						 3270
253    013    00/13   3270 TEST 					 3270
253    014    00/14   3270 ATTN 					 3270
253    015    00/15   3270 CURSORBLINK					 3270
253    016    01/01   3270 ALTCURSOR					 3270
253    017    01/02   3270 KEYCLICK					 3270
253    018    01/03   3270 JUMP 					 3270
253    019    01/04   3270 IDENT					 3270
253    020    01/05   3270 RULE 					 3270
253    021    01/06   3270 COPY 					 3270
253    022    01/07   3270 PLAY 					 3270
253    023    01/08   3270 SETUP					 3270
253    024    01/09   3270 RECORD					 3270
253    025    01/10   3270 CHANGESCREEN 				 3270
253    026    01/11   3270 DELETEWORD					 3270
253    027    01/12   3270 EXSELECT					 3270
253    028    01/13   3270 CURSORSELECT 				 3270
253    029    01/14   3270 PRINTSCREEN					 3270
253    030    01/15   3270 ENTER					 3270


255    008    00/08   BACKSPACE, BACK SPACE, BACK CHAR			 Keyboard
255    009    00/09   TAB						 Keyboard
255    010    00/10   LINEFEED, LF					 Keyboard
255    011    00/11   CLEAR						 Keyboard
255    013    00/13   RETURN, ENTER					 Keyboard
255    019    01/03   PAUSE, HOLD					 Keyboard
255    020    01/04   SCROLL LOCK					 Keyboard




			     147





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
255    021    01/05   SYS REQ, SYSTEM REQUEST				 Keyboard
255    027    01/11   ESCAPE						 Keyboard
255    032    02/00   MULTI-KEY CHARACTER PREFACE			 Keyboard
255    033    02/01   KANJI, KANJI CONVERT				 Keyboard
255    034    02/02   MUHENKAN						 Keyboard
255    035    02/03   HENKAN MODE					 Keyboard
255    036    02/04   ROMAJI						 Keyboard
255    037    02/05   HIRAGANA						 Keyboard
255    038    02/06   KATAKANA						 Keyboard
255    039    02/07   HIRAGANA/KATAKANA TOGGLE				 Keyboard
255    040    02/08   ZENKAKU						 Keyboard
255    041    02/09   HANKAKU						 Keyboard
255    042    02/10   ZENKAKU/HANKAKU TOGGLE				 Keyboard
255    043    02/11   TOUROKU						 Keyboard
255    044    02/12   MASSYO						 Keyboard
255    045    02/13   KANA LOCK 					 Keyboard
255    046    02/14   KANA SHIFT					 Keyboard
255    047    02/15   EISU SHIFT					 Keyboard
255    048    03/00   EISU TOGGLE					 Keyboard
255    049    03/01   HANGUL START/STOP (TOGGLE)			 Keyboard
255    050    03/02   HANGUL START					 Keyboard
255    051    03/03   HANGUL END, ENGLISH START 			 Keyboard
255    052    03/04   START HANGUL/HANJA CONVERSION			 Keyboard
255    053    03/05   HANGUL JAMO MODE					 Keyboard
255    054    03/06   HANGUL ROMAJA MODE				 Keyboard
255    055    03/07   HANGUL CODE INPUT 				 Keyboard
255    056    03/08   HANGUL JEONJA MODE				 Keyboard
255    057    03/09   HANGUL BANJA MODE 				 Keyboard
255    058    03/10   HANGUL PREHANJA CONVERSION			 Keyboard
255    059    03/11   HANGUL POSTHANJA CONVERSION			 Keyboard
255    060    03/12   HANGUL SINGLE CANDIDATE				 Keyboard
255    061    03/13   HANGUL MULTIPLE CANDIDATE 			 Keyboard
255    062    03/14   HANGUL PREVIOUS CANDIDATE 			 Keyboard
255    063    03/15   HANGUL SPECIAL SYMBOLS				 Keyboard
255    080    05/00   HOME						 Keyboard
255    081    05/01   LEFT, MOVE LEFT, LEFT ARROW			 Keyboard
255    082    05/02   UP, MOVE UP, UP ARROW				 Keyboard
255    083    05/03   RIGHT, MOVE RIGHT, RIGHT ARROW			 Keyboard
255    084    05/04   DOWN, MOVE DOWN, DOWN ARROW			 Keyboard
255    085    05/05   PRIOR, PREVIOUS, PAGE UP				 Keyboard
255    086    05/06   NEXT, PAGE DOWN					 Keyboard
255    087    05/07   END, EOL						 Keyboard
255    088    05/08   BEGIN, BOL					 Keyboard
255    096    06/00   SELECT, MARK					 Keyboard
255    097    06/01   PRINT						 Keyboard
255    098    06/02   EXECUTE, RUN, DO					 Keyboard
255    099    06/03   INSERT, INSERT HERE				 Keyboard
255    101    06/05   UNDO, OOPS					 Keyboard
255    102    06/06   REDO, AGAIN					 Keyboard




			     148





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
255    103    06/07   MENU						 Keyboard
255    104    06/08   FIND, SEARCH					 Keyboard
255    105    06/09   CANCEL, STOP, ABORT, EXIT 			 Keyboard
255    106    06/10   HELP						 Keyboard
255    107    06/11   BREAK						 Keyboard
255    126    07/14   MODE SWITCH, SCRIPT SWITCH, CHARACTER SET SWITCH	 Keyboard
255    127    07/15   NUM LOCK						 Keyboard
255    128    08/00   KEYPAD SPACE					 Keyboard
255    137    08/09   KEYPAD TAB					 Keyboard
255    141    08/13   KEYPAD ENTER					 Keyboard
255    145    09/01   KEYPAD F1, PF1, A 				 Keyboard
255    146    09/02   KEYPAD F2, PF2, B 				 Keyboard
255    147    09/03   KEYPAD F3, PF3, C 				 Keyboard
255    148    09/04   KEYPAD F4, PF4, D 				 Keyboard
255    149    09/05   KEYPAD HOME					 Keyboard
255    150    09/06   KEYPAD LEFT					 Keyboard
255    151    09/07   KEYPAD UP 					 Keyboard
255    152    09/08   KEYPAD RIGHT					 Keyboard
255    153    09/09   KEYPAD DOWN					 Keyboard
255    154    09/10   KEYPAD PRIOR, PAGE UP				 Keyboard
255    155    09/11   KEYPAD NEXT, PAGE DOWN				 Keyboard
255    156    09/12   KEYPAD END					 Keyboard
255    157    09/13   KEYPAD BEGIN					 Keyboard
255    158    09/14   KEYPAD INSERT					 Keyboard
255    159    09/15   KEYPAD DELETE					 Keyboard
255    170    10/10   KEYPAD MULTIPLICATION SIGN, ASTERISK		 Keyboard
255    171    10/11   KEYPAD PLUS SIGN					 Keyboard
255    172    10/12   KEYPAD SEPARATOR, COMMA				 Keyboard
255    173    10/13   KEYPAD MINUS SIGN, HYPHEN 			 Keyboard
255    174    10/14   KEYPAD DECIMAL POINT, FULL STOP			 Keyboard
255    175    10/15   KEYPAD DIVISION SIGN, SOLIDUS			 Keyboard
255    176    11/00   KEYPAD DIGIT ZERO 				 Keyboard
255    177    11/01   KEYPAD DIGIT ONE					 Keyboard
255    178    11/02   KEYPAD DIGIT TWO					 Keyboard
255    179    11/03   KEYPAD DIGIT THREE				 Keyboard
255    180    11/04   KEYPAD DIGIT FOUR 				 Keyboard
255    181    11/05   KEYPAD DIGIT FIVE 				 Keyboard
255    182    11/06   KEYPAD DIGIT SIX					 Keyboard
255    183    11/07   KEYPAD DIGIT SEVEN				 Keyboard
255    184    11/08   KEYPAD DIGIT EIGHT				 Keyboard
255    185    11/09   KEYPAD DIGIT NINE 				 Keyboard
255    189    11/13   KEYPAD EQUALS SIGN				 Keyboard
255    190    11/14   F1						 Keyboard
255    191    11/15   F2						 Keyboard
255    192    12/00   F3						 Keyboard
255    193    12/01   F4						 Keyboard
255    194    12/02   F5						 Keyboard
255    195    12/03   F6						 Keyboard
255    196    12/04   F7						 Keyboard




			     149





X Protocol				    X11, Release 6.4


-----------------------------------------------------------------------------------
Byte   Byte   Code    Name						 Set
 3	4     Pos
-----------------------------------------------------------------------------------
255    197    12/05   F8						 Keyboard
255    198    12/06   F9						 Keyboard
255    199    12/07   F10						 Keyboard
255    200    12/08   F11, L1						 Keyboard
255    201    12/09   F12, L2						 Keyboard
255    202    12/10   F13, L3						 Keyboard
255    203    12/11   F14, L4						 Keyboard
255    204    12/12   F15, L5						 Keyboard
255    205    12/13   F16, L6						 Keyboard
255    206    12/14   F17, L7						 Keyboard
255    207    12/15   F18, L8						 Keyboard
255    208    13/00   F19, L9						 Keyboard
255    209    13/01   F20, L10						 Keyboard
255    210    13/02   F21, R1						 Keyboard
255    211    13/03   F22, R2						 Keyboard
255    212    13/04   F23, R3						 Keyboard
255    213    13/05   F24, R4						 Keyboard
255    214    13/06   F25, R5						 Keyboard
255    215    13/07   F26, R6						 Keyboard
255    216    13/08   F27, R7						 Keyboard
255    217    13/09   F28, R8						 Keyboard
255    218    13/10   F29, R9						 Keyboard
255    219    13/11   F30, R10						 Keyboard
255    220    13/12   F31, R11						 Keyboard
255    221    13/13   F32, R12						 Keyboard
255    222    13/14   F33, R13						 Keyboard
255    223    13/15   F34, R14						 Keyboard
255    224    14/00   F35, R15						 Keyboard
255    225    14/01   LEFT SHIFT					 Keyboard
255    226    14/02   RIGHT SHIFT					 Keyboard
255    227    14/03   LEFT CONTROL					 Keyboard
255    228    14/04   RIGHT CONTROL					 Keyboard
255    229    14/05   CAPS LOCK 					 Keyboard
255    230    14/06   SHIFT LOCK					 Keyboard
255    231    14/07   LEFT META 					 Keyboard
255    232    14/08   RIGHT META					 Keyboard
255    233    14/09   LEFT ALT						 Keyboard
255    234    14/10   RIGHT ALT 					 Keyboard
255    235    14/11   LEFT SUPER					 Keyboard
255    236    14/12   RIGHT SUPER					 Keyboard
255    237    14/13   LEFT HYPER					 Keyboard
255    238    14/14   RIGHT HYPER					 Keyboard
255    255    15/15   DELETE, RUBOUT					 Keyboard
-----------------------------------------------------------------------------------









			     150





X Protocol				    X11, Release 6.4




			 Appendix B

		     Protocol Encoding




Syntactic Conventions

All numbers are in decimal, unless prefixed with #x, in
which case they are in hexadecimal (base 16).

The general syntax used to describe requests, replies,
errors, events, and compound types is:


     NameofThing
       encode-form
       ...
       encode-form


Each encode-form describes a single component.

For components described in the protocol as:


     name: TYPE


the encode-form is:


     N	       TYPE name


N is the number of bytes occupied in the data stream, and
TYPE is the interpretation of those bytes.  For example,


     depth: CARD8


becomes:


     1	       CARD8	      depth


For components with a static numeric value the encode-form
is:




			     151





X Protocol				    X11, Release 6.4


     N	       value	      name


The value is always interpreted as an N-byte unsigned inte-
ger.  For example, the first two bytes of a Window error are
always zero (indicating an error in general) and three
(indicating the Window error in particular):


     1	       0    Error
     1	       3    code


For components described in the protocol as:

     name: {Name1,..., NameI}

the encode-form is:


     N		    name
	       value1 Name1
	       ...
	       valueI NameI


The value is always interpreted as an N-byte unsigned inte-
ger.  Note that the size of N is sometimes larger than that
strictly required to encode the values.  For example:

     class: {InputOutput, InputOnly, CopyFromParent}

becomes:


     2			      class
	       0    CopyFromParent
	       1    InputOutput
	       2    InputOnly


For components described in the protocol as:

     NAME: TYPE or Alternative1...or AlternativeI

the encode-form is:


     N	       TYPE	      NAME
	       value1	 Alternative1
	       ...
	       valueI	 AlternativeI





			     152





X Protocol				    X11, Release 6.4


The alternative values are guaranteed not to conflict with
the encoding of TYPE.  For example:

     destination: WINDOW or PointerWindow or InputFocus

becomes:


     4	       WINDOW	      destination
	       0    PointerWindow
	       1    InputFocus


For components described in the protocol as:


     value-mask: BITMASK


the encode-form is:


     N	       BITMASK	      value-mask
	       mask1	 mask-name1
	       ...
	       maskI	 mask-nameI


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-sig-
nificant 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.

For LISTofVALUE encodings, the request is followed by a sec-
tion of the form:


     VALUEs
      encode-form
      ...
      encode-form


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 num-
ber of bytes specified in the encoding-form indicates how



			     153





X Protocol				    X11, Release 6.4


many of the least-significant bytes are actually used; the
remaining bytes are unused and their values do not matter.

In various cases, the number of bytes occupied by a compo-
nent 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:


     2	       3+n	      request length
     4n        LISTofPOINT    points


For unused bytes (the values of the bytes are undefined and
do no matter), the encode-form is:


     N			 unused


If the number of unused bytes is variable, the encode-form
typically is:


     p			 unused, p=pad(E)


where E is some expression, and pad(E) is the number of
bytes needed to round E up to a multiple of four.


     pad(E) = (4 - (E mod 4)) mod 4


Common Types

LISTofFOO

     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.

SETofFOO

     A set is always represented by a bitmask, with a 1-bit
     indicating presence in the set.

BITMASK: CARD32




			     154





X Protocol				    X11, Release 6.4


WINDOW: CARD32

PIXMAP: CARD32

CURSOR: CARD32

FONT: CARD32

GCONTEXT: CARD32

COLORMAP: CARD32

DRAWABLE: CARD32

FONTABLE: CARD32

ATOM: CARD32

VISUALID: CARD32

BYTE: 8-bit value

INT8: 8-bit signed integer

INT16: 16-bit signed integer

INT32: 32-bit signed integer

CARD8: 8-bit unsigned integer

CARD16: 16-bit unsigned integer

CARD32: 32-bit unsigned integer

TIMESTAMP: CARD32


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



			     155





X Protocol				    X11, Release 6.4


       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
       #x00000001KeyPress
       #x00000002KeyRelease
       #x00000004ButtonPress
       #x00000008ButtonRelease
       #x00000010EnterWindow
       #x00000020LeaveWindow
       #x00000040PointerMotion
       #x00000080PointerMotionHint
       #x00000100Button1Motion
       #x00000200Button2Motion
       #x00000400Button3Motion
       #x00000800Button4Motion
       #x00001000Button5Motion
       #x00002000ButtonMotion
       #x00004000KeymapState
       #x00008000Exposure
       #x00010000VisibilityChange
       #x00020000StructureNotify
       #x00040000ResizeRedirect
       #x00080000SubstructureNotify
       #x00100000SubstructureRedirect
       #x00200000FocusChange
       #x00400000PropertyChange
       #x00800000ColormapChange
       #x01000000OwnerGrabButton
       #xFE000000unused but must be zero



SETofPOINTEREVENT
       encodings are the same as for SETofEVENT, except with
       #xFFFF8003unused but must be zero





			     156





X Protocol				    X11, Release 6.4


SETofDEVICEEVENT
       encodings are the same as for SETofEVENT, except with
       #xFFFFC0B0unused 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



			     157





X Protocol				    X11, Release 6.4


  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
  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


Errors


Request
  1  0			 Error
  1  1			 code
  2  CARD16		 sequence number
  4			 unused
  2  CARD16		 minor opcode
  1  CARD8		 major opcode
  21			 unused



Value
  1  0			 Error
  1  2			 code
  2  CARD16		 sequence number
  4  <32-bits>		 bad value
  2  CARD16		 minor opcode
  1  CARD8		 major opcode
  21			 unused



			     158





X Protocol				    X11, Release 6.4


Window
  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



Pixmap
  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



Atom
  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



Cursor
  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



Font
  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





			     159





X Protocol				    X11, Release 6.4


Match
  1  0			 Error
  1  8			 code
  2  CARD16		 sequence number
  4			 unused
  2  CARD16		 minor opcode
  1  CARD8		 major opcode
  21			 unused



Drawable
  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



Access
  1  0			 Error
  1  10 		 code
  2  CARD16		 sequence number
  4			 unused
  2  CARD16		 minor opcode
  1  CARD8		 major opcode
  21			 unused



Alloc
  1  0			 Error
  1  11 		 code
  2  CARD16		 sequence number
  4			 unused
  2  CARD16		 minor opcode
  1  CARD8		 major opcode
  21			 unused



Colormap
  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





			     160





X Protocol				    X11, Release 6.4


GContext
  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



IDChoice
  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



Name
  1  0			 Error
  1  15 		 code
  2  CARD16		 sequence number
  4			 unused
  2  CARD16		 minor opcode
  1  CARD8		 major opcode
  21			 unused



Length
  1  0			 Error
  1  16 		 code
  2  CARD16		 sequence number
  4			 unused
  2  CARD16		 minor opcode
  1  CARD8		 major opcode
  21			 unused



Implementation
  1  0			 Error
  1  17 		 code
  2  CARD16		 sequence number
  4			 unused
  2  CARD16		 minor opcode
  1  CARD8		 major opcode
  21			 unused





			     161





X Protocol				    X11, Release 6.4


Keyboards

KEYCODE values are always greater than 7 (and less than
256).

KEYSYM values with the bit #x10000000 set are reserved as
vendor-specific.

The names and encodings of the standard KEYSYM values are
contained in Appendix A, Keysym Encoding.

Pointers

BUTTON values are numbered starting with one.

Predefined Atoms


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_POSITION51
CUT_BUFFER4	 13	      UNDERLINE_THICKNESS52
CUT_BUFFER5	 14	      STRIKEOUT_ASCENT 53
CUT_BUFFER6	 15	      STRIKEOUT_DESCENT54
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



			     162





X Protocol				    X11, Release 6.4


WM_ICON_NAME	 37
WM_ICON_SIZE	 38
WM_NAME 	 39


Connection Setup

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 connec-
tions, displays on a given host are numbered starting from
0, and the server for display N listens and accepts connec-
tions on the object name obtained by concatenating ``X$X''
with the decimal representation of N, for example, X$X0 and
X$X1.

Information sent by the client at connection setup:


  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)


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.

Information received by the client if the connection is
refused:


  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)






			     163





X Protocol				    X11, Release 6.4


Information received by the client if further authentication
is required:


  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)


Information received by the client if the connection is
accepted:


  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)



FORMAT
  1  CARD8		 depth
  1  CARD8		 bits-per-pixel
  1  CARD8		 scanline-pad
  5			 unused






			     164





X Protocol				    X11, Release 6.4


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)



DEPTH
  1  CARD8		 depth
  1			 unused
  2  n			 number of VISUALTYPES in visuals
  4			 unused
  24n	       LISTofVISUALTYPEvisuals



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


Requests


CreateWindow



			     165





X Protocol				    X11, Release 6.4


  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



			     166





X Protocol				    X11, Release 6.4


  4  SETofDEVICEEVENT	 do-not-propagate-mask
  4  COLORMAP		 colormap
     0	       CopyFromParent
  4  CURSOR		 cursor
     0	       None



ChangeWindowAttributes
  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



GetWindowAttributes
  1  3			 opcode
  1			 unused
  2  2			 request length
  4  WINDOW		 window


 ->
  1  1			 Reply
  1			 backing-store
     0	       NotUseful
     1	       WhenMapped
     2	       Always
  2  CARD16		 sequence number
  4  3			 reply length
  4  VISUALID		 visual
  2			 class
     1	       InputOutput
     2	       InputOnly
  1  BITGRAVITY 	 bit-gravity
  1  WINGRAVITY 	 win-gravity
  4  CARD32		 backing-planes
  4  CARD32		 backing-pixel
  1  BOOL		 save-under
  1  BOOL		 map-is-installed
  1			 map-state
     0	       Unmapped
     1	       Unviewable
     2	       Viewable
  1  BOOL		 override-redirect
  4  COLORMAP		 colormap
     0	       None
  4  SETofEVENT 	 all-event-masks
  4  SETofEVENT 	 your-event-mask



			     167





X Protocol				    X11, Release 6.4


  2  SETofDEVICEEVENT	 do-not-propagate-mask
  2			 unused



DestroyWindow
  1  4			 opcode
  1			 unused
  2  2			 request length
  4  WINDOW		 window



DestroySubwindows
  1  5			 opcode
  1			 unused
  2  2			 request length
  4  WINDOW		 window



ChangeSaveSet
  1  6			 opcode
  1			 mode
     0	       Insert
     1	       Delete
  2  2			 request length
  4  WINDOW		 window



ReparentWindow
  1  7			 opcode
  1			 unused
  2  4			 request length
  4  WINDOW		 window
  4  WINDOW		 parent
  2  INT16		 x
  2  INT16		 y



MapWindow
  1  8			 opcode
  1			 unused
  2  2			 request length
  4  WINDOW		 window



MapSubwindows
  1  9			 opcode
  1			 unused
  2  2			 request length



			     168





X Protocol				    X11, Release 6.4


  4  WINDOW		 window



UnmapWindow
  1  10 		 opcode
  1			 unused
  2  2			 request length
  4  WINDOW		 window



UnmapSubwindows
  1  11 		 opcode
  1			 unused
  2  2			 request length
  4  WINDOW		 window



ConfigureWindow
  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



CirculateWindow



			     169





X Protocol				    X11, Release 6.4


  1  13 		 opcode
  1			 direction
     0	       RaiseLowest
     1	       LowerHighest
  2  2			 request length
  4  WINDOW		 window



GetGeometry
  1  14 		 opcode
  1			 unused
  2  2			 request length
  4  DRAWABLE		 drawable


 ->
  1  1			 Reply
  1  CARD8		 depth
  2  CARD16		 sequence number
  4  0			 reply length
  4  WINDOW		 root
  2  INT16		 x
  2  INT16		 y
  2  CARD16		 width
  2  CARD16		 height
  2  CARD16		 border-width
  10			 unused



QueryTree
  1  15 		 opcode
  1			 unused
  2  2			 request length
  4  WINDOW		 window


 ->
  1  1			 Reply
  1			 unused
  2  CARD16		 sequence number
  4  n			 reply length
  4  WINDOW		 root
  4  WINDOW		 parent
     0	       None
  2  n			 number of WINDOWs in children
  14			 unused
  4n LISTofWINDOW	 children



InternAtom
  1  16 		 opcode



			     170





X Protocol				    X11, Release 6.4


  1  BOOL		 only-if-exists
  2  2+(n+p)/4		 request length
  2  n			 length of name
  2			 unused
  n  STRING8		 name
  p			 unused, p=pad(n)


 ->
  1  1			 Reply
  1			 unused
  2  CARD16		 sequence number
  4  0			 reply length
  4  ATOM		 atom
     0	       None
  20			 unused



GetAtomName
  1  17 		 opcode
  1			 unused
  2  2			 request length
  4  ATOM		 atom


 ->
  1  1			 Reply
  1			 unused
  2  CARD16		 sequence number
  4  (n+p)/4		 reply length
  2  n			 length of name
  22			 unused
  n  STRING8		 name
  p			 unused, p=pad(n)



ChangeProperty
  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)



			     171





X Protocol				    X11, Release 6.4


  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)



DeleteProperty
  1  19 		 opcode
  1			 unused
  2  3			 request length
  4  WINDOW		 window
  4  ATOM		 property



GetProperty
  1  20 		 opcode
  1  BOOL		 delete
  2  6			 request length
  4  WINDOW		 window
  4  ATOM		 property
  4  ATOM		 type
     0	       AnyPropertyType
  4  CARD32		 long-offset
  4  CARD32		 long-length


 ->
  1  1			 Reply
  1  CARD8		 format
  2  CARD16		 sequence number
  4  (n+p)/4		 reply length
  4  ATOM		 type
     0	       None
  4  CARD32		 bytes-after
  4  CARD32		 length of value in format units
			 (= 0 for format = 0)
			 (= n for format = 8)
			 (= n/2 for format = 16)
			 (= n/4 for format = 32)
  12			 unused
  n  LISTofBYTE 	 value
			 (n is zero for format = 0)
			 (n is a multiple of 2 for format = 16)
			 (n is a multiple of 4 for format = 32)
  p			 unused, p=pad(n)



ListProperties
  1  21 		 opcode
  1			 unused
  2  2			 request length



			     172





X Protocol				    X11, Release 6.4


  4  WINDOW		 window


 ->
  1  1			 Reply
  1			 unused
  2  CARD16		 sequence number
  4  n			 reply length
  2  n			 number of ATOMs in atoms
  22			 unused
  4n LISTofATOM 	 atoms



SetSelectionOwner
  1  22 		 opcode
  1			 unused
  2  4			 request length
  4  WINDOW		 owner
     0	       None
  4  ATOM		 selection
  4  TIMESTAMP		 time
     0	       CurrentTime



GetSelectionOwner
  1  23 		 opcode
  1			 unused
  2  2			 request length
  4  ATOM		 selection


 ->
  1  1			 Reply
  1			 unused
  2  CARD16		 sequence number
  4  0			 reply length
  4  WINDOW		 owner
     0	       None
  20			 unused



ConvertSelection
  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



			     173





X Protocol				    X11, Release 6.4


     0	       CurrentTime



SendEvent
  1  25 		 opcode
  1  BOOL		 propagate
  2  11 		 request length
  4  WINDOW		 destination
     0	       PointerWindow
     1	       InputFocus
  4  SETofEVENT 	 event-mask
  32			 event
     standard event format (see the Events section)



GrabPointer
  1  26 		 opcode
  1  BOOL		 owner-events
  2  6			 request length
  4  WINDOW		 grab-window
  2  SETofPOINTEREVENT	 event-mask
  1			 pointer-mode
     0	       Synchronous
     1	       Asynchronous
  1			 keyboard-mode
     0	       Synchronous
     1	       Asynchronous
  4  WINDOW		 confine-to
     0	       None
  4  CURSOR		 cursor
     0	       None
  4  TIMESTAMP		 time
     0	       CurrentTime


 ->
  1  1			 Reply
  1			 status
     0	       Success
     1	       AlreadyGrabbed
     2	       InvalidTime
     3	       NotViewable
     4	       Frozen
  2  CARD16		 sequence number
  4  0			 reply length
  24			 unused



UngrabPointer
  1  27 		 opcode
  1			 unused



			     174





X Protocol				    X11, Release 6.4


  2  2			 request length
  4  TIMESTAMP		 time
     0	       CurrentTime



GrabButton
  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



UngrabButton
  1  29 		 opcode
  1  BUTTON		 button
     0	       AnyButton
  2  3			 request length
  4  WINDOW		 grab-window
  2  SETofKEYMASK	 modifiers
     #x8000    AnyModifier
  2			 unused



ChangeActivePointerGrab
  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





			     175





X Protocol				    X11, Release 6.4


GrabKeyboard
  1  31 		 opcode
  1  BOOL		 owner-events
  2  4			 request length
  4  WINDOW		 grab-window
  4  TIMESTAMP		 time
     0	       CurrentTime
  1			 pointer-mode
     0	       Synchronous
     1	       Asynchronous
  1			 keyboard-mode
     0	       Synchronous
     1	       Asynchronous
  2			 unused


 ->
  1  1			 Reply
  1			 status
     0	       Success
     1	       AlreadyGrabbed
     2	       InvalidTime
     3	       NotViewable
     4	       Frozen
  2  CARD16		 sequence number
  4  0			 reply length
  24			 unused



UngrabKeyboard
  1  32 		 opcode
  1			 unused
  2  2			 request length
  4  TIMESTAMP		 time
     0	       CurrentTime



GrabKey
  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



			     176





X Protocol				    X11, Release 6.4


  3			 unused



UngrabKey
  1  34 		 opcode
  1  KEYCODE		 key
     0	       AnyKey
  2  3			 request length
  4  WINDOW		 grab-window
  2  SETofKEYMASK	 modifiers
     #x8000    AnyModifier
  2			 unused



AllowEvents
  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



GrabServer
  1  36 		 opcode
  1			 unused
  2  1			 request length



UngrabServer
  1  37 		 opcode
  1			 unused
  2  1			 request length



QueryPointer
  1  38 		 opcode
  1			 unused
  2  2			 request length
  4  WINDOW		 window





			     177





X Protocol				    X11, Release 6.4


 ->
  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



GetMotionEvents
  1  39 		 opcode
  1			 unused
  2  4			 request length
  4  WINDOW		 window
  4  TIMESTAMP		 start
     0	       CurrentTime
  4  TIMESTAMP		 stop
     0	       CurrentTime


 ->
  1  1			 Reply
  1			 unused
  2  CARD16		 sequence number
  4  2n 		 reply length
  4  n			 number of TIMECOORDs in events
  20			 unused
  8n LISTofTIMECOORD	 events



  TIMECOORD
  4  TIMESTAMP		 time
  2  INT16		 x
  2  INT16		 y



TranslateCoordinates
  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



			     178





X Protocol				    X11, Release 6.4


 ->
  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



WarpPointer
  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



SetInputFocus
  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



GetInputFocus
  1  43 		 opcode
  1			 unused
  2  1			 request length


 ->
  1  1			 Reply
  1			 revert-to



			     179





X Protocol				    X11, Release 6.4


     0	       None
     1	       PointerRoot
     2	       Parent
  2  CARD16		 sequence number
  4  0			 reply length
  4  WINDOW		 focus
     0	       None
     1	       PointerRoot
  20			 unused



QueryKeymap
  1  44 		 opcode
  1			 unused
  2  1			 request length


 ->
  1  1			 Reply
  1			 unused
  2  CARD16		 sequence number
  4  2			 reply length
  32 LISTofCARD8	 keys



OpenFont
  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)



CloseFont
  1  46 		 opcode
  1			 unused
  2  2			 request length
  4  FONT		 font



QueryFont
  1  47 		 opcode
  1			 unused
  2  2			 request length
  4  FONTABLE		 font





			     180





X Protocol				    X11, Release 6.4


 ->
  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	       LISTofCHARINFOchar-infos


  FONTPROP
  4  ATOM		 name
  4  <32-bits>		 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



QueryTextExtents
  1  48 		 opcode
  1  BOOL		 odd length, True if p = 2
  2  2+(2n+p)/4 	 request length
  4  FONTABLE		 font
  2n STRING16		 string
  p			 unused, p=pad(2n)


 ->
  1  1			 Reply
  1			 draw-direction



			     181





X Protocol				    X11, Release 6.4


     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



ListFonts
  1  49 		 opcode
  1			 unused
  2  2+(n+p)/4		 request length
  2  CARD16		 max-names
  2  n			 length of pattern
  n  STRING8		 pattern
  p			 unused, p=pad(n)


 ->
  1  1			 Reply
  1			 unused
  2  CARD16		 sequence number
  4  (n+p)/4		 reply length
  2  CARD16		 number of STRs in names
  22			 unused
  n  LISTofSTR		 names
  p			 unused, p=pad(n)



ListFontsWithInfo
  1  50 		 opcode
  1			 unused
  2  2+(n+p)/4		 request length
  2  CARD16		 max-names
  2  n			 length of pattern
  n  STRING8		 pattern
  p			 unused, p=pad(n)


 -> (except for last in series)
  1  1			 Reply
  1  n			 length of name in bytes
  2  CARD16		 sequence number
  4  7+2m+(n+p)/4	 reply length
  12 CHARINFO		 min-bounds
  4			 unused



			     182





X Protocol				    X11, Release 6.4


  12 CHARINFO		 max-bounds
  4			 unused
  2  CARD16		 min-char-or-byte2
  2  CARD16		 max-char-or-byte2
  2  CARD16		 default-char
  2  m			 number of FONTPROPs in properties
  1			 draw-direction
     0	       LeftToRight
     1	       RightToLeft
  1  CARD8		 min-byte1
  1  CARD8		 max-byte1
  1  BOOL		 all-chars-exist
  2  INT16		 font-ascent
  2  INT16		 font-descent
  4  CARD32		 replies-hint
  8m LISTofFONTPROP	 properties
  n  STRING8		 name
  p			 unused, p=pad(n)


  FONTPROP
  encodings are the same as for QueryFont

  CHARINFO
  encodings are the same as for QueryFont


 -> (last in series)
  1  1			 Reply
  1  0			 last-reply indicator
  2  CARD16		 sequence number
  4  7			 reply length
  52			 unused



SetFontPath
  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)



GetFontPath
  1  52 		 opcode
  1			 unused
  2  1			 request list


 ->



			     183





X Protocol				    X11, Release 6.4


  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)



CreatePixmap
  1  53 		 opcode
  1  CARD8		 depth
  2  4			 request length
  4  PIXMAP		 pid
  4  DRAWABLE		 drawable
  2  CARD16		 width
  2  CARD16		 height



FreePixmap
  1  54 		 opcode
  1			 unused
  2  2			 request length
  4  PIXMAP		 pixmap



CreateGC
  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



			     184





X Protocol				    X11, Release 6.4


     #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



			     185





X Protocol				    X11, Release 6.4


  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



ChangeGC
  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



CopyGC
  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



SetDashes
  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)






			     186





X Protocol				    X11, Release 6.4


SetClipRectangles
  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



FreeGC
  1  60 		 opcode
  1			 unused
  2  2			 request length
  4  GCONTEXT		 gc



ClearArea
  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



CopyArea
  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



CopyPlane
  1  63 		 opcode
  1			 unused



			     187





X Protocol				    X11, Release 6.4


  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



PolyPoint
  1  64 		 opcode
  1			 coordinate-mode
     0	       Origin
     1	       Previous
  2  3+n		 request length
  4  DRAWABLE		 drawable
  4  GCONTEXT		 gc
  4n LISTofPOINT	 points



PolyLine
  1  65 		 opcode
  1			 coordinate-mode
     0	       Origin
     1	       Previous
  2  3+n		 request length
  4  DRAWABLE		 drawable
  4  GCONTEXT		 gc
  4n LISTofPOINT	 points



PolySegment
  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





			     188





X Protocol				    X11, Release 6.4


PolyRectangle
  1  67 		 opcode
  1			 unused
  2  3+2n		 request length
  4  DRAWABLE		 drawable
  4  GCONTEXT		 gc
  8n LISTofRECTANGLE	 rectangles



PolyArc
  1  68 		 opcode
  1			 unused
  2  3+3n		 request length
  4  DRAWABLE		 drawable
  4  GCONTEXT		 gc
  12n	       LISTofARC arcs



FillPoly
  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



PolyFillRectangle
  1  70 		 opcode
  1			 unused
  2  3+2n		 request length
  4  DRAWABLE		 drawable
  4  GCONTEXT		 gc
  8n LISTofRECTANGLE	 rectangles



PolyFillArc
  1  71 		 opcode
  1			 unused
  2  3+3n		 request length
  4  DRAWABLE		 drawable
  4  GCONTEXT		 gc



			     189





X Protocol				    X11, Release 6.4


  12n	       LISTofARC arcs



PutImage
  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)



GetImage
  1  73 		 opcode
  1			 format
     1	       XYPixmap
     2	       ZPixmap
  2  5			 request length
  4  DRAWABLE		 drawable
  2  INT16		 x
  2  INT16		 y
  2  CARD16		 width
  2  CARD16		 height
  4  CARD32		 plane-mask


 ->
  1  1			 Reply
  1  CARD8		 depth
  2  CARD16		 sequence number
  4  (n+p)/4		 reply length
  4  VISUALID		 visual
     0	       None
  20			 unused
  n  LISTofBYTE 	 data
  p			 unused, p=pad(n)



PolyText8
  1  74 		 opcode



			     190





X Protocol				    X11, Release 6.4


  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)



PolyText16
  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)



ImageText8
  1  76 		 opcode
  1  n			 length of string
  2  4+(n+p)/4		 request length
  4  DRAWABLE		 drawable
  4  GCONTEXT		 gc



			     191





X Protocol				    X11, Release 6.4


  2  INT16		 x
  2  INT16		 y
  n  STRING8		 string
  p			 unused, p=pad(n)



ImageText16
  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)



CreateColormap
  1  78 		 opcode
  1			 alloc
     0	       None
     1	       All
  2  4			 request length
  4  COLORMAP		 mid
  4  WINDOW		 window
  4  VISUALID		 visual



FreeColormap
  1  79 		 opcode
  1			 unused
  2  2			 request length
  4  COLORMAP		 cmap



CopyColormapAndFree
  1  80 		 opcode
  1			 unused
  2  3			 request length
  4  COLORMAP		 mid
  4  COLORMAP		 src-cmap



InstallColormap
  1  81 		 opcode
  1			 unused
  2  2			 request length
  4  COLORMAP		 cmap



			     192





X Protocol				    X11, Release 6.4


UninstallColormap
  1  82 		 opcode
  1			 unused
  2  2			 request length
  4  COLORMAP		 cmap



ListInstalledColormaps
  1  83 		 opcode
  1			 unused
  2  2			 request length
  4  WINDOW		 window


 ->
  1  1			 Reply
  1			 unused
  2  CARD16		 sequence number
  4  n			 reply length
  2  n			 number of COLORMAPs in cmaps
  22			 unused
  4n LISTofCOLORMAP	 cmaps



AllocColor
  1  84 		 opcode
  1			 unused
  2  4			 request length
  4  COLORMAP		 cmap
  2  CARD16		 red
  2  CARD16		 green
  2  CARD16		 blue
  2			 unused


 ->
  1  1			 Reply
  1			 unused
  2  CARD16		 sequence number
  4  0			 reply length
  2  CARD16		 red
  2  CARD16		 green
  2  CARD16		 blue
  2			 unused
  4  CARD32		 pixel
  12			 unused



AllocNamedColor
  1  85 		 opcode
  1			 unused



			     193





X Protocol				    X11, Release 6.4


  2  3+(n+p)/4		 request length
  4  COLORMAP		 cmap
  2  n			 length of name
  2			 unused
  n  STRING8		 name
  p			 unused, p=pad(n)


 ->
  1  1			 Reply
  1			 unused
  2  CARD16		 sequence number
  4  0			 reply length
  4  CARD32		 pixel
  2  CARD16		 exact-red
  2  CARD16		 exact-green
  2  CARD16		 exact-blue
  2  CARD16		 visual-red
  2  CARD16		 visual-green
  2  CARD16		 visual-blue
  8			 unused



AllocColorCells
  1  86 		 opcode
  1  BOOL		 contiguous
  2  3			 request length
  4  COLORMAP		 cmap
  2  CARD16		 colors
  2  CARD16		 planes


 ->
  1  1			 Reply
  1			 unused
  2  CARD16		 sequence number
  4  n+m		 reply length
  2  n			 number of CARD32s in pixels
  2  m			 number of CARD32s in masks
  20			 unused
  4n LISTofCARD32	 pixels
  4m LISTofCARD32	 masks



AllocColorPlanes
  1  87 		 opcode
  1  BOOL		 contiguous
  2  4			 request length
  4  COLORMAP		 cmap
  2  CARD16		 colors
  2  CARD16		 reds
  2  CARD16		 greens



			     194





X Protocol				    X11, Release 6.4


  2  CARD16		 blues


 ->
  1  1			 Reply
  1			 unused
  2  CARD16		 sequence number
  4  n			 reply length
  2  n			 number of CARD32s in pixels
  2			 unused
  4  CARD32		 red-mask
  4  CARD32		 green-mask
  4  CARD32		 blue-mask
  8			 unused
  4n LISTofCARD32	 pixels



FreeColors
  1  88 		 opcode
  1			 unused
  2  3+n		 request length
  4  COLORMAP		 cmap
  4  CARD32		 plane-mask
  4n LISTofCARD32	 pixels



StoreColors
  1  89 		 opcode
  1			 unused
  2  2+3n		 request length
  4  COLORMAP		 cmap
  12n	       LISTofCOLORITEMitems


  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



StoreNamedColor
  1  90 		 opcode
  1			 do-red, do-green, do-blue
     #x01      do-red (1 is True, 0 is False)



			     195





X Protocol				    X11, Release 6.4


     #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)



QueryColors
  1  91 		 opcode
  1			 unused
  2  2+n		 request length
  4  COLORMAP		 cmap
  4n LISTofCARD32	 pixels


 ->
  1  1			 Reply
  1			 unused
  2  CARD16		 sequence number
  4  2n 		 reply length
  2  n			 number of RGBs in colors
  22			 unused
  8n LISTofRGB		 colors


  RGB
  2  CARD16		 red
  2  CARD16		 green
  2  CARD16		 blue
  2			 unused



LookupColor
  1  92 		 opcode
  1			 unused
  2  3+(n+p)/4		 request length
  4  COLORMAP		 cmap
  2  n			 length of name
  2			 unused
  n  STRING8		 name
  p			 unused, p=pad(n)


 ->
  1  1			 Reply
  1			 unused
  2  CARD16		 sequence number



			     196





X Protocol				    X11, Release 6.4


  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



CreateCursor
  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



CreateGlyphCursor
  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



FreeCursor
  1  95 		 opcode
  1			 unused
  2  2			 request length
  4  CURSOR		 cursor



			     197





X Protocol				    X11, Release 6.4


RecolorCursor
  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



QueryBestSize
  1  97 		 opcode
  1			 class
     0	       Cursor
     1	       Tile
     2	       Stipple
  2  3			 request length
  4  DRAWABLE		 drawable
  2  CARD16		 width
  2  CARD16		 height


 ->
  1  1			 Reply
  1			 unused
  2  CARD16		 sequence number
  4  0			 reply length
  2  CARD16		 width
  2  CARD16		 height
  20			 unused



QueryExtension
  1  98 		 opcode
  1			 unused
  2  2+(n+p)/4		 request length
  2  n			 length of name
  2			 unused
  n  STRING8		 name
  p			 unused, p=pad(n)


 ->
  1  1			 Reply
  1			 unused
  2  CARD16		 sequence number
  4  0			 reply length
  1  BOOL		 present
  1  CARD8		 major-opcode



			     198





X Protocol				    X11, Release 6.4


  1  CARD8		 first-event
  1  CARD8		 first-error
  20			 unused



ListExtensions
  1  99 		 opcode
  1			 unused
  2  1			 request length


 ->
  1  1			 Reply
  1  CARD8		 number of STRs in names
  2  CARD16		 sequence number
  4  (n+p)/4		 reply length
  24			 unused
  n  LISTofSTR		 names
  p			 unused, p=pad(n)



ChangeKeyboardMapping
  1  100		 opcode
  1  n			 keycode-count
  2  2+nm		 request length
  1  KEYCODE		 first-keycode
  1  m			 keysyms-per-keycode
  2			 unused
  4nm	       LISTofKEYSYMkeysyms



GetKeyboardMapping
  1  101		 opcode
  1			 unused
  2  2			 request length
  1  KEYCODE		 first-keycode
  1  m			 count
  2			 unused


 ->
  1  1			 Reply
  1  n			 keysyms-per-keycode
  2  CARD16		 sequence number
  4  nm 		 reply length (m = count field from the request)
  24			 unused
  4nm	       LISTofKEYSYMkeysyms



ChangeKeyboardControl



			     199





X Protocol				    X11, Release 6.4


  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



GetKeyboardControl
  1  103		 opcode
  1			 unused
  2  1			 request length


 ->
  1  1			 Reply
  1			 global-auto-repeat
     0	       Off
     1	       On
  2  CARD16		 sequence number
  4  5			 reply length
  4  CARD32		 led-mask
  1  CARD8		 key-click-percent
  1  CARD8		 bell-percent
  2  CARD16		 bell-pitch
  2  CARD16		 bell-duration
  2			 unused
  32 LISTofCARD8	 auto-repeats





			     200





X Protocol				    X11, Release 6.4


Bell
  1  104		 opcode
  1  INT8		 percent
  2  1			 request length



ChangePointerControl
  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



GetPointerControl
  1  106		 opcode
  1			 unused
  2  1			 request length


 ->
  1  1			 Reply
  1			 unused
  2  CARD16		 sequence number
  4  0			 reply length
  2  CARD16		 acceleration-numerator
  2  CARD16		 acceleration-denominator
  2  CARD16		 threshold
  18			 unused



SetScreenSaver
  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





			     201





X Protocol				    X11, Release 6.4


GetScreenSaver
  1  108		 opcode
  1			 unused
  2  1			 request length


 ->
  1  1			 Reply
  1			 unused
  2  CARD16		 sequence number
  4  0			 reply length
  2  CARD16		 timeout
  2  CARD16		 interval
  1			 prefer-blanking
     0	       No
     1	       Yes
  1			 allow-exposures
     0	       No
     1	       Yes
  18			 unused



ChangeHosts
  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)



ListHosts
  1  110		 opcode
  1			 unused
  2  1			 request length


 ->
  1  1			 Reply
  1			 mode
     0	       Disabled
     1	       Enabled
  2  CARD16		 sequence number
  4  n/4		 reply length
  2  CARD16		 number of HOSTs in hosts



			     202





X Protocol				    X11, Release 6.4


  22			 unused
  n  LISTofHOST 	 hosts (n always a multiple of 4)



SetAccessControl
  1  111		 opcode
  1			 mode
     0	       Disable
     1	       Enable
  2  1			 request length



SetCloseDownMode
  1  112		 opcode
  1			 mode
     0	       Destroy
     1	       RetainPermanent
     2	       RetainTemporary
  2  1			 request length



KillClient
  1  113		 opcode
  1			 unused
  2  2			 request length
  4  CARD32		 resource
     0	       AllTemporary



RotateProperties
  1  114		 opcode
  1			 unused
  2  3+n		 request length
  4  WINDOW		 window
  2  n			 number of properties
  2  INT16		 delta
  4n LISTofATOM 	 properties



ForceScreenSaver
  1  115		 opcode
  1			 mode
     0	       Reset
     1	       Activate
  2  1			 request length



SetPointerMapping



			     203





X Protocol				    X11, Release 6.4


  1  116		 opcode
  1  n			 length of map
  2  1+(n+p)/4		 request length
  n  LISTofCARD8	 map
  p			 unused, p=pad(n)


 ->
  1  1			 Reply
  1			 status
     0	       Success
     1	       Busy
  2  CARD16		 sequence number
  4  0			 reply length
  24			 unused



GetPointerMapping
  1  117		 opcode
  1			 unused
  2  1			 request length


 ->
  1  1			 Reply
  1  n			 length of map
  2  CARD16		 sequence number
  4  (n+p)/4		 reply length
  24			 unused
  n  LISTofCARD8	 map
  p			 unused, p=pad(n)



SetModifierMapping
  1  118		 opcode
  1  n			 keycodes-per-modifier
  2  1+2n		 request length
  8n LISTofKEYCODE	 keycodes


 ->
  1  1			 Reply
  1			 status
     0	       Success
     1	       Busy
     2	       Failed
  2  CARD16		 sequence number
  4  0			 reply length
  24			 unused






			     204





X Protocol				    X11, Release 6.4


GetModifierMapping
  1  119		 opcode
  1			 unused
  2  1			 request length


 ->
  1  1			 Reply
  1  n			 keycodes-per-modifier
  2  CARD16		 sequence number
  4  2n 		 reply length
  24			 unused
  8n LISTofKEYCODE	 keycodes



NoOperation
  1  127		 opcode
  1			 unused
  2  1+n		 request length
  4n			 unused


Events


KeyPress
  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



KeyRelease
  1  3			 code
  1  KEYCODE		 detail
  2  CARD16		 sequence number
  4  TIMESTAMP		 time
  4  WINDOW		 root
  4  WINDOW		 event
  4  WINDOW		 child
     0	       None



			     205





X Protocol				    X11, Release 6.4


  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



ButtonPress
  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



ButtonRelease
  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



MotionNotify
  1  6			 code
  1			 detail
     0	       Normal
     1	       Hint
  2  CARD16		 sequence number



			     206





X Protocol				    X11, Release 6.4


  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



EnterNotify
  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



LeaveNotify
  1  8			 code
  1			 detail
     0	       Ancestor
     1	       Virtual
     2	       Inferior
     3	       Nonlinear
     4	       NonlinearVirtual
  2  CARD16		 sequence number



			     207





X Protocol				    X11, Release 6.4


  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



FocusIn
  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



FocusOut
  1  10 		 code
  1			 detail
     0	       Ancestor
     1	       Virtual
     2	       Inferior
     3	       Nonlinear
     4	       NonlinearVirtual
     5	       Pointer
     6	       PointerRoot
     7	       None



			     208





X Protocol				    X11, Release 6.4


  2  CARD16		 sequence number
  4  WINDOW		 event
  1			 mode
     0	       Normal
     1	       Grab
     2	       Ungrab
     3	       WhileGrabbed
  23			 unused



KeymapNotify
  1  11 		 code
  31 LISTofCARD8	 keys (byte for keycodes 0-7 is omitted)



Expose
  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



GraphicsExposure
  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



NoExposure
  1  14 		 code
  1			 unused
  2  CARD16		 sequence number
  4  DRAWABLE		 drawable
  2  CARD16		 minor-opcode
  1  CARD8		 major-opcode



			     209





X Protocol				    X11, Release 6.4


  21			 unused



VisibilityNotify
  1  15 		 code
  1			 unused
  2  CARD16		 sequence number
  4  WINDOW		 window
  1			 state
     0	       Unobscured
     1	       PartiallyObscured
     2	       FullyObscured
  23			 unused



CreateNotify
  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



DestroyNotify
  1  17 		 code
  1			 unused
  2  CARD16		 sequence number
  4  WINDOW		 event
  4  WINDOW		 window
  20			 unused



UnmapNotify
  1  18 		 code
  1			 unused
  2  CARD16		 sequence number
  4  WINDOW		 event
  4  WINDOW		 window
  1  BOOL		 from-configure
  19			 unused






			     210





X Protocol				    X11, Release 6.4


MapNotify
  1  19 		 code
  1			 unused
  2  CARD16		 sequence number
  4  WINDOW		 event
  4  WINDOW		 window
  1  BOOL		 override-redirect
  19			 unused



MapRequest
  1  20 		 code
  1			 unused
  2  CARD16		 sequence number
  4  WINDOW		 parent
  4  WINDOW		 window
  20			 unused



ReparentNotify
  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



ConfigureNotify
  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



ConfigureRequest



			     211





X Protocol				    X11, Release 6.4


  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



GravityNotify
  1  24 		 code
  1			 unused
  2  CARD16		 sequence number
  4  WINDOW		 event
  4  WINDOW		 window
  2  INT16		 x
  2  INT16		 y
  16			 unused



ResizeRequest
  1  25 		 code
  1			 unused
  2  CARD16		 sequence number
  4  WINDOW		 window
  2  CARD16		 width
  2  CARD16		 height
  20			 unused



CirculateNotify
  1  26 		 code



			     212





X Protocol				    X11, Release 6.4


  1			 unused
  2  CARD16		 sequence number
  4  WINDOW		 event
  4  WINDOW		 window
  4  WINDOW		 unused
  1			 place
     0	       Top
     1	       Bottom
  15			 unused



CirculateRequest
  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



PropertyNotify
  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



SelectionClear
  1  29 		 code
  1			 unused
  2  CARD16		 sequence number
  4  TIMESTAMP		 time
  4  WINDOW		 owner
  4  ATOM		 selection
  16			 unused



SelectionRequest
  1  30 		 code
  1			 unused



			     213





X Protocol				    X11, Release 6.4


  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



SelectionNotify
  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



ColormapNotify
  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



ClientMessage
  1  33 		 code
  1  CARD8		 format
  2  CARD16		 sequence number
  4  WINDOW		 window
  4  ATOM		 type
  20			 data



MappingNotify



			     214





X Protocol				    X11, Release 6.4


  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















































			     215





X Protocol				    X11, Release 6.4




			  Glossary



Access control list

     X maintains a list of hosts from which client programs
     can be run.  By default, only programs on the local
     host and hosts specified in an initial list read by the
     server can use the display.  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 mecha-
     nism.  The action of this mechanism can be conditional
     based on the authorization protocol name and data
     received by the server at connection setup.

Active grab

     A grab is active when the pointer or keyboard is actu-
     ally owned by the single grabbing client.

Ancestors

     If W is an inferior of A, then A is an ancestor of W.

Atom

     An atom is a unique ID corresponding to a string name.
     Atoms are used to identify properties, types, and
     selections.

Background

     An InputOutput window can have a background, which is
     defined as a pixmap.  When regions of the window have
     their contents lost or invalidated, the server will
     automatically tile those regions with the background.

Backing store

     When a server maintains the contents of a window, the
     pixels saved off screen are known as a backing store.












			     216





X Protocol				    X11, Release 6.4


Bit gravity

     When a window is resized, the contents of the window
     are not necessarily discarded.  It is possible to
     request that the server relocate the previous contents
     to some region of the window (though no guarantees are
     made).  This attraction of window contents for some
     location of a window is known as bit gravity.

Bit plane

     When a pixmap or window is thought of as a stack of
     bitmaps, each bitmap is called a bit plane or plane.

Bitmap

     A bitmap is a pixmap of depth one.

Border

     An InputOutput window can have a border of equal thick-
     ness on all four sides of the window.  A pixmap defines
     the contents of the border, and the server automati-
     cally maintains the contents of the border.  Exposure
     events are never generated for border regions.

Button grabbing

     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.

Byte order

     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.

Children

     The children of a window are its first-level subwin-
     dows.













			     217





X Protocol				    X11, Release 6.4


Client

     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 pro-
     gram is referred to as a client of the window system
     server.  More precisely, the client is the communica-
     tion path itself; a program with multiple paths open to
     the server is viewed as multiple clients by the proto-
     col.  Resource lifetimes are controlled by connection
     lifetimes, not by program lifetimes.

Clipping region

     In a graphics context, a bitmap or list of rectangles
     can be specified to restrict output to a particular
     region of the window.  The image defined by the bitmap
     or rectangles is called a clipping region.

Colormap

     A colormap consists of a set of entries defining color
     values.  The colormap associated with a window is used
     to display the contents of the window; each pixel value
     indexes the colormap to produce RGB values that drive
     the guns of a monitor.  Depending on hardware limita-
     tions, one or more colormaps may be installed at one
     time, so that windows associated with those maps dis-
     play with correct colors.

Connection

     The interprocess communication path between the server
     and client program is known as a connection.  A client
     program typically (but not necessarily) has one connec-
     tion to the server over which requests and events are
     sent.

Containment

     A window ``contains'' the pointer if the window is
     viewable and the hotspot of the cursor is within a vis-
     ible 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.










			     218





X Protocol				    X11, Release 6.4


Coordinate system

     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.

Cursor

     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.

Depth

     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 con-
     junction with for graphics output.

Device

     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.''

DirectColor

     DirectColor is a class of colormap in which a pixel
     value is decomposed into three separate subfields for
     indexing.	The first subfield indexes an array to pro-
     duce 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 dynam-
     ically.

Display

     A server, together with its screens and input devices,
     is called a display.










			     219





X Protocol				    X11, Release 6.4


Drawable

     Both windows and pixmaps can be used as sources and
     destinations in graphics operations.  These windows and
     pixmaps are collectively known as drawables.  However,
     an InputOnly window cannot be used as a source or des-
     tination in a graphics operation.

Event

     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.

Event mask

     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.

Event synchronization

     There are certain race conditions possible when demul-
     tiplexing device events to clients (in particular
     deciding where pointer and keyboard events should be
     sent when in the middle of window management opera-
     tions).  The event synchronization mechanism allows
     synchronous processing of device events.

Event propagation

     Device-related events propagate from the source window
     to ancestor windows until some client has expressed
     interest in handling that type of event or until the
     event is discarded explicitly.

Event source

     The window the pointer is in is the source of a device-
     related event.

Exposure event

     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.




			     220





X Protocol				    X11, Release 6.4


Extension

     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.

Focus window

     The focus window is another term for the input focus.

Font

     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 addi-
     tional metric information to determine interglyph and
     interline spacing.

GC, GContext

     GC and gcontext are abbreviations for graphics context.

Glyph

     A glyph is an image, typically of a character, in a
     font.

Grab

     Keyboard keys, the keyboard, pointer buttons, the
     pointer, and the server can be grabbed for exclusive
     use by a client.  In general, these facilities are not
     intended to be used by normal applications but are
     intended for various input and window managers to
     implement various styles of user interfaces.

Graphics context

     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.

Gravity

     See bit gravity and window gravity.







			     221





X Protocol				    X11, Release 6.4


GrayScale

     GrayScale can be viewed as a degenerate case of Pseudo-
     Color, 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.

Hotspot

     A cursor has an associated hotspot that defines the
     point in the cursor corresponding to the coordinates
     reported for the pointer.

Identifier

     An identifier is a unique value associated with a
     resource that clients use to name that resource.  The
     identifier can be used over any connection.

Inferiors

     The inferiors of a window are all of the subwindows
     nested below it: the children, the children's children,
     and so on.

Input focus

     The input focus is normally a window defining the scope
     for processing of keyboard input.	If a generated key-
     board event would normally be reported to this window
     or one of its inferiors, the event is reported nor-
     mally.  Otherwise, the event is reported with respect
     to the focus window.  The input focus also can be set
     such that all keyboard events are discarded and such
     that the focus window is dynamically taken to be the
     root window of whatever screen the pointer is on at
     each keyboard event.

Input manager

     Control over keyboard input is typically provided by an
     input manager client.

InputOnly window

     An InputOnly window is a window that cannot be used for
     graphics requests.  InputOnly windows are invisible and
     can be used to control such things as cursors, input
     event generation, and grabbing.  InputOnly windows can-
     not have InputOutput windows as inferiors.







			     222





X Protocol				    X11, Release 6.4


InputOutput window

     An InputOutput window is the normal kind of opaque win-
     dow, used for both input and output.  InputOutput win-
     dows can have both InputOutput and InputOnly windows as
     inferiors.

Key grabbing

     Keys on the keyboard can be passively grabbed by a
     client.  When the key is pressed, the keyboard is then
     actively grabbed by the client.

Keyboard grabbing

     A client can actively grab control of the keyboard, and
     key events will be sent to that client rather than the
     client the events would normally have been sent to.

Keysym

     An encoding of a symbol on a keycap on a keyboard.

Mapped

     A window is said to be mapped if a map call has been
     performed on it.  Unmapped windows and their inferiors
     are never viewable or visible.

Modifier keys

     Shift, Control, Meta, Super, Hyper, Alt, Compose,
     Apple, CapsLock, ShiftLock, and similar keys are called
     modifier keys.

Monochrome

     Monochrome is a special case of StaticGray in which
     there are only two colormap entries.

Obscure

     A window is obscured if some other window obscures it.
     Window A obscures window B if both are viewable
     InputOutput 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.






			     223





X Protocol				    X11, Release 6.4


Occlude

     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 rec-
     tangle defined by the outside edges of B.	Note the
     distinction between occludes and obscures.  Also note
     that window borders are included in the calculation.

Padding

     Some padding bytes are inserted in the data stream to
     maintain alignment of the protocol requests on natural
     boundaries.  This increases ease of portability to some
     machine architectures.

Parent window

     If C is a child of P, then P is the parent of C.

Passive grab

     Grabbing a key or button is a passive grab.  The grab
     activates when the key or button is actually pressed.

Pixel value

     A pixel is an N-bit value, where N is the number of bit
     planes used in a particular window or pixmap (that is,
     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.

Pixmap

     A pixmap is a three-dimensional array of bits.  A
     pixmap is normally thought of as a two-dimensional
     array of pixels, where each pixel can be a value from 0
     to (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.

Plane

     When a pixmap or window is thought of as a stack of
     bitmaps, each bitmap is called a plane or bit plane.










			     224





X Protocol				    X11, Release 6.4


Plane mask

     Graphics operations can be restricted to only affect a
     subset of bit planes of a destination.  A plane mask is
     a bit mask describing which planes are to be modified.
     The plane mask is stored in a graphics context.

Pointer

     The pointer is the pointing device attached to the cur-
     sor and tracked on the screens.

Pointer grabbing

     A client can actively grab control of the pointer.
     Then button and motion events will be sent to that
     client rather than the client the events would normally
     have been sent to.

Pointing device

     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 proto-
     col, and it tracks whatever pointing device is attached
     as the pointer.

Property

     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.

Property list

     The property list of a window is the list of properties
     that have been defined for the window.

PseudoColor

     PseudoColor 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.








			     225





X Protocol				    X11, Release 6.4


Redirecting control

     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 per-
     formed.

Reply

     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 gener-
     ate multiple replies.

Request

     A command to the server is called a request.  It is a
     single block of data sent over a connection.

Resource

     Windows, pixmaps, cursors, fonts, graphics contexts,
     and colormaps are known as resources.  They all have
     unique identifiers associated with them for naming pur-
     poses.  The lifetime of a resource usually is bounded
     by the lifetime of the connection over which the
     resource was created.

RGB values

     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.

Root

     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.

Root window

     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.





			     226





X Protocol				    X11, Release 6.4


Save set

     The save set of a client is a list of other clients'
     windows that, if they are inferiors of one of the
     client's windows at connection close, should not be
     destroyed and that should be remapped if currently
     unmapped.	Save sets are typically used by window man-
     agers to avoid lost windows if the manager terminates
     abnormally.

Scanline

     A scanline is a list of pixel or bit values viewed as a
     horizontal row (all values having the same y coordi-
     nate) of an image, with the values ordered by increas-
     ing x coordinate.

Scanline order

     An image represented in scanline order contains scan-
     lines ordered by increasing y coordinate.

Screen

     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.

Selection

     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 par-
     ticular 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 con-
     trol 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 seman-
     tics.




			     227





X Protocol				    X11, Release 6.4


Server

     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.

Server grabbing

     The server can be grabbed by a single client for exclu-
     sive use.	This prevents processing of any requests
     from other client connections until the grab is com-
     pleted.  This is typically only a transient state for
     such things as rubber-banding, pop-up menus, or to exe-
     cute requests indivisibly.

Sibling

     Children of the same parent window are known as sibling
     windows.

Stacking order

     Sibling windows may stack on top of each other.  Win-
     dows 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.

StaticColor

     StaticColor can be viewed as a degenerate case of Pseu-
     doColor in which the RGB values are predefined and
     read-only.

StaticGray

     StaticGray can be viewed as a degenerate case of
     GrayScale in which the gray values are predefined and
     read-only.  The values are typically linear or near-
     linear increasing ramps.

Stipple

     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.










			     228





X Protocol				    X11, Release 6.4


String Equivalence

     Two ISO Latin-1 STRING8 values are considered equal if
     they are the same length and if corresponding bytes are
     either equal or are equivalent as follows:  decimal
     values 65 to 90 inclusive (characters ``A'' to ``Z'')
     are pairwise equivalent to decimal values 97 to 122
     inclusive (characters ``a'' to ``z''), decimal values
     192 to 214 inclusive (characters ``A grave'' to ``O
     diaeresis'') are pairwise equivalent to decimal values
     224 to 246 inclusive (characters ``a grave'' to ``o
     diaeresis''), and decimal values 216 to 222 inclusive
     (characters ``O oblique'' to ``THORN'') are pairwise
     equivalent to decimal values 246 to 254 inclusive
     (characters ``o oblique'' to ``thorn'').

Tile

     A pixmap can be replicated in two dimensions to tile a
     region.  The pixmap itself is also known as a tile.

Timestamp

     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 ear-
     lier in time than T and half of the timestamp space as
     being later in time than T.  One timestamp value (named
     CurrentTime) is never generated by the server.  This
     value is reserved for use in requests to represent the
     current server time.

TrueColor

     TrueColor can be viewed as a degenerate case of Direct-
     Color in which the subfields in the pixel value
     directly encode the corresponding RGB values; that is,
     the colormap has predefined read-only RGB values.	The
     values are typically linear or near-linear increasing
     ramps.

Type

     A type is an arbitrary atom used to identify the inter-
     pretation of property data.  Types are completely unin-
     terpreted by the server and are solely for the benefit
     of clients.







			     229





X Protocol				    X11, Release 6.4


Viewable

     A window is viewable if it and all of its ancestors are
     mapped.  This does not imply that any portion of the
     window is actually visible.  Graphics requests can be
     performed on a window when it is not viewable, but out-
     put will not be retained unless the server is maintain-
     ing backing store.

Visible

     A region of a window is visible if someone looking at
     the screen can actually see it; that is, the window is
     viewable and the region is not occluded by any other
     window.

Window gravity

     When windows are resized, subwindows may be reposi-
     tioned automatically relative to some position in the
     window.  This attraction of a subwindow to some part of
     its parent is known as window gravity.

Window manager

     Manipulation of windows on the screen and much of the
     user interface (policy) is typically provided by a win-
     dow manager client.

XYFormat

     The data for a pixmap is said to be in XY format if it
     is organized as a set of bitmaps representing individ-
     ual bit planes, with the planes appearing from most-
     significant to least-significant in bit order.

ZFormat

     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.
















			     230





X Protocol				    X11, Release 6.4




		     Table of Contents


Acknowledgments  . . . . . . . . . . . . . . . . . . . . iii
1. Protocol Formats  . . . . . . . . . . . . . . . . . .   1
2. Syntactic Conventions . . . . . . . . . . . . . . . .   2
3. Common Types  . . . . . . . . . . . . . . . . . . . .   3
4. Errors  . . . . . . . . . . . . . . . . . . . . . . .   5
5. Keyboards . . . . . . . . . . . . . . . . . . . . . .   8
6. Pointers  . . . . . . . . . . . . . . . . . . . . . .  10
7. Predefined Atoms  . . . . . . . . . . . . . . . . . .  10
8. Connection Setup  . . . . . . . . . . . . . . . . . .  11
9. Requests  . . . . . . . . . . . . . . . . . . . . . .  17
10. Connection Close . . . . . . . . . . . . . . . . . . 104
11. Events . . . . . . . . . . . . . . . . . . . . . . . 105
12. Flow Control and Concurrency . . . . . . . . . . . . 122
Appendix A - KEYSYM Encoding . . . . . . . . . . . . . . 123
Appendix B - Protocol Encoding . . . . . . . . . . . . . 151
Glossary . . . . . . . . . . . . . . . . . . . . . . . . 216
Index  . . . . . . . . . . . . . . . . . . . . . . . . . 231






































