














                  XX WWiinnddooww SSyysstteemm PPrroottooccooll

                   XX CCoonnssoorrttiiuumm SSttaannddaarrdd

                  XX VVeerrssiioonn 1111,, RReelleeaassee 66






                    Robert W. Scheifler
           Massachusetts Institute of Technology
              Laboratory for Computer Science





















































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

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




























                      AAcckknnoowwlleeddggmmeennttss



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
Massachusetts Institute of Technology
Laboratory for Computer Science
























































11..  PPrroottooccooll FFoorrmmaattss

RReeqquueesstt FFoorrmmaatt

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.

RReeppllyy FFoorrmmaatt

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.

EErrrroorr FFoorrmmaatt

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: _C_o_l_o_r_m_a_p, _C_u_r_s_o_r, _D_r_a_w_a_b_l_e, _F_o_n_t, _G_C_o_n_t_e_x_t,
_I_D_C_h_o_i_c_e, _P_i_x_m_a_p, and _W_i_n_d_o_w.  For _A_t_o_m errors, the failing
atom is returned.  For _V_a_l_u_e errors, the failing value is
returned.  Other core errors return no additional data.
Unused bytes within an error are not guaranteed to be zero.

EEvveenntt FFoorrmmaatt

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1





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


the event was generated from a _S_e_n_d_E_v_e_n_t 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 _K_e_y_m_a_p_N_o_t_i_f_y) 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2..  SSyynnttaaccttiicc CCoonnvveennttiioonnss

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

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

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

    In general, TYPEs are in uppercase and _A_l_t_e_r_n_a_t_i_v_e_V_a_l_
     _u_e_s are capitalized.

    Requests in section 9 are described in the following
     format:


     _R_e_q_u_e_s_t_N_a_m_e
            _a_r_g_1: type1
            ...
            _a_r_g_N: 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.

    Events in section 11 are described in the following
     format:


     _E_v_e_n_t_N_a_m_e
            _v_a_l_u_e_1: type1
            ...
            _v_a_l_u_e_N: typeN




                              22





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


            Description.


33..  CCoommmmoonn TTyyppeess


-------------------------------------------------------------------
NNaammee           VVaalluuee
-------------------------------------------------------------------
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:
               _v_a_l_u_e_-_m_a_s_k: BITMASK
               _v_a_l_u_e_-_l_i_s_t: 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 _V_a_l_u_e 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-sig
               nificant 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3





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-------------------------------------------------------------------
NNaammee           VVaalluuee
-------------------------------------------------------------------
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     {_F_o_r_g_e_t, _S_t_a_t_i_c, _N_o_r_t_h_W_e_s_t, _N_o_r_t_h, _N_o_r_t_h_E_a_s_t, _W_e_s_t,
               _C_e_n_t_e_r,
                 _E_a_s_t, _S_o_u_t_h_W_e_s_t, _S_o_u_t_h, _S_o_u_t_h_E_a_s_t}
WINGRAVITY     {_U_n_m_a_p, _S_t_a_t_i_c, _N_o_r_t_h_W_e_s_t, _N_o_r_t_h, _N_o_r_t_h_E_a_s_t, _W_e_s_t,
               _C_e_n_t_e_r,
                 _E_a_s_t, _S_o_u_t_h_W_e_s_t, _S_o_u_t_h, _S_o_u_t_h_E_a_s_t}
BOOL           {_T_r_u_e, _F_a_l_s_e}
EVENT          {_K_e_y_P_r_e_s_s, _K_e_y_R_e_l_e_a_s_e, _O_w_n_e_r_G_r_a_b_B_u_t_t_o_n,
               _B_u_t_t_o_n_P_r_e_s_s,
                 _B_u_t_t_o_n_R_e_l_e_a_s_e, _E_n_t_e_r_W_i_n_d_o_w, _L_e_a_v_e_W_i_n_d_o_w,
               _P_o_i_n_t_e_r_M_o_t_i_o_n,
                 _P_o_i_n_t_e_r_M_o_t_i_o_n_H_i_n_t, _B_u_t_t_o_n_1_M_o_t_i_o_n, _B_u_t_t_o_n_2_M_o_t_i_o_n,
                 _B_u_t_t_o_n_3_M_o_t_i_o_n, _B_u_t_t_o_n_4_M_o_t_i_o_n, _B_u_t_t_o_n_5_M_o_t_i_o_n,
               _B_u_t_t_o_n_M_o_t_i_o_n,
                 _E_x_p_o_s_u_r_e, _V_i_s_i_b_i_l_i_t_y_C_h_a_n_g_e, _S_t_r_u_c_t_u_r_e_N_o_t_i_f_y,
               _R_e_s_i_z_e_R_e_d_i_r_e_c_t,
                 _S_u_b_s_t_r_u_c_t_u_r_e_N_o_t_i_f_y, _S_u_b_s_t_r_u_c_t_u_r_e_R_e_d_i_r_e_c_t,
               _F_o_c_u_s_C_h_a_n_g_e,
                 _P_r_o_p_e_r_t_y_C_h_a_n_g_e, _C_o_l_o_r_m_a_p_C_h_a_n_g_e, _K_e_y_m_a_p_S_t_a_t_e}
POINTEREVENT   {_B_u_t_t_o_n_P_r_e_s_s, _B_u_t_t_o_n_R_e_l_e_a_s_e, _E_n_t_e_r_W_i_n_d_o_w,
               _L_e_a_v_e_W_i_n_d_o_w,
                 _P_o_i_n_t_e_r_M_o_t_i_o_n, _P_o_i_n_t_e_r_M_o_t_i_o_n_H_i_n_t, _B_u_t_t_o_n_1_M_o_t_i_o_n,
                 _B_u_t_t_o_n_2_M_o_t_i_o_n, _B_u_t_t_o_n_3_M_o_t_i_o_n, _B_u_t_t_o_n_4_M_o_t_i_o_n,
               _B_u_t_t_o_n_5_M_o_t_i_o_n,
                 _B_u_t_t_o_n_M_o_t_i_o_n, _K_e_y_m_a_p_S_t_a_t_e}
DEVICEEVENT    {_K_e_y_P_r_e_s_s, _K_e_y_R_e_l_e_a_s_e, _B_u_t_t_o_n_P_r_e_s_s, _B_u_t_t_o_n_R_e_l_e_a_s_e,
                 _P_o_i_n_t_e_r_M_o_t_i_o_n, _B_u_t_t_o_n_1_M_o_t_i_o_n, _B_u_t_t_o_n_2_M_o_t_i_o_n,
               _B_u_t_t_o_n_3_M_o_t_i_o_n,
                 _B_u_t_t_o_n_4_M_o_t_i_o_n, _B_u_t_t_o_n_5_M_o_t_i_o_n, _B_u_t_t_o_n_M_o_t_i_o_n}
KEYSYM         32-bit value (top three bits guaranteed to be zero)
KEYCODE        CARD8
BUTTON         CARD8
KEYMASK        {_S_h_i_f_t, _L_o_c_k, _C_o_n_t_r_o_l, _M_o_d_1, _M_o_d_2, _M_o_d_3, _M_o_d_4,
               _M_o_d_5}
BUTMASK        {_B_u_t_t_o_n_1, _B_u_t_t_o_n_2, _B_u_t_t_o_n_3, _B_u_t_t_o_n_4, _B_u_t_t_o_n_5}
KEYBUTMASK     KEYMASK or BUTMASK
STRING8        LISTofCARD8
STRING16       LISTofCHAR2B
CHAR2B         [byte1, byte2: CARD8]
POINT          [x, y: INT16]
RECTANGLE      [x, y: INT16,
                width, height: CARD16]






                              44





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-------------------------------------------------------------------
NNaammee           VVaalluuee
-------------------------------------------------------------------
ARC            [x, y: INT16,
                width, height: CARD16,
                angle1, angle2: INT16]
HOST           [family: {_I_n_t_e_r_n_e_t, _D_E_C_n_e_t, _C_h_a_o_s}
                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-signifi
cant 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 _C_h_a_n_g_e_H_o_s_t_s request).

44..  EErrrroorrss

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 _C_h_a_n_g_e_W_i_n_d_o_w_A_t_t_r_i_b_u_t_e_s, _C_h_a_n_g_e_G_C, _P_o_l_y_T_e_x_t_8, _P_o_l_y_T_e_x_t_1_6,
_F_r_e_e_C_o_l_o_r_s, _S_t_o_r_e_C_o_l_o_r_s, and _C_h_a_n_g_e_K_e_y_b_o_a_r_d_C_o_n_t_r_o_l.

The following error codes result from various requests as
follows:

-------------------------------------------------------------
EErrrroorr             DDeessccrriippttiioonn
-------------------------------------------------------------














                              55





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-------------------------------------------------------------
EErrrroorr             DDeessccrriippttiioonn
-------------------------------------------------------------
_A_c_c_e_s_s            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.
_A_l_l_o_c             The server failed to allocate the
                  requested resource.  Note that the
                  explicit listing of _A_l_l_o_c 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 _A_l_l_o_c error on
                  any request for this reason, and clients
                  should be prepared to receive such errors
                  and handle or discard them.
_A_t_o_m              A value for an ATOM argument does not name
                  a defined ATOM.
_C_o_l_o_r_m_a_p          A value for a COLORMAP argument does not
                  name a defined COLORMAP.
_C_u_r_s_o_r            A value for a CURSOR argument does not
                  name a defined CURSOR.
_D_r_a_w_a_b_l_e          A value for a DRAWABLE argument does not
                  name a defined WINDOW or PIXMAP.
_F_o_n_t              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.
_G_C_o_n_t_e_x_t          A value for a GCONTEXT argument does not
                  name a defined GCONTEXT.
_I_D_C_h_o_i_c_e          The value chosen for a resource identifier
                  either is not included in the range
                  assigned to the client or is already in
                  use.







                              66





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-------------------------------------------------------------
EErrrroorr             DDeessccrriippttiioonn
-------------------------------------------------------------
_I_m_p_l_e_m_e_n_t_a_t_i_o_n    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.
_L_e_n_g_t_h            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.
_M_a_t_c_h             An _I_n_p_u_t_O_n_l_y 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.
_N_a_m_e              A font or color of the specified name does
                  not exist.
_P_i_x_m_a_p            A value for a PIXMAP argument does not
                  name a defined PIXMAP.
_R_e_q_u_e_s_t           The major or minor opcode does not specify
                  a valid request.
_V_a_l_u_e             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).
_W_i_n_d_o_w            A value for a WINDOW argument does not
                  name a defined WINDOW.
-------------------------------------------------------------


                            Note

     The _A_t_o_m, _C_o_l_o_r_m_a_p, _C_u_r_s_o_r, _D_r_a_w_a_b_l_e, _F_o_n_t,
     _G_C_o_n_t_e_x_t, _P_i_x_m_a_p, and _W_i_n_d_o_w errors are also used
     when the argument type is extended by union with a
     set of fixed alternatives, for example, <WINDOW or
     _P_o_i_n_t_e_r_R_o_o_t or _N_o_n_e>.








                              77





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


55..  KKeeyybbooaarrddss

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 _N_o_S_y_m_b_o_l 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
``_K_1 _K_2'', then the list is treated as if it were the list
``_K_1 _K_2 _K_1 _K_2''.  If the list (ignoring trailing _N_o_S_y_m_b_o_l
entries) is a triple of KEYSYMs ``_K_1 _K_2 _K_3'', then the list
is treated as if it were the list ``_K_1 _K_2 _K_3 NoSymbol''.
When an explicit ``void'' element is desired in the list,
the value _V_o_i_d_S_y_m_b_o_l 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
_N_o_S_y_m_b_o_l, 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 _K_e_y_P_r_e_s_s
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 _M_o_d_1 through
_M_o_d_5.  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8





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


The _L_o_c_k modifier is interpreted as CapsLock when the KEYSYM
named CAPS LOCK is attached to some KEYCODE and that KEYCODE
is attached to the _L_o_c_k modifier.  The _L_o_c_k modifier is
interpreted as ShiftLock when the KEYSYM named SHIFT LOCK is
attached to some KEYCODE and that KEYCODE is attached to the
_L_o_c_k modifier.  If the _L_o_c_k 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 _M_o_d_1
through _M_o_d_5.  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 hex
adecimal 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:

    The numlock modifier is on and the second KEYSYM is a
     keypad KEYSYM.  In this case, if the _S_h_i_f_t modifier is
     on, or if the _L_o_c_k modifier is on and is interpreted as
     ShiftLock, then the first KEYSYM is used, otherwise the
     second KEYSYM is used.

    The _S_h_i_f_t and _L_o_c_k modifiers are both off.  In this
     case, the first KEYSYM is used.

    The _S_h_i_f_t modifier is off, and the _L_o_c_k modifier is on
     and is interpreted as CapsLock.  In this case, the
     first KEYSYM is used, but if that KEYSYM is lowercase
     alphabetic, then the corresponding uppercase KEYSYM is
     used instead.

    The _S_h_i_f_t modifier is on, and the _L_o_c_k 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.

    The _S_h_i_f_t modifier is on, or the _L_o_c_k 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9





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


66..  PPooiinntteerrss

Buttons are always numbered starting with one.

77..  PPrreeddeeffiinneedd AAttoommss

Predefined atoms are not strictly necessary and may not be
useful in all environments, but they will eliminate many
_I_n_t_e_r_n_A_t_o_m 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
_I_n_t_e_r_-_C_l_i_e_n_t _C_o_m_m_u_n_i_c_a_t_i_o_n _C_o_n_v_e_n_t_i_o_n_s _M_a_n_u_a_l and the _X _L_o_g_
_i_c_a_l _F_o_n_t _D_e_s_c_r_i_p_t_i_o_n _C_o_n_v_e_n_t_i_o_n_s.

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



                             1100





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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

88..  CCoonnnneeccttiioonn SSeettuupp

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

CCoonnnneeccttiioonn IInniittiiaattiioonn

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

SSeerrvveerr RReessppoonnssee

The client receives the following information at connection
setup:

     success: {_F_a_i_l_e_d, _S_u_c_c_e_s_s, _A_u_t_h_e_n_t_i_c_a_t_e}

The client receives the following additional data if the
returned success value is _F_a_i_l_e_d, and the connection is not
successfully established:





                             1111





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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

The client receives the following additional data if the
returned success value is _A_u_t_h_e_n_t_i_c_a_t_e, 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 _F_a_i_l_e_d or _S_u_c_c_e_s_s.

The client receives the following additional data if the
returned success value is _S_u_c_c_e_s_s, 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: {_L_S_B_F_i_r_s_t, _M_S_B_F_i_r_s_t}
     bitmap-scanline-unit: {8, 16, 32}
     bitmap-scanline-pad: {8, 16, 32}
     bitmap-bit-order: {_L_e_a_s_t_S_i_g_n_i_f_i_c_a_n_t, _M_o_s_t_S_i_g_n_i_f_i_c_a_n_t}
     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}]

















                             1122





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


          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: {_N_e_v_e_r, _W_h_e_n_M_a_p_p_e_d,
                    _A_l_w_a_y_s}
                     save-unders: BOOL
                     current-input-masks: SETofEVENT]

           DEPTH:   [depth: CARD8
                     visuals: LISTofVISUALTYPE]

      VISUALTYPE:   [visual-id: VISUALID
                     class: {_S_t_a_t_i_c_G_r_a_y, _S_t_a_t_i_c_C_o_l_o_r,
                    _T_r_u_e_C_o_l_o_r, _G_r_a_y_S_c_a_l_e,
                               _P_s_e_u_d_o_C_o_l_o_r, _D_i_r_e_c_t_C_o_l_o_r}
                     red-mask, green-mask, blue-mask: CARD32
                     bits-per-rgb-value: CARD8
                     colormap-entries: CARD16]


SSeerrvveerr IInnffoorrmmaattiioonn

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



                             1133





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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.



                             1144





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


The server may retain the recent history of pointer motion
and do so to a finer granularity than is reported by _M_o_t_i_o_n_
_N_o_t_i_f_y events.  The _G_e_t_M_o_t_i_o_n_E_v_e_n_t_s 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 _L_e_n_g_t_h 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.

SSccrreeeenn IInnffoorrmmaattiioonn

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 _I_n_p_u_t_O_n_l_y 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
_I_n_p_u_t_O_u_t_p_u_t.  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.




                             1155





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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
_I_n_s_t_a_l_l_C_o_l_o_r_m_a_p), regardless of the number of entries allo
cated in each map.  Max-installed-maps specifies the maximum
number of maps that might possibly be installed simultane
ously, depending on their allocations.  Multiple static-
visual colormaps with identical contents but differing in
resource ID should be considered as a single map for the
purposes of this number.  For the typical case of a single
hardware colormap, both values will be 1.

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 _T_r_u_e, the server can support the save-under mode
in _C_r_e_a_t_e_W_i_n_d_o_w and _C_h_a_n_g_e_W_i_n_d_o_w_A_t_t_r_i_b_u_t_e_s, although again
it may be storage limited.

The current-input-events is what _G_e_t_W_i_n_d_o_w_A_t_t_r_i_b_u_t_e_s would
return for the all-event-masks for the root window.

VViissuuaall IInnffoorrmmaattiioonn

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 _P_s_e_u_d_o_C_o_l_o_r, a pixel value indexes a colormap to produce
independent RGB values; the RGB values can be changed dynam
ically.  _G_r_a_y_S_c_a_l_e is treated in the same way as _P_s_e_u_d_o_C_o_l_o_r
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 _D_i_r_e_c_t_C_o_l_o_r, 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.
_T_r_u_e_C_o_l_o_r is treated in the same way as _D_i_r_e_c_t_C_o_l_o_r 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.  _S_t_a_t_i_c_C_o_l_o_r is
treated in the same way as _P_s_e_u_d_o_C_o_l_o_r except the colormap
has predefined read-only RGB values, which are server-depen
dent.  _S_t_a_t_i_c_G_r_a_y is treated in the same way as _S_t_a_t_i_c_C_o_l_o_r
except the red, green, and blue values are equal for any
single pixel value, resulting in shades of gray.  _S_t_a_t_i_c_G_r_a_y
with a two-entry colormap can be thought of as monochrome.





                             1166





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


The red-mask, green-mask, and blue-mask are only defined for
_D_i_r_e_c_t_C_o_l_o_r and _T_r_u_e_C_o_l_o_r.  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 _D_i_r_e_c_t_C_o_l_o_r and _T_r_u_e_C_o_l_o_r, 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9..  RReeqquueessttss

__
||    _C_r_e_a_t_e_W_i_n_d_o_w

_w_i_d, _p_a_r_e_n_t: WINDOW
_c_l_a_s_s: {_I_n_p_u_t_O_u_t_p_u_t, _I_n_p_u_t_O_n_l_y, _C_o_p_y_F_r_o_m_P_a_r_e_n_t}
_d_e_p_t_h: CARD8
_v_i_s_u_a_l: VISUALID or _C_o_p_y_F_r_o_m_P_a_r_e_n_t
_x, _y: INT16
_w_i_d_t_h, _h_e_i_g_h_t, _b_o_r_d_e_r_-_w_i_d_t_h: CARD16
_v_a_l_u_e_-_m_a_s_k: BITMASK
_v_a_l_u_e_-_l_i_s_t: LISTofVALUE

Errors: _A_l_l_o_c, _C_o_l_o_r_m_a_p, _C_u_r_s_o_r, _I_D_C_h_o_i_c_e, _M_a_t_c_h, _P_i_x_m_a_p,
||__  _V_a_l_u_e, _W_i_n_d_o_w


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

A class of _C_o_p_y_F_r_o_m_P_a_r_e_n_t means the class is taken from the
parent.  A depth of zero for class _I_n_p_u_t_O_u_t_p_u_t or _C_o_p_y_
_F_r_o_m_P_a_r_e_n_t means the depth is taken from the parent.  A
visual of _C_o_p_y_F_r_o_m_P_a_r_e_n_t means the visual type is taken from
the parent.  For class _I_n_p_u_t_O_u_t_p_u_t, the visual type and
depth must be a combination supported for the screen (or a
_M_a_t_c_h error results).  The depth need not be the same as the
parent, but the parent must not be of class _I_n_p_u_t_O_n_l_y (or a
_M_a_t_c_h error results).  For class _I_n_p_u_t_O_n_l_y, the depth must



                             1177





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


be zero (or a _M_a_t_c_h error results), and the visual must be
one supported for the screen (or a _M_a_t_c_h error results).
However, the parent can have any depth and class.

The server essentially acts as if _I_n_p_u_t_O_n_l_y windows do not
exist for the purposes of graphics requests, exposure pro
cessing, and _V_i_s_i_b_i_l_i_t_y_N_o_t_i_f_y events.  An _I_n_p_u_t_O_n_l_y window
cannot be used as a drawable (as a source or destination for
graphics requests).  _I_n_p_u_t_O_n_l_y and _I_n_p_u_t_O_u_t_p_u_t 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 _V_a_l_u_e error results).  The border-
width for an _I_n_p_u_t_O_n_l_y window must be zero (or a _M_a_t_c_h 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:

-----------------------------------------------
AAttttrriibbuuttee           TTyyppee
-----------------------------------------------
background-pixmap   PIXMAP or _N_o_n_e or _P_a_r_e_n_
                    _t_R_e_l_a_t_i_v_e
background-pixel    CARD32
border-pixmap       PIXMAP or _C_o_p_y_F_r_o_m_P_a_r_e_n_t
border-pixel        CARD32
bit-gravity         BITGRAVITY
win-gravity         WINGRAVITY
backing-store       {_N_o_t_U_s_e_f_u_l, _W_h_e_n_M_a_p_p_e_d,
                    _A_l_w_a_y_s}
backing-planes      CARD32
backing-pixel       CARD32
save-under          BOOL
event-mask          SETofEVENT
do-not-propagate-   SETofDEVICEEVENT
mask
override-redirect   BOOL




                             1188





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------
AAttttrriibbuuttee           TTyyppee
-----------------------------------------------
colormap            COLORMAP or _C_o_p_y_F_r_o_m_P_a_r_e_n_t
cursor              CURSOR or _N_o_n_e
-----------------------------------------------


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

-----------------------------------
AAttttrriibbuuttee           DDeeffaauulltt
-----------------------------------
background-pixmap   _N_o_n_e
border-pixmap       _C_o_p_y_F_r_o_m_P_a_r_e_n_t
bit-gravity         _F_o_r_g_e_t
win-gravity         _N_o_r_t_h_W_e_s_t
backing-store       _N_o_t_U_s_e_f_u_l
backing-planes      all ones
backing-pixel       zero
save-under          _F_a_l_s_e
event-mask          {} (empty set)
do-not-propagate-   {} (empty set)
mask
override-redirect   _F_a_l_s_e
colormap            _C_o_p_y_F_r_o_m_P_a_r_e_n_t
cursor              _N_o_n_e
-----------------------------------


Only the following attributes are defined for _I_n_p_u_t_O_n_l_y win
dows:

    win-gravity

    event-mask

    do-not-propagate-mask

    override-redirect

    cursor

It is a _M_a_t_c_h error to specify any other attributes for
_I_n_p_u_t_O_n_l_y 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 _M_a_t_c_h error
results).  Any size pixmap can be used, although some sizes
may be faster than others.  If background _N_o_n_e is specified,
the window has no defined background.  If background _P_a_r_e_n_
_t_R_e_l_a_t_i_v_e is specified, the parent's background is used, but



                             1199





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


the window must have the same depth as the parent (or a
_M_a_t_c_h error results).  If the parent has background _N_o_n_e,
then the window will also have background _N_o_n_e.  A copy of
the parent's background is not made.  The parent's back
ground 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 _P_a_r_e_n_
_t_R_e_l_a_t_i_v_e 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 _N_o_n_e.  If the background is _N_o_n_e, 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 _N_o_n_e.

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 _M_a_t_c_h error
results).  Any size pixmap can be used, although some sizes
may be faster than others.  If _C_o_p_y_F_r_o_m_P_a_r_e_n_t 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 _M_a_t_c_h
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 _C_o_n_f_i_g_u_r_e_W_i_n_d_o_w request).





                             2200





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


A backing-store of _W_h_e_n_M_a_p_p_e_d advises the server that main
taining contents of obscured regions when the window is
mapped would be beneficial.  A backing-store of _A_l_w_a_y_s
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 _N_o_t_U_s_e_f_u_l 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 _T_r_u_e, 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 _S_u_b_s_t_r_u_c_t_u_r_e_R_e_d_i_
_r_e_c_t 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 _I_n_s_t_a_l_l_C_o_l_o_r_m_a_p requests.
The colormap must have the same visual type and root as the
window (or a _M_a_t_c_h error results).  If _C_o_p_y_F_r_o_m_P_a_r_e_n_t is
specified, the parent's colormap is copied (subsequent



                             2211





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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 _M_a_t_c_h error results), and the parent
must not have a colormap of _N_o_n_e (or a _M_a_t_c_h error results).
For an explanation of _N_o_n_e, see _F_r_e_e_C_o_l_o_r_m_a_p 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 _N_o_n_e 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 _C_r_e_a_t_e_N_o_t_i_f_y 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.


__
||    _C_h_a_n_g_e_W_i_n_d_o_w_A_t_t_r_i_b_u_t_e_s

_w_i_n_d_o_w: WINDOW
_v_a_l_u_e_-_m_a_s_k: BITMASK
_v_a_l_u_e_-_l_i_s_t: LISTofVALUE

Errors: _A_c_c_e_s_s, _C_o_l_o_r_m_a_p, _C_u_r_s_o_r, _M_a_t_c_h, _P_i_x_m_a_p, _V_a_l_u_e, _W_i_n_
||__  _d_o_w


The value-mask and value-list specify which attributes are
to be changed.  The values and restrictions are the same as
for _C_r_e_a_t_e_W_i_n_d_o_w.

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 _N_o_n_e or _P_a_r_e_n_t_R_e_l_a_t_i_v_e restores the default back
ground pixmap.  Changing the border of a root window to
_C_o_p_y_F_r_o_m_P_a_r_e_n_t restores the default border pixmap.




                             2222





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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

Changing the backing-store of an obscured window to _W_h_e_n_
_M_a_p_p_e_d or _A_l_w_a_y_s 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 _S_u_b_s_t_r_u_c_t_u_r_e_R_e_d_i_r_e_c_t,
only one client at a time can select for _R_e_s_i_z_e_R_e_d_i_r_e_c_t, and
only one client at a time can select for _B_u_t_t_o_n_P_r_e_s_s.  An
attempt to violate these restrictions results in an _A_c_c_e_s_s
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 _C_o_l_o_r_m_a_p_N_o_t_i_f_y event.  Changing the colormap of a visible
window might have no immediate effect on the screen (see
_I_n_s_t_a_l_l_C_o_l_o_r_m_a_p request).

Changing the cursor of a root window to _N_o_n_e 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.

























                             2233





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _G_e_t_W_i_n_d_o_w_A_t_t_r_i_b_u_t_e_s

_w_i_n_d_o_w: WINDOW

   =>

visual: VISUALID
class: {_I_n_p_u_t_O_u_t_p_u_t, _I_n_p_u_t_O_n_l_y}
bit-gravity: BITGRAVITY
win-gravity: WINGRAVITY
backing-store: {_N_o_t_U_s_e_f_u_l, _W_h_e_n_M_a_p_p_e_d, _A_l_w_a_y_s}
backing-planes: CARD32
backing-pixel: CARD32
save-under: BOOL
colormap: COLORMAP or _N_o_n_e
map-is-installed: BOOL
map-state: {_U_n_m_a_p_p_e_d, _U_n_v_i_e_w_a_b_l_e, _V_i_e_w_a_b_l_e}
all-event-masks, your-event-mask: SETofEVENT
do-not-propagate-mask: SETofDEVICEEVENT
override-redirect: BOOL

||__  Errors: _W_i_n_d_o_w


This request returns the current attributes of the window.
A window is _U_n_v_i_e_w_a_b_l_e 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.


__
||    _D_e_s_t_r_o_y_W_i_n_d_o_w

_w_i_n_d_o_w: WINDOW

||__  Errors: _W_i_n_d_o_w


If the argument window is mapped, an _U_n_m_a_p_W_i_n_d_o_w request is
performed automatically.  The window and all inferiors are
then destroyed, and a _D_e_s_t_r_o_y_N_o_t_i_f_y event is generated for
each window.  The ordering of the _D_e_s_t_r_o_y_N_o_t_i_f_y events is
such that for any given window, _D_e_s_t_r_o_y_N_o_t_i_f_y 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.





                             2244





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _D_e_s_t_r_o_y_S_u_b_w_i_n_d_o_w_s

_w_i_n_d_o_w: WINDOW

||__  Errors: _W_i_n_d_o_w


This request performs a _D_e_s_t_r_o_y_W_i_n_d_o_w request on all chil
dren of the window, in bottom-to-top stacking order.


__
||    _C_h_a_n_g_e_S_a_v_e_S_e_t

_w_i_n_d_o_w: WINDOW
_m_o_d_e: {_I_n_s_e_r_t, _D_e_l_e_t_e}

||__  Errors: _M_a_t_c_h, _V_a_l_u_e, _W_i_n_d_o_w


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 _M_a_t_c_h 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.


__
||    _R_e_p_a_r_e_n_t_W_i_n_d_o_w

_w_i_n_d_o_w, _p_a_r_e_n_t: WINDOW
_x, _y: INT16

||__  Errors: _M_a_t_c_h, _W_i_n_d_o_w


If the window is mapped, an _U_n_m_a_p_W_i_n_d_o_w 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 _R_e_p_a_r_e_n_t_N_o_t_i_f_y event is then generated.  The over
ride-redirect attribute of the window is passed on in this
event; a value of _T_r_u_e indicates that a window manager
should not tamper with this window.  Finally, if the window
was originally mapped, a _M_a_p_W_i_n_d_o_w request is performed
automatically.

Normal exposure processing on formerly obscured windows is
performed.  The server might not generate exposure events



                             2255





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


for regions from the initial unmap that are immediately
obscured by the final map.

A _M_a_t_c_h error is generated if:

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

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

    The new parent is _I_n_p_u_t_O_n_l_y, and the window is not.

    The window has a _P_a_r_e_n_t_R_e_l_a_t_i_v_e background, and the new
     parent is not the same depth as the window.


__
||    _M_a_p_W_i_n_d_o_w

_w_i_n_d_o_w: WINDOW

||__  Errors: _W_i_n_d_o_w


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

If the override-redirect attribute of the window is _F_a_l_s_e
and some other client has selected _S_u_b_s_t_r_u_c_t_u_r_e_R_e_d_i_r_e_c_t on
the parent, then a _M_a_p_R_e_q_u_e_s_t event is generated, but the
window remains unmapped.  Otherwise, the window is mapped,
and a _M_a_p_N_o_t_i_f_y 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.


__
||    _M_a_p_S_u_b_w_i_n_d_o_w_s

_w_i_n_d_o_w: WINDOW

||__  Errors: _W_i_n_d_o_w






                             2266





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


This request performs a _M_a_p_W_i_n_d_o_w request on all unmapped
children of the window, in top-to-bottom stacking order.


__
||    _U_n_m_a_p_W_i_n_d_o_w

_w_i_n_d_o_w: WINDOW

||__  Errors: _W_i_n_d_o_w


If the window is already unmapped, this request has no
effect.  Otherwise, the window is unmapped, and an _U_n_m_a_p_N_o_
_t_i_f_y event is generated.  Normal exposure processing on for
merly obscured windows is performed.


__
||    _U_n_m_a_p_S_u_b_w_i_n_d_o_w_s

_w_i_n_d_o_w: WINDOW

||__  Errors: _W_i_n_d_o_w


This request performs an _U_n_m_a_p_W_i_n_d_o_w request on all mapped
children of the window, in bottom-to-top stacking order.


__
||    _C_o_n_f_i_g_u_r_e_W_i_n_d_o_w

_w_i_n_d_o_w: WINDOW
_v_a_l_u_e_-_m_a_s_k: BITMASK
_v_a_l_u_e_-_l_i_s_t: LISTofVALUE

||__  Errors: _M_a_t_c_h, _V_a_l_u_e, _W_i_n_d_o_w


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:

-----------------------------------------------
AAttttrriibbuuttee      TTyyppee
-----------------------------------------------
x              INT16
y              INT16
width          CARD16
height         CARD16
border-width   CARD16
sibling        WINDOW




                             2277





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------
AAttttrriibbuuttee      TTyyppee
-----------------------------------------------
stack-mode     {_A_b_o_v_e, _B_e_l_o_w, _T_o_p_I_f, _B_o_t_t_o_m_I_f,
               _O_p_p_o_s_i_t_e}
-----------------------------------------------


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 _V_a_l_u_e
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 _M_a_t_c_h error to attempt to
make the border-width of an _I_n_p_u_t_O_n_l_y window nonzero.

If the override-redirect attribute of the window is _F_a_l_s_e
and some other client has selected _S_u_b_s_t_r_u_c_t_u_r_e_R_e_d_i_r_e_c_t on
the parent, a _C_o_n_f_i_g_u_r_e_R_e_q_u_e_s_t event is generated, and no
further processing is performed.  Otherwise, the following
is performed:

If some other client has selected _R_e_s_i_z_e_R_e_d_i_r_e_c_t on the win
dow and the inside width or height of the window is being
changed, a _R_e_s_i_z_e_R_e_q_u_e_s_t 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
_R_e_s_i_z_e_R_e_d_i_r_e_c_t and that _S_u_b_s_t_r_u_c_t_u_r_e_R_e_d_i_r_e_c_t on the parent
has precedence over _R_e_s_i_z_e_R_e_d_i_r_e_c_t on the window.

The geometry of the window is changed as specified, the win
dow is restacked among siblings, and a _C_o_n_f_i_g_u_r_e_N_o_t_i_f_y 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 con
tents of the window are not lost but move with the window.
Changing the inside width or height of the window causes its
contents to be moved or lost, depending on the bit-gravity
of the window.  It also causes children to be reconfigured,
depending on their win-gravity.  For a change of width and
height of W and H, we define the [x, y] pairs as:



                             2288





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------
DDiirreeccttiioonn   DDeellttaass
-----------------------
_N_o_r_t_h_W_e_s_t   [0, 0]
_N_o_r_t_h       [W/2, 0]
_N_o_r_t_h_E_a_s_t   [W, 0]
_W_e_s_t        [0, H/2]
_C_e_n_t_e_r      [W/2, H/2]
_E_a_s_t        [W, H/2]
_S_o_u_t_h_W_e_s_t   [0, H]
_S_o_u_t_h       [W/2, H]
_S_o_u_t_h_E_a_s_t   [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 _G_r_a_v_i_t_y_N_o_t_i_f_y
event.  _G_r_a_v_i_t_y_N_o_t_i_f_y events are generated after the _C_o_n_f_i_g_
_u_r_e_N_o_t_i_f_y event is generated.

A gravity of _S_t_a_t_i_c 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 _S_t_a_t_i_c 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 _F_o_r_g_e_t 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 _F_o_r_g_e_t instead.

A win-gravity of _U_n_m_a_p is like _N_o_r_t_h_W_e_s_t, but the child is
also unmapped when the parent is resized, and an _U_n_m_a_p_N_o_t_i_f_y
event is generated.  _U_n_m_a_p_N_o_t_i_f_y events are generated after
the _C_o_n_f_i_g_u_r_e_N_o_t_i_f_y event is generated.

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





                             2299





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


_A_b_o_v_e        The window is placed just above the sibling.
_B_e_l_o_w        The window is placed just below the sibling.
_T_o_p_I_f        If the sibling occludes the window, then the
             window is placed at the top of the stack.
_B_o_t_t_o_m_I_f     If the window occludes the sibling, then the
             window is placed at the bottom of the stack.
_O_p_p_o_s_i_t_e     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:

_A_b_o_v_e        The window is placed at the top of the stack.
_B_e_l_o_w        The window is placed at the bottom of the
             stack.
_T_o_p_I_f        If any sibling occludes the window, then the
             window is placed at the top of the stack.
_B_o_t_t_o_m_I_f     If the window occludes any sibling, then the
             window is placed at the bottom of the stack.
_O_p_p_o_s_i_t_e     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 _M_a_t_c_h error if a sibling is specified without a
stack-mode or if the window is not actually a sibling.

Note that the computations for _B_o_t_t_o_m_I_f, _T_o_p_I_f, and _O_p_p_o_s_i_t_e
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.


__
||    _C_i_r_c_u_l_a_t_e_W_i_n_d_o_w

_w_i_n_d_o_w: WINDOW
_d_i_r_e_c_t_i_o_n: {_R_a_i_s_e_L_o_w_e_s_t, _L_o_w_e_r_H_i_g_h_e_s_t}

||__  Errors: _V_a_l_u_e, _W_i_n_d_o_w


If some other client has selected _S_u_b_s_t_r_u_c_t_u_r_e_R_e_d_i_r_e_c_t on
the window, then a _C_i_r_c_u_l_a_t_e_R_e_q_u_e_s_t event is generated, and
no further processing is performed.  Otherwise, the follow
ing is performed, and then a _C_i_r_c_u_l_a_t_e_N_o_t_i_f_y event is



                             3300





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


generated if the window is actually restacked.

For _R_a_i_s_e_L_o_w_e_s_t, _C_i_r_c_u_l_a_t_e_W_i_n_d_o_w raises the lowest mapped
child (if any) that is occluded by another child to the top
of the stack.  For _L_o_w_e_r_H_i_g_h_e_s_t, _C_i_r_c_u_l_a_t_e_W_i_n_d_o_w 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.


__
||    _G_e_t_G_e_o_m_e_t_r_y

_d_r_a_w_a_b_l_e: DRAWABLE

   =>

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

||__  Errors: _D_r_a_w_a_b_l_e


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 _I_n_p_u_t_O_n_l_y window as a drawable to
this request.


__
||    _Q_u_e_r_y_T_r_e_e

_w_i_n_d_o_w: WINDOW

   =>

root: WINDOW
parent: WINDOW or _N_o_n_e
children: LISTofWINDOW

||__  Errors: _W_i_n_d_o_w


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



                             3311





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _I_n_t_e_r_n_A_t_o_m

_n_a_m_e: STRING8
_o_n_l_y_-_i_f_-_e_x_i_s_t_s: BOOL

   =>

atom: ATOM or _N_o_n_e

||__  Errors: _A_l_l_o_c, _V_a_l_u_e


This request returns the atom for the given name.  If only-
if-exists is _F_a_l_s_e, 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).


__
||    _G_e_t_A_t_o_m_N_a_m_e

_a_t_o_m: ATOM

   =>

name: STRING8

||__  Errors: _A_t_o_m


This request returns the name for the given atom.


__
||    _C_h_a_n_g_e_P_r_o_p_e_r_t_y

_w_i_n_d_o_w: WINDOW
_p_r_o_p_e_r_t_y, _t_y_p_e: ATOM
_f_o_r_m_a_t: {8, 16, 32}
_m_o_d_e: {_R_e_p_l_a_c_e, _P_r_e_p_e_n_d, _A_p_p_e_n_d}
_d_a_t_a: LISTofINT8 or LISTofINT16 or LISTofINT32

||__  Errors: _A_l_l_o_c, _A_t_o_m, _M_a_t_c_h, _V_a_l_u_e, _W_i_n_d_o_w


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.




                             3322





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


If the mode is _R_e_p_l_a_c_e, the previous property value is dis
carded.  If the mode is _P_r_e_p_e_n_d or _A_p_p_e_n_d, then the type and
format must match the existing property value (or a _M_a_t_c_h
error results).  If the property is undefined, it is treated
as defined with the correct type and format with zero-length
data.  For _P_r_e_p_e_n_d, the data is tacked on to the beginning
of the existing data, and for _A_p_p_e_n_d, it is tacked on to the
end of the existing data.

This request generates a _P_r_o_p_e_r_t_y_N_o_t_i_f_y 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.


__
||    _D_e_l_e_t_e_P_r_o_p_e_r_t_y

_w_i_n_d_o_w: WINDOW
_p_r_o_p_e_r_t_y: ATOM

||__  Errors: _A_t_o_m, _W_i_n_d_o_w


This request deletes the property from the specified window
if the property exists and generates a _P_r_o_p_e_r_t_y_N_o_t_i_f_y event
on the window unless the property does not exist.


__
||    _G_e_t_P_r_o_p_e_r_t_y

_w_i_n_d_o_w: WINDOW
_p_r_o_p_e_r_t_y: ATOM
_t_y_p_e: ATOM or _A_n_y_P_r_o_p_e_r_t_y_T_y_p_e
_l_o_n_g_-_o_f_f_s_e_t, _l_o_n_g_-_l_e_n_g_t_h: CARD32
_d_e_l_e_t_e: BOOL

   =>

type: ATOM or _N_o_n_e
format: {0, 8, 16, 32}
bytes-after: CARD32
value: LISTofINT8 or LISTofINT16 or LISTofINT32

||__  Errors: _A_t_o_m, _V_a_l_u_e, _W_i_n_d_o_w






                             3333





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


If the specified property does not exist for the specified
window, then the return type is _N_o_n_e, 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 _A_n_y_P_r_o_p_e_r_t_y_T_y_p_e 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 _V_a_l_u_e 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 _T_r_u_e and the bytes-after is zero, the property is also
deleted from the window, and a _P_r_o_p_e_r_t_y_N_o_t_i_f_y event is gen
erated on the window.


__
||    _R_o_t_a_t_e_P_r_o_p_e_r_t_i_e_s

_w_i_n_d_o_w: WINDOW
_d_e_l_t_a: INT16
_p_r_o_p_e_r_t_i_e_s: LISTofATOM

||__  Errors: _A_t_o_m, _M_a_t_c_h, _W_i_n_d_o_w


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





                             3344





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


If delta mod N is nonzero, a _P_r_o_p_e_r_t_y_N_o_t_i_f_y 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 _M_a_t_c_h error is
generated.  If an _A_t_o_m or _M_a_t_c_h error is generated, no prop
erties are changed.


__
||    _L_i_s_t_P_r_o_p_e_r_t_i_e_s

_w_i_n_d_o_w: WINDOW

   =>

atoms: LISTofATOM

||__  Errors: _W_i_n_d_o_w


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


__
||    _S_e_t_S_e_l_e_c_t_i_o_n_O_w_n_e_r

_s_e_l_e_c_t_i_o_n: ATOM
_o_w_n_e_r: WINDOW or _N_o_n_e
_t_i_m_e: TIMESTAMP or _C_u_r_r_e_n_t_T_i_m_e

||__  Errors: _A_t_o_m, _W_i_n_d_o_w


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 _C_u_r_r_e_n_t_T_i_m_e replaced by the
current server time.  If the owner window is specified as
_N_o_n_e, then the owner of the selection becomes _N_o_n_e (that is,
no owner).  Otherwise, the owner of the selection becomes
the client executing the request.  If the new owner (whether
a client or _N_o_n_e) is not the same as the current owner and
the current owner is not _N_o_n_e, then the current owner is
sent a _S_e_l_e_c_t_i_o_n_C_l_e_a_r 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
_N_o_n_e, but the last-change time is not affected.



                             3355





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


The selection atom is uninterpreted by the server.  The
owner window is returned by the _G_e_t_S_e_l_e_c_t_i_o_n_O_w_n_e_r request
and is reported in _S_e_l_e_c_t_i_o_n_R_e_q_u_e_s_t and _S_e_l_e_c_t_i_o_n_C_l_e_a_r
events.

Selections are global to the server.


__
||    _G_e_t_S_e_l_e_c_t_i_o_n_O_w_n_e_r

_s_e_l_e_c_t_i_o_n: ATOM

   =>

owner: WINDOW or _N_o_n_e

||__    Errors: _A_t_o_m


This request returns the current owner window of the speci
fied selection, if any.  If _N_o_n_e is returned, then there is
no owner for the selection.


__
||    _C_o_n_v_e_r_t_S_e_l_e_c_t_i_o_n

_s_e_l_e_c_t_i_o_n, _t_a_r_g_e_t: ATOM
_p_r_o_p_e_r_t_y: ATOM or _N_o_n_e
_r_e_q_u_e_s_t_o_r: WINDOW
_t_i_m_e: TIMESTAMP or _C_u_r_r_e_n_t_T_i_m_e

||__  Errors: _A_t_o_m, _W_i_n_d_o_w


If the specified selection has an owner, the server sends a
_S_e_l_e_c_t_i_o_n_R_e_q_u_e_s_t event to that owner.  If no owner for the
specified selection exists, the server generates a _S_e_l_e_c_
_t_i_o_n_N_o_t_i_f_y event to the requestor with property _N_o_n_e.  The
arguments are passed on unchanged in either of the events.


__
||    _S_e_n_d_E_v_e_n_t

_d_e_s_t_i_n_a_t_i_o_n: WINDOW or _P_o_i_n_t_e_r_W_i_n_d_o_w or _I_n_p_u_t_F_o_c_u_s
_p_r_o_p_a_g_a_t_e: BOOL
_e_v_e_n_t_-_m_a_s_k: SETofEVENT
_e_v_e_n_t: <normal-event-format>

||__  Errors: _V_a_l_u_e, _W_i_n_d_o_w





                             3366





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


If _P_o_i_n_t_e_r_W_i_n_d_o_w is specified, destination is replaced with
the window that the pointer is in.  If _I_n_p_u_t_F_o_c_u_s 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 _F_a_l_s_e, then the event is sent to every
client selecting on destination any of the event types in
event-mask.

If propagate is _T_r_u_e 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 _I_n_p_u_t_F_o_c_u_s 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.

The event code must be one of the core events or one of the
events defined by an extension (or a _V_a_l_u_e 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.






















                             3377





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _G_r_a_b_P_o_i_n_t_e_r

_g_r_a_b_-_w_i_n_d_o_w: WINDOW
_o_w_n_e_r_-_e_v_e_n_t_s: BOOL
_e_v_e_n_t_-_m_a_s_k: SETofPOINTEREVENT
_p_o_i_n_t_e_r_-_m_o_d_e, _k_e_y_b_o_a_r_d_-_m_o_d_e: {_S_y_n_c_h_r_o_n_o_u_s, _A_s_y_n_c_h_r_o_n_o_u_s}
_c_o_n_f_i_n_e_-_t_o: WINDOW or _N_o_n_e
_c_u_r_s_o_r: CURSOR or _N_o_n_e
_t_i_m_e: TIMESTAMP or _C_u_r_r_e_n_t_T_i_m_e

   =>

status: {_S_u_c_c_e_s_s, _A_l_r_e_a_d_y_G_r_a_b_b_e_d, _F_r_o_z_e_n, _I_n_v_a_l_i_d_T_i_m_e,
_N_o_t_V_i_e_w_a_b_l_e}

||__  Errors: _C_u_r_s_o_r, _V_a_l_u_e, _W_i_n_d_o_w


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 _F_a_l_s_e, all generated pointer events are
reported with respect to grab-window and are only reported
if selected by event-mask.  If owner-events is _T_r_u_e 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 _A_s_y_n_c_h_r_o_n_o_u_s, 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 _S_y_n_c_h_r_o_n_o_u_s, 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 _A_l_l_o_w_E_v_e_n_t_s 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.

If keyboard-mode is _A_s_y_n_c_h_r_o_n_o_u_s, keyboard event processing
is unaffected by activation of the grab.  If keyboard-mode
is _S_y_n_c_h_r_o_n_o_u_s, 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 _A_l_l_o_w_E_v_e_n_t_s 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.





                             3388





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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 _E_n_t_e_r_N_o_t_i_f_y and _L_e_a_v_e_N_o_t_i_f_y events.

The request fails with status _A_l_r_e_a_d_y_G_r_a_b_b_e_d if the pointer
is actively grabbed by some other client.  The request fails
with status _F_r_o_z_e_n if the pointer is frozen by an active
grab of another client.  The request fails with status
_N_o_t_V_i_e_w_a_b_l_e 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 _I_n_v_a_l_i_d_T_i_m_e 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 _C_u_r_r_e_n_t_T_i_m_e replaced by the current
server time.


__
||    _U_n_g_r_a_b_P_o_i_n_t_e_r

||__  _t_i_m_e: TIMESTAMP or _C_u_r_r_e_n_t_T_i_m_e


This request releases the pointer if this client has it
actively grabbed (from either _G_r_a_b_P_o_i_n_t_e_r or _G_r_a_b_B_u_t_t_o_n 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.

This request generates _E_n_t_e_r_N_o_t_i_f_y and _L_e_a_v_e_N_o_t_i_f_y events.

An _U_n_g_r_a_b_P_o_i_n_t_e_r 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.





                             3399





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _G_r_a_b_B_u_t_t_o_n

_m_o_d_i_f_i_e_r_s: SETofKEYMASK or _A_n_y_M_o_d_i_f_i_e_r
_b_u_t_t_o_n: BUTTON or _A_n_y_B_u_t_t_o_n
_g_r_a_b_-_w_i_n_d_o_w: WINDOW
_o_w_n_e_r_-_e_v_e_n_t_s: BOOL
_e_v_e_n_t_-_m_a_s_k: SETofPOINTEREVENT
_p_o_i_n_t_e_r_-_m_o_d_e, _k_e_y_b_o_a_r_d_-_m_o_d_e: {_S_y_n_c_h_r_o_n_o_u_s, _A_s_y_n_c_h_r_o_n_o_u_s}
_c_o_n_f_i_n_e_-_t_o: WINDOW or _N_o_n_e
_c_u_r_s_o_r: CURSOR or _N_o_n_e

||__  Errors: _A_c_c_e_s_s, _C_u_r_s_o_r, _V_a_l_u_e, _W_i_n_d_o_w


This request establishes a passive grab.  In the future, the
pointer is actively grabbed as described in _G_r_a_b_P_o_i_n_t_e_r, the
last-pointer-grab time is set to the time at which the but
ton was pressed (as transmitted in the _B_u_t_t_o_n_P_r_e_s_s event),
and the _B_u_t_t_o_n_P_r_e_s_s event is reported if all of the follow
ing conditions are true:

    The pointer is not grabbed and the specified button is
     logically pressed when the specified modifier keys are
     logically down, and no other buttons or modifier keys
     are logically down.

    The grab-window contains the pointer.

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

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

The interpretation of the remaining arguments is the same as
for _G_r_a_b_P_o_i_n_t_e_r.  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 _A_n_y_M_o_d_i_f_i_e_r is equivalent to issuing
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 _A_n_y_B_u_t_t_o_n 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 _A_c_c_e_s_s error is generated if some other client has
already issued a _G_r_a_b_B_u_t_t_o_n request with the same button/key



                             4400





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


combination on the same window.  When using _A_n_y_M_o_d_i_f_i_e_r or
_A_n_y_B_u_t_t_o_n, the request fails completely (no grabs are estab
lished), and an _A_c_c_e_s_s error is generated if there is a con
flicting grab for any combination.  The request has no
effect on an active grab.


__
||    _U_n_g_r_a_b_B_u_t_t_o_n

_m_o_d_i_f_i_e_r_s: SETofKEYMASK or _A_n_y_M_o_d_i_f_i_e_r
_b_u_t_t_o_n: BUTTON or _A_n_y_B_u_t_t_o_n
_g_r_a_b_-_w_i_n_d_o_w: WINDOW

||__  Errors: _V_a_l_u_e, _W_i_n_d_o_w


This request releases the passive button/key combination on
the specified window if it was grabbed by this client.  A
modifiers argument of _A_n_y_M_o_d_i_f_i_e_r is equivalent to issuing
the request for all possible modifier combinations (includ
ing the combination of no modifiers).  A button of _A_n_y_B_u_t_t_o_n
is equivalent to issuing the request for all possible but
tons.  The request has no effect on an active grab.


__
||    _C_h_a_n_g_e_A_c_t_i_v_e_P_o_i_n_t_e_r_G_r_a_b

_e_v_e_n_t_-_m_a_s_k: SETofPOINTEREVENT
_c_u_r_s_o_r: CURSOR or _N_o_n_e
_t_i_m_e: TIMESTAMP or _C_u_r_r_e_n_t_T_i_m_e

||__  Errors: _C_u_r_s_o_r, _V_a_l_u_e


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 _G_r_a_b_P_o_i_n_t_e_r.  This
request has no effect on the parameters of any passive grabs
established with _G_r_a_b_B_u_t_t_o_n.














                             4411





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _G_r_a_b_K_e_y_b_o_a_r_d

_g_r_a_b_-_w_i_n_d_o_w: WINDOW
_o_w_n_e_r_-_e_v_e_n_t_s: BOOL
_p_o_i_n_t_e_r_-_m_o_d_e, _k_e_y_b_o_a_r_d_-_m_o_d_e: {_S_y_n_c_h_r_o_n_o_u_s, _A_s_y_n_c_h_r_o_n_o_u_s}
_t_i_m_e: TIMESTAMP or _C_u_r_r_e_n_t_T_i_m_e

   =>

status: {_S_u_c_c_e_s_s, _A_l_r_e_a_d_y_G_r_a_b_b_e_d, _F_r_o_z_e_n, _I_n_v_a_l_i_d_T_i_m_e,
_N_o_t_V_i_e_w_a_b_l_e}

||__  Errors: _V_a_l_u_e, _W_i_n_d_o_w


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 _F_a_l_s_e, all generated key events are
reported with respect to grab-window.  If owner-events is
_T_r_u_e 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
_K_e_y_P_r_e_s_s and _K_e_y_R_e_l_e_a_s_e events are always reported, indepen
dent of any event selection made by the client.

If keyboard-mode is _A_s_y_n_c_h_r_o_n_o_u_s, 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 _S_y_n_c_h_r_o_n_o_u_s, 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 _A_l_l_o_w_E_v_e_n_t_s 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 _A_s_y_n_c_h_r_o_n_o_u_s, pointer event processing is
unaffected by activation of the grab.  If pointer-mode is
_S_y_n_c_h_r_o_n_o_u_s, 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 _A_l_l_o_w_E_v_e_n_t_s 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 _F_o_c_u_s_I_n and _F_o_c_u_s_O_u_t events.

The request fails with status _A_l_r_e_a_d_y_G_r_a_b_b_e_d if the keyboard
is actively grabbed by some other client.  The request fails
with status _F_r_o_z_e_n if the keyboard is frozen by an active



                             4422





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


grab of another client.  The request fails with status
_N_o_t_V_i_e_w_a_b_l_e if grab-window is not viewable.  The request
fails with status _I_n_v_a_l_i_d_T_i_m_e 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 _C_u_r_r_e_n_t_T_i_m_e replaced by the
current server time.


__
||    _U_n_g_r_a_b_K_e_y_b_o_a_r_d

||__  _t_i_m_e: TIMESTAMP or _C_u_r_r_e_n_t_T_i_m_e


This request releases the keyboard if this client has it
actively grabbed (as a result of either _G_r_a_b_K_e_y_b_o_a_r_d or
_G_r_a_b_K_e_y) 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 _F_o_c_u_s_I_n and _F_o_c_u_s_O_u_t events.

An _U_n_g_r_a_b_K_e_y_b_o_a_r_d is performed automatically if the event
window for an active keyboard grab becomes not viewable.


__
||    _G_r_a_b_K_e_y

_k_e_y: KEYCODE or _A_n_y_K_e_y
_m_o_d_i_f_i_e_r_s: SETofKEYMASK or _A_n_y_M_o_d_i_f_i_e_r
_g_r_a_b_-_w_i_n_d_o_w: WINDOW
_o_w_n_e_r_-_e_v_e_n_t_s: BOOL
_p_o_i_n_t_e_r_-_m_o_d_e, _k_e_y_b_o_a_r_d_-_m_o_d_e: {_S_y_n_c_h_r_o_n_o_u_s, _A_s_y_n_c_h_r_o_n_o_u_s}

||__  Errors: _A_c_c_e_s_s, _V_a_l_u_e, _W_i_n_d_o_w


This request establishes a passive grab on the keyboard.  In
the future, the keyboard is actively grabbed as described in
_G_r_a_b_K_e_y_b_o_a_r_d, the last-keyboard-grab time is set to the time
at which the key was pressed (as transmitted in the _K_e_y_P_r_e_s_s
event), and the _K_e_y_P_r_e_s_s event is reported if all of the
following conditions are true:

    The keyboard is not grabbed and the specified key
     (which can itself be a modifier key) is logically
     pressed when the specified modifier keys are logically
     down, and no other modifier keys are logically down.

    Either the grab-window is an ancestor of (or is) the
     focus window, or the grab-window is a descendent of the
     focus window and contains the pointer.



                             4433





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


    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 _G_r_a_b_K_e_y_b_o_a_r_d.  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 _A_n_y_M_o_d_i_f_i_e_r 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 _A_n_y_K_e_y 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 _V_a_l_u_e error results).

An _A_c_c_e_s_s error is generated if some other client has issued
a _G_r_a_b_K_e_y with the same key combination on the same window.
When using _A_n_y_M_o_d_i_f_i_e_r or _A_n_y_K_e_y, the request fails com
pletely (no grabs are established), and an _A_c_c_e_s_s error is
generated if there is a conflicting grab for any combina
tion.


__
||    _U_n_g_r_a_b_K_e_y

_k_e_y: KEYCODE or _A_n_y_K_e_y
_m_o_d_i_f_i_e_r_s: SETofKEYMASK or _A_n_y_M_o_d_i_f_i_e_r
_g_r_a_b_-_w_i_n_d_o_w: WINDOW

||__  Errors: _V_a_l_u_e, _W_i_n_d_o_w


This request releases the key combination on the specified
window if it was grabbed by this client.  A modifiers argu
ment of _A_n_y_M_o_d_i_f_i_e_r is equivalent to issuing the request for
all possible modifier combinations (including the combina
tion of no modifiers).  A key of _A_n_y_K_e_y is equivalent to
issuing the request for all possible keycodes.  This request
has no effect on an active grab.










                             4444





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _A_l_l_o_w_E_v_e_n_t_s

_m_o_d_e: {_A_s_y_n_c_P_o_i_n_t_e_r, _S_y_n_c_P_o_i_n_t_e_r, _R_e_p_l_a_y_P_o_i_n_t_e_r,
_A_s_y_n_c_K_e_y_b_o_a_r_d,
           _S_y_n_c_K_e_y_b_o_a_r_d, _R_e_p_l_a_y_K_e_y_b_o_a_r_d, _A_s_y_n_c_B_o_t_h,
_S_y_n_c_B_o_t_h}
_t_i_m_e: TIMESTAMP or _C_u_r_r_e_n_t_T_i_m_e

||__  Errors: _V_a_l_u_e


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 _A_s_y_n_c_P_o_i_n_t_e_r, 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, _A_s_y_n_c_P_o_i_n_t_e_r thaws for both.  _A_s_y_n_c_P_o_i_n_t_e_r has no
effect if the pointer is not frozen by the client, but the
pointer need not be grabbed by the client.

For _S_y_n_c_P_o_i_n_t_e_r, if the pointer is frozen and actively
grabbed by the client, pointer event processing continues
normally until the next _B_u_t_t_o_n_P_r_e_s_s or _B_u_t_t_o_n_R_e_l_e_a_s_e 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.  _S_y_n_c_P_o_i_n_t_e_r has no effect if the pointer is not
frozen by the client or if the pointer is not grabbed by the
client.

For _R_e_p_l_a_y_P_o_i_n_t_e_r, 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 _G_r_a_b_B_u_t_
_t_o_n or from a previous _A_l_l_o_w_E_v_e_n_t_s with mode _S_y_n_c_P_o_i_n_t_e_r but
not from a _G_r_a_b_P_o_i_n_t_e_r), 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 _A_s_y_n_c_K_e_y_b_o_a_r_d, 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, _A_s_y_n_c_K_e_y_b_o_a_r_d thaws for both.  _A_s_y_n_c_K_e_y_b_o_a_r_d has
no effect if the keyboard is not frozen by the client, but
the keyboard need not be grabbed by the client.

For _S_y_n_c_K_e_y_b_o_a_r_d, if the keyboard is frozen and actively
grabbed by the client, keyboard event processing continues



                             4455





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


normally until the next _K_e_y_P_r_e_s_s or _K_e_y_R_e_l_e_a_s_e 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.  _S_y_n_c_K_e_y_b_o_a_r_d has no effect if the keyboard is not
frozen by the client or if the keyboard is not grabbed by
the client.

For _R_e_p_l_a_y_K_e_y_b_o_a_r_d, 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
_G_r_a_b_K_e_y or from a previous _A_l_l_o_w_E_v_e_n_t_s with mode _S_y_n_c_K_e_y_
_b_o_a_r_d but not from a _G_r_a_b_K_e_y_b_o_a_r_d), 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 _S_y_n_c_B_o_t_h, if both pointer and keyboard are frozen by the
client, event processing (for both devices) continues nor
mally until the next _B_u_t_t_o_n_P_r_e_s_s, _B_u_t_t_o_n_R_e_l_e_a_s_e, _K_e_y_P_r_e_s_s,
or _K_e_y_R_e_l_e_a_s_e 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).  _S_y_n_c_B_o_t_h 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, _S_y_n_c_B_o_t_h thaws for both (but a
subsequent freeze for _S_y_n_c_B_o_t_h will only freeze each device
once).

For _A_s_y_n_c_B_o_t_h, 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, _A_s_y_n_c_B_o_t_h thaws for both.  _A_s_y_n_c_B_o_t_h
has no effect unless both pointer and keyboard are frozen by
the client.

_A_s_y_n_c_P_o_i_n_t_e_r, _S_y_n_c_P_o_i_n_t_e_r, and _R_e_p_l_a_y_P_o_i_n_t_e_r have no effect
on processing of keyboard events.  _A_s_y_n_c_K_e_y_b_o_a_r_d,
_S_y_n_c_K_e_y_b_o_a_r_d, and _R_e_p_l_a_y_K_e_y_b_o_a_r_d have no effect on process
ing 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



                             4466





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


of both grabs before events can again be processed.  If a
device is frozen twice by a single client, then a single
_A_l_l_o_w_E_v_e_n_t_s releases both.


__
||||__  _G_r_a_b_S_e_r_v_e_r


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


__
||||__  _U_n_g_r_a_b_S_e_r_v_e_r


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


__
||    _Q_u_e_r_y_P_o_i_n_t_e_r

_w_i_n_d_o_w: WINDOW

   =>

root: WINDOW
child: WINDOW or _N_o_n_e
same-screen: BOOL
root-x, root-y, win-x, win-y: INT16
mask: SETofKEYBUTMASK

||__  Errors: _W_i_n_d_o_w


The root window the pointer is logically on and the pointer
coordinates relative to the root's origin are returned.  If
same-screen is _F_a_l_s_e, then the pointer is not on the same
screen as the argument window, child is _N_o_n_e, and win-x and
win-y are zero.  If same-screen is _T_r_u_e, 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.








                             4477





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _G_e_t_M_o_t_i_o_n_E_v_e_n_t_s

_s_t_a_r_t, _s_t_o_p: TIMESTAMP or _C_u_r_r_e_n_t_T_i_m_e
_w_i_n_d_o_w: WINDOW

   =>

events: LISTofTIMECOORD

where:

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


||__  Errors: _W_i_n_d_o_w


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
_C_u_r_r_e_n_t_T_i_m_e.


__
||    _T_r_a_n_s_l_a_t_e_C_o_o_r_d_i_n_a_t_e_s

_s_r_c_-_w_i_n_d_o_w, _d_s_t_-_w_i_n_d_o_w: WINDOW
_s_r_c_-_x, _s_r_c_-_y: INT16

   =>

same-screen: BOOL
child: WINDOW or _N_o_n_e
dst-x, dst-y: INT16

||__  Errors: _W_i_n_d_o_w


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
_F_a_l_s_e, 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.




                             4488





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _W_a_r_p_P_o_i_n_t_e_r

_s_r_c_-_w_i_n_d_o_w: WINDOW or _N_o_n_e
_d_s_t_-_w_i_n_d_o_w: WINDOW or _N_o_n_e
_s_r_c_-_x, _s_r_c_-_y: INT16
_s_r_c_-_w_i_d_t_h, _s_r_c_-_h_e_i_g_h_t: CARD16
_d_s_t_-_x, _d_s_t_-_y: INT16

||__  Errors: _W_i_n_d_o_w


If dst-window is _N_o_n_e, 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 _N_o_n_e, 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.


__
||    _S_e_t_I_n_p_u_t_F_o_c_u_s

_f_o_c_u_s: WINDOW or _P_o_i_n_t_e_r_R_o_o_t or _N_o_n_e
_r_e_v_e_r_t_-_t_o: {_P_a_r_e_n_t, _P_o_i_n_t_e_r_R_o_o_t, _N_o_n_e}
_t_i_m_e: TIMESTAMP or _C_u_r_r_e_n_t_T_i_m_e

||__  Errors: _M_a_t_c_h, _V_a_l_u_e, _W_i_n_d_o_w


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 _C_u_r_r_e_n_t_
_T_i_m_e replaced by the current server time.

If _N_o_n_e is specified as the focus, all keyboard events are
discarded until a new focus window is set.  In this case,



                             4499





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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 _P_o_i_n_t_e_r_R_o_o_t 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 _F_o_c_u_s_I_n and _F_o_c_u_s_O_u_t events.

The specified focus window must be viewable at the time of
the request (or a _M_a_t_c_h error results).  If the focus window
later becomes not viewable, the new focus window depends on
the revert-to argument.  If revert-to is _P_a_r_e_n_t, the focus
reverts to the parent (or the closest viewable ancestor) and
the new revert-to value is taken to be _N_o_n_e.  If revert-to
is _P_o_i_n_t_e_r_R_o_o_t or _N_o_n_e, the focus reverts to that value.
When the focus reverts, _F_o_c_u_s_I_n and _F_o_c_u_s_O_u_t events are gen
erated, but the last-focus-change time is not affected.


__
||    _G_e_t_I_n_p_u_t_F_o_c_u_s

   =>

focus: WINDOW or _P_o_i_n_t_e_r_R_o_o_t or _N_o_n_e
||__  revert-to: {_P_a_r_e_n_t, _P_o_i_n_t_e_r_R_o_o_t, _N_o_n_e}


This request returns the current focus state.


__
||    _Q_u_e_r_y_K_e_y_m_a_p

   =>

||__  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.



                             5500





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _O_p_e_n_F_o_n_t

_f_i_d: FONT
_n_a_m_e: STRING8

||__  Errors: _A_l_l_o_c, _I_D_C_h_o_i_c_e, _N_a_m_e


This request loads the specified font, if necessary, and
associates identifier fid with it.  The font name should use
the ISO Latin-1 encoding, and uppercase and lowercase do not
matter.  When the characters ``?'' and ``*'' are used in a
font name, a pattern match is performed and any matching
font is used.  In the pattern, the ``?'' character (octal
value 77) will match any single character, and the ``*''
character (octal value 52) will match any number of charac
ters.  A structured format for font names is specified in
the X Consortium standard _X _L_o_g_i_c_a_l _F_o_n_t _D_e_s_c_r_i_p_t_i_o_n _C_o_n_v_e_n_
_t_i_o_n_s.

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


__
||    _C_l_o_s_e_F_o_n_t

_f_o_n_t: FONT

||__  Errors: _F_o_n_t


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






















                             5511





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _Q_u_e_r_y_F_o_n_t

_f_o_n_t: FONTABLE

   =>

font-info: FONTINFO
char-infos: LISTofCHARINFO

where:


     FONTINFO:   [draw-direction: {_L_e_f_t_T_o_R_i_g_h_t, _R_i_g_h_t_T_o_L_e_f_t}
                  min-char-or-byte2, max-char-or-byte2: CARD16
                  min-byte1, max-byte1: CARD8
                  all-chars-exist: BOOL
                  default-char: CARD16
                  min-bounds: CHARINFO
                  max-bounds: CHARINFO
                  font-ascent: INT16
                  font-descent: INT16
                  properties: LISTofFONTPROP]
     FONTPROP:   [name: ATOM
                  value: <32-bit-value>]
     CHARINFO:   [left-side-bearing: INT16
                  right-side-bearing: INT16
                  character-width: INT16
                  ascent: INT16
                  descent: INT16
                  attributes: CARD16]


||__  Errors: _F_o_n_t


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, _L_e_f_t_T_o_R_i_g_h_t, or a negative,
_R_i_g_h_t_T_o_L_e_f_t, 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:





                             5522





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


     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 _T_r_u_e, 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
nonexistent character, then no printing is performed for an
undefined 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



                             5533





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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 _p_r_i_o_r_i knowledge of the property.  A
basic set of font properties is specified in the X Consor
tium standard _X _L_o_g_i_c_a_l _F_o_n_t _D_e_s_c_r_i_p_t_i_o_n _C_o_n_v_e_n_t_i_o_n_s.

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.







                             5544





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _Q_u_e_r_y_T_e_x_t_E_x_t_e_n_t_s

_f_o_n_t: FONTABLE
_s_t_r_i_n_g: STRING16

   =>

draw-direction: {_L_e_f_t_T_o_R_i_g_h_t, _R_i_g_h_t_T_o_L_e_f_t}
font-ascent: INT16
font-descent: INT16
overall-ascent: INT16
overall-descent: INT16
overall-width: INT32
overall-left: INT32
overall-right: INT32

||__  Errors: _F_o_n_t


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 _Q_u_e_r_y_F_o_n_t.  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.












                             5555





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _L_i_s_t_F_o_n_t_s

_p_a_t_t_e_r_n: STRING8
_m_a_x_-_n_a_m_e_s: CARD16

   =>

||__  names: LISTofSTRING8


This request returns a list of available font names (as con
trolled by the font search path; see _S_e_t_F_o_n_t_P_a_t_h 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.


__
||    _L_i_s_t_F_o_n_t_s_W_i_t_h_I_n_f_o

_p_a_t_t_e_r_n: STRING8
_m_a_x_-_n_a_m_e_s: CARD16

   =>+

name: STRING8
info: FONTINFO
replies-hint: CARD32

where:

||__  FONTINFO: <same type definition as in _Q_u_e_r_y_F_o_n_t>


This request is similar to _L_i_s_t_F_o_n_t_s, but it also returns
information about each font.  The information returned for
each font is identical to what _Q_u_e_r_y_F_o_n_t 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.







                             5566





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _S_e_t_F_o_n_t_P_a_t_h

_p_a_t_h: LISTofSTRING8

||__  Errors: _V_a_l_u_e


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.


__
||    _G_e_t_F_o_n_t_P_a_t_h

   =>

||__  path: LISTofSTRING8


This request returns the current search path for fonts.


__
||    _C_r_e_a_t_e_P_i_x_m_a_p

_p_i_d: PIXMAP
_d_r_a_w_a_b_l_e: DRAWABLE
_d_e_p_t_h: CARD8
_w_i_d_t_h, _h_e_i_g_h_t: CARD16

||__  Errors: _A_l_l_o_c, _D_r_a_w_a_b_l_e, _I_D_C_h_o_i_c_e, _V_a_l_u_e


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




                             5577





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


It is legal to pass an _I_n_p_u_t_O_n_l_y window as a drawable to
this request.


__
||    _F_r_e_e_P_i_x_m_a_p

_p_i_x_m_a_p: PIXMAP

||__  Errors: _P_i_x_m_a_p


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


__
||    _C_r_e_a_t_e_G_C

_c_i_d: GCONTEXT
_d_r_a_w_a_b_l_e: DRAWABLE
_v_a_l_u_e_-_m_a_s_k: BITMASK
_v_a_l_u_e_-_l_i_s_t: LISTofVALUE

Errors: _A_l_l_o_c, _D_r_a_w_a_b_l_e, _F_o_n_t, _I_D_C_h_o_i_c_e, _M_a_t_c_h, _P_i_x_m_a_p,
||__  _V_a_l_u_e


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
_M_a_t_c_h error.

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

-------------------------------------------------------------
CCoommppoonneenntt         TTyyppee
-------------------------------------------------------------
function          {_C_l_e_a_r, _A_n_d, _A_n_d_R_e_v_e_r_s_e, _C_o_p_y,
                  _A_n_d_I_n_v_e_r_t_e_d, _N_o_O_p, _X_o_r,
                    _O_r, _N_o_r, _E_q_u_i_v, _I_n_v_e_r_t, _O_r_R_e_v_e_r_s_e,
                  _C_o_p_y_I_n_v_e_r_t_e_d,
                    _O_r_I_n_v_e_r_t_e_d, _N_a_n_d, _S_e_t}
plane-mask        CARD32
foreground        CARD32
background        CARD32
line-width        CARD16
line-style        {_S_o_l_i_d, _O_n_O_f_f_D_a_s_h, _D_o_u_b_l_e_D_a_s_h}
cap-style         {_N_o_t_L_a_s_t, _B_u_t_t, _R_o_u_n_d, _P_r_o_j_e_c_t_i_n_g}
join-style        {_M_i_t_e_r, _R_o_u_n_d, _B_e_v_e_l}




                             5588





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-------------------------------------------------------------
CCoommppoonneenntt         TTyyppee
-------------------------------------------------------------
fill-style        {_S_o_l_i_d, _T_i_l_e_d, _O_p_a_q_u_e_S_t_i_p_p_l_e_d, _S_t_i_p_p_l_e_d}
fill-rule         {_E_v_e_n_O_d_d, _W_i_n_d_i_n_g}
arc-mode          {_C_h_o_r_d, _P_i_e_S_l_i_c_e}
tile              PIXMAP
stipple           PIXMAP
tile-stipple-x-   INT16
origin
tile-stipple-y-   INT16
origin
font              FONT
subwindow-mode    {_C_l_i_p_B_y_C_h_i_l_d_r_e_n, _I_n_c_l_u_d_e_I_n_f_e_r_i_o_r_s}
graphics-expo    BOOL
sures
clip-x-origin     INT16
clip-y-origin     INT16
clip-mask         PIXMAP or _N_o_n_e
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:

---------------------------------------
FFuunnccttiioonn          OOppeerraattiioonn
---------------------------------------
_C_l_e_a_r             0
_A_n_d               src AND dst
_A_n_d_R_e_v_e_r_s_e        src AND (NOT dst)
_C_o_p_y              src
_A_n_d_I_n_v_e_r_t_e_d       (NOT src) AND dst
_N_o_O_p              dst
_X_o_r               src XOR dst
_O_r                src OR dst
_N_o_r               (NOT src) AND (NOT
                  dst)




                             5599





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


_E_q_u_i_v             (NOT src) XOR dst
_I_n_v_e_r_t            NOT dst
_O_r_R_e_v_e_r_s_e         src OR (NOT dst)
_C_o_p_y_I_n_v_e_r_t_e_d      NOT src
_O_r_I_n_v_e_r_t_e_d        (NOT src) OR dst
_N_a_n_d              (NOT src) OR (NOT
                  dst)
_S_e_t               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
infinitely thin edges.  If the center of the pixel is
exactly on the bounding box, it is part of the line if and
only if the interior is immediately to its right (x increas
ing direction).  Pixels with centers on a horizontal edge
are a special case and are part of the line if and only if
the interior or the boundary is immediately below (y
increasing direction) and if the interior or the boundary is
immediately to the right (x increasing direction).  Note
that this description is a mathematical model describing the
pixels that are drawn for a wide line and does not imply
that trigonometry is required to implement such a model.
Real or fixed point arithmetic is recommended for computing
the corners of the line endpoints for lines greater than one
pixel in width.

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



                             6600





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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:

_S_o_l_i_d        The full path of the line is drawn.
_D_o_u_b_l_e_D_a_s_h   The full path of the line is drawn, but the
             even dashes are filled differently than the odd
             dashes (see fill-style), with _B_u_t_t cap-style
             used where even and odd dashes meet.
_O_n_O_f_f_D_a_s_h    Only the even dashes are drawn, and cap-style
             applies to all internal ends of the individual
             dashes (except _N_o_t_L_a_s_t is treated as _B_u_t_t).


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

_N_o_t_L_a_s_t      The result is equivalent to _B_u_t_t, except that
             for a line-width of zero the final endpoint is
             not drawn.
_B_u_t_t         The result is square at the endpoint (perpen
             dicular to the slope of the line) with no pro
             jection beyond.
_R_o_u_n_d        The result is a circular arc with its diameter
             equal to the line-width, centered on the end
             point; it is equivalent to _B_u_t_t for line-width
             zero.
_P_r_o_j_e_c_t_i_n_g   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 _B_u_t_t for line-width zero.


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

_M_i_t_e_r        The outer edges of the two lines extend to meet
             at an angle.  However, if the angle is less
             than 11 degrees, a _B_e_v_e_l join-style is used
             instead.





                             6611





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


_R_o_u_n_d        The result is a circular arc with a diameter
             equal to the line-width, centered on the join
             point.
_B_e_v_e_l        The result is _B_u_t_t 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:

_N_o_t_L_a_s_t      thin    This is device-dependent, but the desired
                     effect is that nothing is drawn.
_B_u_t_t         thin    This is device-dependent, but the desired
                     effect is that a single pixel is drawn.
_R_o_u_n_d        thin    This is the same as _B_u_t_t/thin.
_P_r_o_j_e_c_t_i_n_g   thin    This is the same as _B_u_t_t/thin.
_B_u_t_t         wide    Nothing is drawn.
_R_o_u_n_d        wide    The closed path is a circle, centered at
                     the endpoint and with a diameter equal to
                     the line-width.
_P_r_o_j_e_c_t_i_n_g   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 _M_a_t_c_h error results).  The stipple pixmap
must have depth one and must have the same root as the gcon
text (or a _M_a_t_c_h error results).  For fill-style _S_t_i_p_p_l_e_d
(but not fill-style _O_p_a_q_u_e_S_t_i_p_p_l_e_d), 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.




                             6622





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


The fill-style defines the contents of the source for line,
text, and fill requests.  For all text and fill requests
(for example, _P_o_l_y_T_e_x_t_8, _P_o_l_y_T_e_x_t_1_6, _P_o_l_y_F_i_l_l_R_e_c_t_a_n_g_l_e,
_F_i_l_l_P_o_l_y, and _P_o_l_y_F_i_l_l_A_r_c) as well as for line requests with
line-style _S_o_l_i_d, (for example, _P_o_l_y_L_i_n_e, _P_o_l_y_S_e_g_m_e_n_t,
_P_o_l_y_R_e_c_t_a_n_g_l_e, _P_o_l_y_A_r_c) and for the even dashes for line
requests with line-style _O_n_O_f_f_D_a_s_h or _D_o_u_b_l_e_D_a_s_h:

_S_o_l_i_d          Foreground
_T_i_l_e_d          Tile
_O_p_a_q_u_e_S_t_i_p_    A tile with the same width and height as
_p_l_e_d           stipple but with background everywhere stip
               ple has a zero and with foreground everywhere
               stipple has a one
_S_t_i_p_p_l_e_d       Foreground masked by stipple


For the odd dashes for line requests with line-style
_D_o_u_b_l_e_D_a_s_h:

_S_o_l_i_d          Background
_T_i_l_e_d          Same as for even dashes
_O_p_a_q_u_e_S_t_i_p_    Same as for even dashes
_p_l_e_d
_S_t_i_p_p_l_e_d       Background masked by stipple


The dashes value allowed here is actually a simplified form
of the more general patterns that can be set with _S_e_t_D_a_s_h_e_s.
Specifying a value of N here is equivalent to specifying the
two element list [N, N] in _S_e_t_D_a_s_h_e_s.  The value must be
nonzero (or a _V_a_l_u_e error results).  The meaning of dash-
offset and dashes are explained in the _S_e_t_D_a_s_h_e_s 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 _M_a_t_c_h error results).  If clip-mask is _N_o_n_e,
then pixels are always drawn, regardless of the clip origin.
The clip-mask can also be set with the _S_e_t_C_l_i_p_R_e_c_t_a_n_g_l_e_s
request.

For _C_l_i_p_B_y_C_h_i_l_d_r_e_n, both source and destination windows are
additionally clipped by all viewable _I_n_p_u_t_O_u_t_p_u_t children.
For _I_n_c_l_u_d_e_I_n_f_e_r_i_o_r_s, 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 _I_n_c_l_u_d_e_I_n_f_e_r_i_o_r_s



                             6633





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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 _F_i_l_l_P_o_l_y requests.  _E_v_e_n_O_d_d means
a point is inside if an infinite ray with the point as ori
gin crosses the path an odd number of times.  For _W_i_n_d_i_n_g, 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 _P_o_l_y_F_i_l_l_A_r_c request.

The graphics-exposures flag controls _G_r_a_p_h_i_c_s_E_x_p_o_s_u_r_e event
generation for _C_o_p_y_A_r_e_a and _C_o_p_y_P_l_a_n_e requests (and any sim
ilar requests defined by extensions).

The default component values are:

---------------------------------------------------------------
CCoommppoonneenntt             DDeeffaauulltt
---------------------------------------------------------------
function              _C_o_p_y
plane-mask            all ones
foreground            0
background            1
line-width            0
line-style            _S_o_l_i_d
cap-style             _B_u_t_t
join-style            _M_i_t_e_r
fill-style            _S_o_l_i_d
fill-rule             _E_v_e_n_O_d_d
arc-mode              _P_i_e_S_l_i_c_e







                             6644





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


---------------------------------------------------------------
CCoommppoonneenntt             DDeeffaauulltt
---------------------------------------------------------------
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        _C_l_i_p_B_y_C_h_i_l_d_r_e_n
graphics-exposures    _T_r_u_e
clip-x-origin         0
clip-y-origin         0
clip-mask             _N_o_n_e
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.


__
||    _C_h_a_n_g_e_G_C

_g_c: GCONTEXT
_v_a_l_u_e_-_m_a_s_k: BITMASK
_v_a_l_u_e_-_l_i_s_t: LISTofVALUE

||__  Errors: _A_l_l_o_c, _F_o_n_t, _G_C_o_n_t_e_x_t, _M_a_t_c_h, _P_i_x_m_a_p, _V_a_l_u_e


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



                             6655





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


values and restrictions are the same as for _C_r_e_a_t_e_G_C.

Changing the clip-mask also overrides any previous _S_e_t_
_C_l_i_p_R_e_c_t_a_n_g_l_e_s request on the context.  Changing dash-offset
or dashes overrides any previous _S_e_t_D_a_s_h_e_s 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.


__
||    _C_o_p_y_G_C

_s_r_c_-_g_c, _d_s_t_-_g_c: GCONTEXT
_v_a_l_u_e_-_m_a_s_k: BITMASK

||__  Errors: _A_l_l_o_c, _G_C_o_n_t_e_x_t, _M_a_t_c_h, _V_a_l_u_e


This request copies components from src-gc to dst-gc.  The
value-mask specifies which components to copy, as for
_C_r_e_a_t_e_G_C.  The two gcontexts must have the same root and the
same depth (or a _M_a_t_c_h error results).


__
||    _S_e_t_D_a_s_h_e_s

_g_c: GCONTEXT
_d_a_s_h_-_o_f_f_s_e_t: CARD16
_d_a_s_h_e_s: LISTofCARD8

||__  Errors: _A_l_l_o_c, _G_C_o_n_t_e_x_t, _V_a_l_u_e


This request sets dash-offset and dashes in gc for dashed
line styles.  Dashes cannot be empty (or a _V_a_l_u_e 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 _V_a_l_u_e 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



                             6666





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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 _D_o_u_b_l_e_D_a_s_h line-style is the same as the set of
pixels used to render the primitive with _S_o_l_i_d line-style.

For any graphics primitive, if the primitive is drawn with
_O_n_O_f_f_D_a_s_h or _D_o_u_b_l_e_D_a_s_h 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.


__
||    _S_e_t_C_l_i_p_R_e_c_t_a_n_g_l_e_s

_g_c: GCONTEXT
_c_l_i_p_-_x_-_o_r_i_g_i_n, _c_l_i_p_-_y_-_o_r_i_g_i_n: INT16
_r_e_c_t_a_n_g_l_e_s: LISTofRECTANGLE
_o_r_d_e_r_i_n_g: {_U_n_S_o_r_t_e_d, _Y_S_o_r_t_e_d, _Y_X_S_o_r_t_e_d, _Y_X_B_a_n_d_e_d}

||__  Errors: _A_l_l_o_c, _G_C_o_n_t_e_x_t, _M_a_t_c_h, _V_a_l_u_e


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 _N_o_n_e as the clip-mask in
_C_r_e_a_t_e_G_C and _C_h_a_n_g_e_G_C.




                             6677





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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 _M_a_t_c_h error, but
it is not required to do so.  If no error is generated, the
graphics results are undefined.  _U_n_S_o_r_t_e_d means that the
rectangles are in arbitrary order.  _Y_S_o_r_t_e_d means that the
rectangles are nondecreasing in their Y origin.  _Y_X_S_o_r_t_e_d
additionally constrains _Y_S_o_r_t_e_d order in that all rectangles
with an equal Y origin are nondecreasing in their X origin.
_Y_X_B_a_n_d_e_d additionally constrains _Y_X_S_o_r_t_e_d by requiring that,
for every possible Y scanline, all rectangles that include
that scanline have identical Y origins and Y extents.


__
||    _F_r_e_e_G_C

_g_c: GCONTEXT

||__  Errors: _G_C_o_n_t_e_x_t


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


__
||    _C_l_e_a_r_A_r_e_a

_w_i_n_d_o_w: WINDOW
_x, _y: INT16
_w_i_d_t_h, _h_e_i_g_h_t: CARD16
_e_x_p_o_s_u_r_e_s: BOOL

||__  Errors: _M_a_t_c_h, _V_a_l_u_e, _W_i_n_d_o_w


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 _C_o_p_y and a subwindow-
mode of _C_l_i_p_B_y_C_h_i_l_d_r_e_n.  If the window has background _N_o_n_e,
the contents of the window are not changed.  In either case,
if exposures is _T_r_u_e, 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 _M_a_t_c_h error to use an _I_n_p_u_t_O_n_l_y window in this
request.




                             6688





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _C_o_p_y_A_r_e_a

_s_r_c_-_d_r_a_w_a_b_l_e, _d_s_t_-_d_r_a_w_a_b_l_e: DRAWABLE
_g_c: GCONTEXT
_s_r_c_-_x, _s_r_c_-_y: INT16
_w_i_d_t_h, _h_e_i_g_h_t: CARD16
_d_s_t_-_x, _d_s_t_-_y: INT16

||__  Errors: _D_r_a_w_a_b_l_e, _G_C_o_n_t_e_x_t, _M_a_t_c_h


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 _M_a_t_c_h 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 _N_o_n_e, these correspond
ing destination regions are tiled (with plane-mask of all
ones and function _C_o_p_y) with that background.  Regardless of
tiling and whether the destination is a window or a pixmap,
if graphics-exposures in gc is _T_r_u_e, then _G_r_a_p_h_i_c_s_E_x_p_o_s_u_r_e
events for all corresponding destination regions are gener
ated.

If graphics-exposures is _T_r_u_e but no _G_r_a_p_h_i_c_s_E_x_p_o_s_u_r_e events
are generated, then a _N_o_E_x_p_o_s_u_r_e event is generated.

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


__
||    _C_o_p_y_P_l_a_n_e

_s_r_c_-_d_r_a_w_a_b_l_e, _d_s_t_-_d_r_a_w_a_b_l_e: DRAWABLE
_g_c: GCONTEXT
_s_r_c_-_x, _s_r_c_-_y: INT16
_w_i_d_t_h, _h_e_i_g_h_t: CARD16
_d_s_t_-_x, _d_s_t_-_y: INT16
_b_i_t_-_p_l_a_n_e: CARD32

||__  Errors: _D_r_a_w_a_b_l_e, _G_C_o_n_t_e_x_t, _M_a_t_c_h, _V_a_l_u_e






                             6699





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


The src-drawable must have the same root as dst-drawable (or
a _M_a_t_c_h error results), but it need not have the same depth.
The bit-plane must have exactly one bit set to 1 and the
value of bit-plane must be less than 2_n where _n is the depth
of src-drawable (or a _V_a_l_u_e 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 _C_o_p_y_A_r_e_a 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 _O_p_a_q_u_e_S_t_i_p_p_l_e_d 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


__
||    _P_o_l_y_P_o_i_n_t

_d_r_a_w_a_b_l_e: DRAWABLE
_g_c: GCONTEXT
_c_o_o_r_d_i_n_a_t_e_-_m_o_d_e: {_O_r_i_g_i_n, _P_r_e_v_i_o_u_s}
_p_o_i_n_t_s: LISTofPOINT

||__  Errors: _D_r_a_w_a_b_l_e, _G_C_o_n_t_e_x_t, _M_a_t_c_h, _V_a_l_u_e


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















                             7700





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _P_o_l_y_L_i_n_e

_d_r_a_w_a_b_l_e: DRAWABLE
_g_c: GCONTEXT
_c_o_o_r_d_i_n_a_t_e_-_m_o_d_e: {_O_r_i_g_i_n, _P_r_e_v_i_o_u_s}
_p_o_i_n_t_s: LISTofPOINT

||__  Errors: _D_r_a_w_a_b_l_e, _G_C_o_n_t_e_x_t, _M_a_t_c_h, _V_a_l_u_e


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 _P_o_l_y_L_i_n_e 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 _B_e_v_e_l 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

















                             7711





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _P_o_l_y_S_e_g_m_e_n_t

_d_r_a_w_a_b_l_e: DRAWABLE
_g_c: GCONTEXT
_s_e_g_m_e_n_t_s: LISTofSEGMENT

where:

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

||__  Errors: _D_r_a_w_a_b_l_e, _G_C_o_n_t_e_x_t, _M_a_t_c_h


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


__
||    _P_o_l_y_R_e_c_t_a_n_g_l_e

_d_r_a_w_a_b_l_e: DRAWABLE
_g_c: GCONTEXT
_r_e_c_t_a_n_g_l_e_s: LISTofRECTANGLE

||__  Errors: _D_r_a_w_a_b_l_e, _G_C_o_n_t_e_x_t, _M_a_t_c_h


This request draws the outlines of the specified rectangles,
as if a five-point _P_o_l_y_L_i_n_e 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.




                             7722





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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


__
||    _P_o_l_y_A_r_c

_d_r_a_w_a_b_l_e: DRAWABLE
_g_c: GCONTEXT
_a_r_c_s: LISTofARC

||__  Errors: _D_r_a_w_a_b_l_e, _G_C_o_n_t_e_x_t, _M_a_t_c_h


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



                             7733





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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 _B_u_t_t 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



                             7744





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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


__
||    _F_i_l_l_P_o_l_y

_d_r_a_w_a_b_l_e: DRAWABLE
_g_c: GCONTEXT
_s_h_a_p_e: {_C_o_m_p_l_e_x, _N_o_n_c_o_n_v_e_x, _C_o_n_v_e_x}
_c_o_o_r_d_i_n_a_t_e_-_m_o_d_e: {_O_r_i_g_i_n, _P_r_e_v_i_o_u_s}
_p_o_i_n_t_s: LISTofPOINT

||__  Errors: _D_r_a_w_a_b_l_e, _G_C_o_n_t_e_x_t, _M_a_t_c_h, _V_a_l_u_e


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.  _C_o_m_p_l_e_x means the path may self-intersect.
Contiguous coincident points in the path are not treated as
self-intersection.

_N_o_n_c_o_n_v_e_x means the path does not self-intersect, but the
shape is not wholly convex.  If known by the client, speci
fying _N_o_n_c_o_n_v_e_x over _C_o_m_p_l_e_x may improve performance.  If
_N_o_n_c_o_n_v_e_x is specified for a self-intersecting path, the
graphics results are undefined.

_C_o_n_v_e_x 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 _C_o_n_v_e_x can improve



                             7755





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


performance.  If _C_o_n_v_e_x 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


__
||    _P_o_l_y_F_i_l_l_R_e_c_t_a_n_g_l_e

_d_r_a_w_a_b_l_e: DRAWABLE
_g_c: GCONTEXT
_r_e_c_t_a_n_g_l_e_s: LISTofRECTANGLE

||__  Errors: _D_r_a_w_a_b_l_e, _G_C_o_n_t_e_x_t, _M_a_t_c_h


This request fills the specified rectangles, as if a four-
point _F_i_l_l_P_o_l_y 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


__
||    _P_o_l_y_F_i_l_l_A_r_c

_d_r_a_w_a_b_l_e: DRAWABLE
_g_c: GCONTEXT
_a_r_c_s: LISTofARC

||__  Errors: _D_r_a_w_a_b_l_e, _G_C_o_n_t_e_x_t, _M_a_t_c_h


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 _C_h_o_r_d,



                             7766





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


the single line segment joining the endpoints of the arc is
used.  For _P_i_e_S_l_i_c_e, 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
infinitely thin path describing the entire circle/ellipse
intersects the horizontal axis at [x,y+(h/2)] and
[x+w,y+(h/2)] and intersects the vertical axis at
[x+(w/2),y] and [x+(w/2),y+h].  These coordinates are not
necessarily integral; that is, they are not truncated to
discrete coordinates.

The arc angles are interpreted as specified in the _P_o_l_y_A_r_c
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 _C_h_o_r_d 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 _P_i_e_S_l_i_c_e
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


__
||    _P_u_t_I_m_a_g_e

_d_r_a_w_a_b_l_e: DRAWABLE
_g_c: GCONTEXT
_d_e_p_t_h: CARD8
_w_i_d_t_h, _h_e_i_g_h_t: CARD16
_d_s_t_-_x, _d_s_t_-_y: INT16
_l_e_f_t_-_p_a_d: CARD8
_f_o_r_m_a_t: {_B_i_t_m_a_p, _X_Y_P_i_x_m_a_p, _Z_P_i_x_m_a_p}
_d_a_t_a: LISTofBYTE

||__  Errors: _D_r_a_w_a_b_l_e, _G_C_o_n_t_e_x_t, _M_a_t_c_h, _V_a_l_u_e


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.




                             7777





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


If _B_i_t_m_a_p format is used, then depth must be one (or a _M_a_t_c_h
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 _X_Y_P_i_x_m_a_p and _Z_P_i_x_m_a_p, the depth must match the depth of
the drawable (or a _M_a_t_c_h error results).  For _X_Y_P_i_x_m_a_p, the
image must be sent in XY format.  For _Z_P_i_x_m_a_p, the image
must be sent in the Z format defined for the given depth.

The left-pad must be zero for _Z_P_i_x_m_a_p format (or a _M_a_t_c_h
error results).  For _B_i_t_m_a_p and _X_Y_P_i_x_m_a_p format, left-pad
must be less than bitmap-scanline-pad as given in the server
connection setup information (or a _M_a_t_c_h 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


__
||    _G_e_t_I_m_a_g_e

_d_r_a_w_a_b_l_e: DRAWABLE
_x, _y: INT16
_w_i_d_t_h, _h_e_i_g_h_t: CARD16
_p_l_a_n_e_-_m_a_s_k: CARD32
_f_o_r_m_a_t: {_X_Y_P_i_x_m_a_p, _Z_P_i_x_m_a_p}

   =>

depth: CARD8
visual: VISUALID or _N_o_n_e
data: LISTofBYTE

||__  Errors: _D_r_a_w_a_b_l_e, _M_a_t_c_h, _V_a_l_u_e


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 _X_Y_P_i_x_m_a_p 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 _Z_P_i_x_m_a_p 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



                             7788





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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 _N_o_n_e.

If the drawable is a pixmap, then the given rectangle must
be wholly contained within the pixmap (or a _M_a_t_c_h 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 _M_a_t_c_h
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.


__
||    _P_o_l_y_T_e_x_t_8

_d_r_a_w_a_b_l_e: DRAWABLE
_g_c: GCONTEXT
_x, _y: INT16
_i_t_e_m_s: LISTofTEXTITEM8

where:

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


||__  Errors: _D_r_a_w_a_b_l_e, _F_o_n_t, _G_C_o_n_t_e_x_t, _M_a_t_c_h


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



                             7799





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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 _F_o_n_t 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


__
||    _P_o_l_y_T_e_x_t_1_6

_d_r_a_w_a_b_l_e: DRAWABLE
_g_c: GCONTEXT
_x, _y: INT16
_i_t_e_m_s: LISTofTEXTITEM16

where:

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


||__  Errors: _D_r_a_w_a_b_l_e, _F_o_n_t, _G_C_o_n_t_e_x_t, _M_a_t_c_h


This request is similar to _P_o_l_y_T_e_x_t_8, 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).












                             8800





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _I_m_a_g_e_T_e_x_t_8

_d_r_a_w_a_b_l_e: DRAWABLE
_g_c: GCONTEXT
_x, _y: INT16
_s_t_r_i_n_g: STRING8

||__  Errors: _D_r_a_w_a_b_l_e, _G_C_o_n_t_e_x_t, _M_a_t_c_h


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 _Q_u_e_r_y_T_e_x_t_E_x_t_e_n_t_s call using gc and
string.

The function and fill-style defined in gc are ignored for
this request.  The effective function is _C_o_p_y, and the
effective fill-style _S_o_l_i_d.

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













                             8811





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _I_m_a_g_e_T_e_x_t_1_6

_d_r_a_w_a_b_l_e: DRAWABLE
_g_c: GCONTEXT
_x, _y: INT16
_s_t_r_i_n_g: STRING16

||__  Errors: _D_r_a_w_a_b_l_e, _G_C_o_n_t_e_x_t, _M_a_t_c_h


This request is similar to _I_m_a_g_e_T_e_x_t_8, 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).


__
||    _C_r_e_a_t_e_C_o_l_o_r_m_a_p

_m_i_d: COLORMAP
_v_i_s_u_a_l: VISUALID
_w_i_n_d_o_w: WINDOW
_a_l_l_o_c: {_N_o_n_e, _A_l_l}

||__  Errors: _A_l_l_o_c, _I_D_C_h_o_i_c_e, _M_a_t_c_h, _V_a_l_u_e, _W_i_n_d_o_w


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 _M_a_t_c_h error results).  The
initial values of the colormap entries are undefined for
classes _G_r_a_y_S_c_a_l_e, _P_s_e_u_d_o_C_o_l_o_r, and _D_i_r_e_c_t_C_o_l_o_r.  For
_S_t_a_t_i_c_G_r_a_y, _S_t_a_t_i_c_C_o_l_o_r, and _T_r_u_e_C_o_l_o_r, the entries will
have defined values, but those values are specific to the
visual and are not defined by the core protocol.  For
_S_t_a_t_i_c_G_r_a_y, _S_t_a_t_i_c_C_o_l_o_r, and _T_r_u_e_C_o_l_o_r, alloc must be speci
fied as _N_o_n_e (or a _M_a_t_c_h error results).  For the other
classes, if alloc is _N_o_n_e, the colormap initially has no
allocated entries, and clients can allocate entries.

If alloc is _A_l_l, then the entire colormap is allocated
writable.  The initial values of all allocated entries are
undefined.  For _G_r_a_y_S_c_a_l_e and _P_s_e_u_d_o_C_o_l_o_r, the effect is as
if an _A_l_l_o_c_C_o_l_o_r_C_e_l_l_s request returned all pixel values from
zero to N - 1, where N is the colormap-entries value in the
specified visual.  For _D_i_r_e_c_t_C_o_l_o_r, the effect is as if an
_A_l_l_o_c_C_o_l_o_r_P_l_a_n_e_s 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 _F_r_e_e_C_o_l_o_r_s.



                             8822





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _F_r_e_e_C_o_l_o_r_m_a_p

_c_m_a_p: COLORMAP

||__  Errors: _C_o_l_o_r_m_a_p


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 _U_n_i_n_s_t_a_l_l_C_o_l_o_r_m_a_p request).  If the colormap is defined
as the colormap for a window (by means of _C_r_e_a_t_e_W_i_n_d_o_w or
_C_h_a_n_g_e_W_i_n_d_o_w_A_t_t_r_i_b_u_t_e_s), the colormap for the window is
changed to _N_o_n_e, and a _C_o_l_o_r_m_a_p_N_o_t_i_f_y event is generated.
The protocol does not define the colors displayed for a win
dow with a colormap of _N_o_n_e.

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


__
||    _C_o_p_y_C_o_l_o_r_m_a_p_A_n_d_F_r_e_e

_m_i_d, _s_r_c_-_c_m_a_p: COLORMAP

||__  Errors: _A_l_l_o_c, _C_o_l_o_r_m_a_p, _I_D_C_h_o_i_c_e


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 _A_l_l
(see _C_r_e_a_t_e_C_o_l_o_r_m_a_p request), then the new colormap is also
created with alloc _A_l_l, 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
_A_l_l, then the allocations to be moved are all those pixels
and planes that have been allocated by the client using
either _A_l_l_o_c_C_o_l_o_r, _A_l_l_o_c_N_a_m_e_d_C_o_l_o_r, _A_l_l_o_c_C_o_l_o_r_C_e_l_l_s, or
_A_l_l_o_c_C_o_l_o_r_P_l_a_n_e_s and that have not been freed since they
were allocated.











                             8833





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _I_n_s_t_a_l_l_C_o_l_o_r_m_a_p

_c_m_a_p: COLORMAP

||__  Errors: _C_o_l_o_r_m_a_p


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 _C_o_l_o_r_m_a_p_N_o_t_i_f_y
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 _C_o_l_
_o_r_m_a_p_N_o_t_i_f_y 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
_I_n_s_t_a_l_l_C_o_l_o_r_m_a_p, it is added to the head of the list; the
list is truncated at the tail, if necessary, to keep the
length of the list to at most M.  When a colormap is an
explicit argument to _U_n_i_n_s_t_a_l_l_C_o_l_o_r_m_a_p 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 implic
itly by the server, and the server cannot implicitly unin
stall a colormap that is in the required list.

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


__
||    _U_n_i_n_s_t_a_l_l_C_o_l_o_r_m_a_p

_c_m_a_p: COLORMAP

||__  Errors: _C_o_l_o_r_m_a_p


If cmap is on the required list for its screen (see _I_n_s_t_a_l_l_
_C_o_l_o_r_m_a_p 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



                             8844





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


except that the required list must remain installed.

If cmap becomes uninstalled, a _C_o_l_o_r_m_a_p_N_o_t_i_f_y 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 _C_o_l_o_r_m_a_p_N_o_t_i_f_y
event is generated on every window having that colormap as
an attribute.


__
||    _L_i_s_t_I_n_s_t_a_l_l_e_d_C_o_l_o_r_m_a_p_s

_w_i_n_d_o_w: WINDOW

   =>

cmaps: LISTofCOLORMAP

||__  Errors: _W_i_n_d_o_w


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 _I_n_s_t_a_l_l_C_o_l_o_r_m_a_p request).


__
||    _A_l_l_o_c_C_o_l_o_r

_c_m_a_p: COLORMAP
_r_e_d, _g_r_e_e_n, _b_l_u_e: CARD16

   =>

pixel: CARD32
red, green, blue: CARD16

||__  Errors: _A_l_l_o_c, _C_o_l_o_r_m_a_p


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.









                             8855





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _A_l_l_o_c_N_a_m_e_d_C_o_l_o_r

_c_m_a_p: COLORMAP
_n_a_m_e: STRING8

   =>

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

||__  Errors: _A_l_l_o_c, _C_o_l_o_r_m_a_p, _N_a_m_e


This request looks up the named color with respect to the
screen associated with the colormap.  Then, it does an
_A_l_l_o_c_C_o_l_o_r 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.


__
||    _A_l_l_o_c_C_o_l_o_r_C_e_l_l_s

_c_m_a_p: COLORMAP
_c_o_l_o_r_s, _p_l_a_n_e_s: CARD16
_c_o_n_t_i_g_u_o_u_s: BOOL

   =>

pixels, masks: LISTofCARD32

||__  Errors: _A_l_l_o_c, _C_o_l_o_r_m_a_p, _V_a_l_u_e


The number of colors must be positive, and the number of
planes must be nonnegative (or a _V_a_l_u_e error results).  If C
colors and P planes are requested, then C pixels and P masks
are returned.  No mask will have any bits in common with any
other mask or with any of the pixels.  By ORing together
masks and pixels, C*2_P distinct pixels can be produced; all
of these are allocated writable by the request.  For
_G_r_a_y_S_c_a_l_e or _P_s_e_u_d_o_C_o_l_o_r, each mask will have exactly one
bit set to 1; for _D_i_r_e_c_t_C_o_l_o_r, each will have exactly three
bits set to 1.  If contiguous is _T_r_u_e and if all masks are
ORed together, a single contiguous set of bits will be
formed for _G_r_a_y_S_c_a_l_e or _P_s_e_u_d_o_C_o_l_o_r, and three contiguous
sets of bits (one within each pixel subfield) for
_D_i_r_e_c_t_C_o_l_o_r.  The RGB values of the allocated entries are
undefined.





                             8866





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _A_l_l_o_c_C_o_l_o_r_P_l_a_n_e_s

_c_m_a_p: COLORMAP
_c_o_l_o_r_s, _r_e_d_s, _g_r_e_e_n_s, _b_l_u_e_s: CARD16
_c_o_n_t_i_g_u_o_u_s: BOOL

   =>

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

||__  Errors: _A_l_l_o_c, _C_o_l_o_r_m_a_p, _V_a_l_u_e


The number of colors must be positive, and the reds, greens,
and blues must be nonnegative (or a _V_a_l_u_e 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 _T_r_u_e, 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 _D_i_r_e_c_t_C_o_l_o_r, each mask will lie within the cor
responding pixel subfield.  By ORing together subsets of
masks with pixels, C*2_R+_G+_B distinct pixels can be produced;
all of these are allocated writable by the request.  The
initial RGB values of the allocated entries are undefined.
In the colormap, there are only C*2_R independent red
entries, C*2_G independent green entries, and C*2_B indepen
dent blue entries.  This is true even for _P_s_e_u_d_o_C_o_l_o_r.  When
the colormap entry for a pixel value is changed using _S_t_o_r_e_
_C_o_l_o_r_s or _S_t_o_r_e_N_a_m_e_d_C_o_l_o_r, the pixel is decomposed according
to the masks and the corresponding independent entries are
updated.


__
||    _F_r_e_e_C_o_l_o_r_s

_c_m_a_p: COLORMAP
_p_i_x_e_l_s: LISTofCARD32
_p_l_a_n_e_-_m_a_s_k: CARD32

||__  Errors: _A_c_c_e_s_s, _C_o_l_o_r_m_a_p, _V_a_l_u_e


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 _A_l_l_o_c_C_o_l_o_r, _A_l_l_o_c_N_a_m_e_d_C_o_l_o_r, _A_l_l_o_c_C_o_l_o_r_C_e_l_l_s, and
_A_l_l_o_c_C_o_l_o_r_P_l_a_n_e_s).  Note that freeing an individual pixel
obtained from _A_l_l_o_c_C_o_l_o_r_P_l_a_n_e_s 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



                             8877





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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 _V_a_l_u_e error is generated if a specified pixel is not a
valid index into cmap.  An _A_c_c_e_s_s 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 _A_l_l in _C_r_e_a_t_e_C_o_l_o_r_m_a_p).  If more than one
pixel is in error, it is arbitrary as to which pixel is
reported.


__
||    _S_t_o_r_e_C_o_l_o_r_s

_c_m_a_p: COLORMAP
_i_t_e_m_s: LISTofCOLORITEM

where:

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


||__  Errors: _A_c_c_e_s_s, _C_o_l_o_r_m_a_p, _V_a_l_u_e


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 _V_a_l_u_e error is generated if a specified pixel
is not a valid index into cmap, and an _A_c_c_e_s_s 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.












                             8888





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _S_t_o_r_e_N_a_m_e_d_C_o_l_o_r

_c_m_a_p: COLORMAP
_p_i_x_e_l: CARD32
_n_a_m_e: STRING8
_d_o_-_r_e_d, _d_o_-_g_r_e_e_n, _d_o_-_b_l_u_e: BOOL

||__  Errors: _A_c_c_e_s_s, _C_o_l_o_r_m_a_p, _N_a_m_e, _V_a_l_u_e


This request looks up the named color with respect to the
screen associated with cmap and then does a _S_t_o_r_e_C_o_l_o_r_s in
cmap.  The name should use the ISO Latin-1 encoding, and
uppercase and lowercase do not matter.  The _A_c_c_e_s_s and _V_a_l_u_e
errors are the same as in _S_t_o_r_e_C_o_l_o_r_s.


__
||    _Q_u_e_r_y_C_o_l_o_r_s

_c_m_a_p: COLORMAP
_p_i_x_e_l_s: LISTofCARD32

   =>

colors: LISTofRGB

where:


RGB: [red, green, blue: CARD16]

||__  Errors: _C_o_l_o_r_m_a_p, _V_a_l_u_e


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 _V_a_l_u_e
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.
















                             8899





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _L_o_o_k_u_p_C_o_l_o_r

_c_m_a_p: COLORMAP
_n_a_m_e: STRING8

   =>

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

||__  Errors: _C_o_l_o_r_m_a_p, _N_a_m_e


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.


__
||    _C_r_e_a_t_e_C_u_r_s_o_r

_c_i_d: CURSOR
_s_o_u_r_c_e: PIXMAP
_m_a_s_k: PIXMAP or _N_o_n_e
_f_o_r_e_-_r_e_d, _f_o_r_e_-_g_r_e_e_n, _f_o_r_e_-_b_l_u_e: CARD16
_b_a_c_k_-_r_e_d, _b_a_c_k_-_g_r_e_e_n, _b_a_c_k_-_b_l_u_e: CARD16
_x, _y: CARD16

||__  Errors: _A_l_l_o_c, _I_D_C_h_o_i_c_e, _M_a_t_c_h, _P_i_x_m_a_p


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 _S_t_a_t_i_c_G_r_a_y or
_G_r_a_y_S_c_a_l_e 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 _M_a_t_c_h 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 _M_a_t_c_h 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 _M_a_t_c_h error results).

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




                             9900





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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.


__
||    _C_r_e_a_t_e_G_l_y_p_h_C_u_r_s_o_r

_c_i_d: CURSOR
_s_o_u_r_c_e_-_f_o_n_t: FONT
_m_a_s_k_-_f_o_n_t: FONT or _N_o_n_e
_s_o_u_r_c_e_-_c_h_a_r, _m_a_s_k_-_c_h_a_r: CARD16
_f_o_r_e_-_r_e_d, _f_o_r_e_-_g_r_e_e_n, _f_o_r_e_-_b_l_u_e: CARD16
_b_a_c_k_-_r_e_d, _b_a_c_k_-_g_r_e_e_n, _b_a_c_k_-_b_l_u_e: CARD16

||__  Errors: _A_l_l_o_c, _F_o_n_t, _I_D_C_h_o_i_c_e, _V_a_l_u_e


This request is similar to _C_r_e_a_t_e_C_u_r_s_o_r, 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 _V_a_l_u_e 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.


__
||    _F_r_e_e_C_u_r_s_o_r

_c_u_r_s_o_r: CURSOR

||__  Errors: _C_u_r_s_o_r


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



                             9911





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


other resource references it.


__
||    _R_e_c_o_l_o_r_C_u_r_s_o_r

_c_u_r_s_o_r: CURSOR
_f_o_r_e_-_r_e_d, _f_o_r_e_-_g_r_e_e_n, _f_o_r_e_-_b_l_u_e: CARD16
_b_a_c_k_-_r_e_d, _b_a_c_k_-_g_r_e_e_n, _b_a_c_k_-_b_l_u_e: CARD16

||__  Errors: _C_u_r_s_o_r


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


__
||    _Q_u_e_r_y_B_e_s_t_S_i_z_e

_c_l_a_s_s: {_C_u_r_s_o_r, _T_i_l_e, _S_t_i_p_p_l_e}
_d_r_a_w_a_b_l_e: DRAWABLE
_w_i_d_t_h, _h_e_i_g_h_t: CARD16

   =>

width, height: CARD16

||__  Errors: _D_r_a_w_a_b_l_e, _M_a_t_c_h, _V_a_l_u_e


This request returns the best size that is closest to the
argument size.  For _C_u_r_s_o_r, this is the largest size that
can be fully displayed.  For _T_i_l_e, this is the size that can
be tiled fastest.  For _S_t_i_p_p_l_e, this is the size that can be
stippled fastest.

For _C_u_r_s_o_r, the drawable indicates the desired screen.  For
_T_i_l_e and _S_t_i_p_p_l_e, the drawable indicates the screen and also
possibly the window class and depth.  An _I_n_p_u_t_O_n_l_y window
cannot be used as the drawable for _T_i_l_e or _S_t_i_p_p_l_e (or a
_M_a_t_c_h error results).














                             9922





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _Q_u_e_r_y_E_x_t_e_n_s_i_o_n

_n_a_m_e: 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.


__
||    _L_i_s_t_E_x_t_e_n_s_i_o_n_s

   =>

||__  names: LISTofSTRING8


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

__
||    _S_e_t_M_o_d_i_f_i_e_r_M_a_p_p_i_n_g

_k_e_y_c_o_d_e_s_-_p_e_r_-_m_o_d_i_f_i_e_r: CARD8
_k_e_y_c_o_d_e_s: LISTofKEYCODE

   =>

status: {_S_u_c_c_e_s_s, _B_u_s_y, _F_a_i_l_e_d}

||__  Errors: _A_l_l_o_c, _V_a_l_u_e


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



                             9933





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


must be 8*keycodes-per-modifier (or a _L_e_n_g_t_h 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 _S_h_i_f_t, _L_o_c_k, _C_o_n_t_r_o_l, _M_o_d_1, _M_o_d_2,
_M_o_d_3, _M_o_d_4, and _M_o_d_5, 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 _V_a_l_u_e
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 _F_a_i_l_e_d 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 _B_u_s_y, and none of the modifiers is changed.

This request generates a _M_a_p_p_i_n_g_N_o_t_i_f_y event on a _S_u_c_c_e_s_s
status.


__
||    _G_e_t_M_o_d_i_f_i_e_r_M_a_p_p_i_n_g

   =>

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 _S_h_i_f_t, _L_o_c_k,
_C_o_n_t_r_o_l, _M_o_d_1, _M_o_d_2, _M_o_d_3, _M_o_d_4, and _M_o_d_5, 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.




                             9944





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _C_h_a_n_g_e_K_e_y_b_o_a_r_d_M_a_p_p_i_n_g

_f_i_r_s_t_-_k_e_y_c_o_d_e: KEYCODE
_k_e_y_s_y_m_s_-_p_e_r_-_k_e_y_c_o_d_e: CARD8
_k_e_y_s_y_m_s: LISTofKEYSYM

||__  Errors: _A_l_l_o_c, _V_a_l_u_e


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 _L_e_n_g_t_h error results).  The first-
keycode must be greater than or equal to min-keycode as
returned in the connection setup (or a _V_a_l_u_e 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 _V_a_l_u_e 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 _N_o_S_y_m_b_o_l should be used
to fill in unused elements for individual keycodes.  It is
legal for _N_o_S_y_m_b_o_l to appear in nontrailing positions of the
effective list for a keycode.

This request generates a _M_a_p_p_i_n_g_N_o_t_i_f_y 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).
















                             9955





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _G_e_t_K_e_y_b_o_a_r_d_M_a_p_p_i_n_g

_f_i_r_s_t_-_k_e_y_c_o_d_e: KEYCODE
_c_o_u_n_t: CARD8

   =>

keysyms-per-keycode: CARD8
keysyms: LISTofKEYSYM

||__  Errors: _V_a_l_u_e


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 _V_a_l_u_e error results),
and:

     first-keycode + count - 1


must be less than or equal to max-keycode as returned in the
connection setup (or a _V_a_l_u_e 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 _N_o_S_y_m_b_o_l is
used to fill in unused elements for individual keycodes.


__
||    _C_h_a_n_g_e_K_e_y_b_o_a_r_d_C_o_n_t_r_o_l

_v_a_l_u_e_-_m_a_s_k: BITMASK
_v_a_l_u_e_-_l_i_s_t: LISTofVALUE

||__  Errors: _M_a_t_c_h, _V_a_l_u_e


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:




                             9966





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


---------------------------------------
CCoonnttrrooll             TTyyppee
---------------------------------------
key-click-percent   INT8
bell-percent        INT8
bell-pitch          INT16
bell-duration       INT16
led                 CARD8
led-mode            {_O_n, _O_f_f}
key                 KEYCODE
auto-repeat-mode    {_O_n, _O_f_f, _D_e_f_a_u_l_t}
---------------------------------------


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
_V_a_l_u_e 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
_V_a_l_u_e 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 _V_a_l_u_e 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 _V_a_l_u_e 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 _M_a_t_c_h 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 _M_a_t_c_h 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 _O_n, keys should obey their individual
auto-repeat modes.  When the global mode is _O_f_f, no keys
should auto-repeat.  An auto-repeating key generates alter
nating _K_e_y_P_r_e_s_s and _K_e_y_R_e_l_e_a_s_e events.  When a key is used
as a modifier, it is desirable for the key not to auto-



                             9977





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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.


__
||    _G_e_t_K_e_y_b_o_a_r_d_C_o_n_t_r_o_l

   =>

key-click-percent: CARD8
bell-percent: CARD8
bell-pitch: CARD16
bell-duration: CARD16
led-mask: CARD32
global-auto-repeat: {_O_n, _O_f_f}
||__  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.


__
||    _B_e_l_l

_p_e_r_c_e_n_t: INT8

||__  Errors: _V_a_l_u_e


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 _V_a_l_u_e
error results).  The volume at which the bell is rung when
percent is nonnegative is:

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






                             9988





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


When percent is negative, it is:

     base + [(base * percent) / 100]



__
||    _S_e_t_P_o_i_n_t_e_r_M_a_p_p_i_n_g

_m_a_p: LISTofCARD8

   =>

status: {_S_u_c_c_e_s_s, _B_u_s_y}

||__  Errors: _V_a_l_u_e


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 _G_e_t_P_o_i_n_t_e_r_M_a_p_p_i_n_g would return (or
a _V_a_l_u_e 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 _V_a_l_u_e
error results).

If any of the buttons to be altered are logically in the
down state, the status reply is _B_u_s_y, and the mapping is not
changed.

This request generates a _M_a_p_p_i_n_g_N_o_t_i_f_y event on a _S_u_c_c_e_s_s
status.


__
||    _G_e_t_P_o_i_n_t_e_r_M_a_p_p_i_n_g

   =>

||__  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.






                             9999





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _C_h_a_n_g_e_P_o_i_n_t_e_r_C_o_n_t_r_o_l

_d_o_-_a_c_c_e_l_e_r_a_t_i_o_n, _d_o_-_t_h_r_e_s_h_o_l_d: BOOL
_a_c_c_e_l_e_r_a_t_i_o_n_-_n_u_m_e_r_a_t_o_r, _a_c_c_e_l_e_r_a_t_i_o_n_-_d_e_n_o_m_i_n_a_t_o_r: INT16
_t_h_r_e_s_h_o_l_d: INT16

||__  Errors: _V_a_l_u_e


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 _V_a_l_u_e error, as does a zero value for
acceleration-denominator.


__
||    _G_e_t_P_o_i_n_t_e_r_C_o_n_t_r_o_l

   =>

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


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


__
||    _S_e_t_S_c_r_e_e_n_S_a_v_e_r

_t_i_m_e_o_u_t, _i_n_t_e_r_v_a_l: INT16
_p_r_e_f_e_r_-_b_l_a_n_k_i_n_g: {_Y_e_s, _N_o, _D_e_f_a_u_l_t}
_a_l_l_o_w_-_e_x_p_o_s_u_r_e_s: {_Y_e_s, _N_o, _D_e_f_a_u_l_t}

||__  Errors: _V_a_l_u_e


The timeout and interval are specified in seconds; setting a
value to -1 restores the default.  Other negative values
generate a _V_a_l_u_e 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



                             110000





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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 _F_o_r_c_e_S_c_r_e_e_n_S_a_v_e_r with mode
_R_e_s_e_t, 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.


__
||    _G_e_t_S_c_r_e_e_n_S_a_v_e_r

   =>

timeout, interval: CARD16
prefer-blanking: {_Y_e_s, _N_o}
||__  allow-exposures: {_Y_e_s, _N_o}


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


__
||    _F_o_r_c_e_S_c_r_e_e_n_S_a_v_e_r

_m_o_d_e: {_A_c_t_i_v_a_t_e, _R_e_s_e_t}

||__  Errors: _V_a_l_u_e


If the mode is _A_c_t_i_v_a_t_e 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 _R_e_s_e_t 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.









                             110011





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _C_h_a_n_g_e_H_o_s_t_s

_m_o_d_e: {_I_n_s_e_r_t, _D_e_l_e_t_e}
_h_o_s_t: HOST

||__  Errors: _A_c_c_e_s_s, _V_a_l_u_e


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 have 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 _A_c_c_e_s_s 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 _V_a_l_u_e 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.



                             110022





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _L_i_s_t_H_o_s_t_s

   =>

mode: {_E_n_a_b_l_e_d, _D_i_s_a_b_l_e_d}
||__  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.


__
||    _S_e_t_A_c_c_e_s_s_C_o_n_t_r_o_l

_m_o_d_e: {_E_n_a_b_l_e, _D_i_s_a_b_l_e}

||__  Errors: _A_c_c_e_s_s, _V_a_l_u_e


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 _A_c_c_e_s_s error results).


__
||    _S_e_t_C_l_o_s_e_D_o_w_n_M_o_d_e

_m_o_d_e: {_D_e_s_t_r_o_y, _R_e_t_a_i_n_P_e_r_m_a_n_e_n_t, _R_e_t_a_i_n_T_e_m_p_o_r_a_r_y}

||__  Errors: _V_a_l_u_e


This request defines what will happen to the client's
resources at connection close.  A connection starts in
_D_e_s_t_r_o_y mode.  The meaning of the close-down mode is
described in section 10.


__
||    _K_i_l_l_C_l_i_e_n_t

_r_e_s_o_u_r_c_e: CARD32 or _A_l_l_T_e_m_p_o_r_a_r_y

||__  Errors: _V_a_l_u_e






                             110033





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


If a valid resource is specified, _K_i_l_l_C_l_i_e_n_t forces a close-
down of the client that created the resource.  If the client
has already terminated in either _R_e_t_a_i_n_P_e_r_m_a_n_e_n_t or _R_e_t_a_i_n_
_T_e_m_p_o_r_a_r_y mode, all of the client's resources are destroyed
(see section 10).  If _A_l_l_T_e_m_p_o_r_a_r_y is specified, then the
resources of all clients that have terminated in _R_e_t_a_i_n_T_e_m_
_p_o_r_a_r_y are destroyed.


__
||||__  _N_o_O_p_e_r_a_t_i_o_n


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.

1100..  CCoonnnneeccttiioonn CClloossee

At connection close, all event selections made by the client
are discarded.  If the client has the pointer actively
grabbed, an _U_n_g_r_a_b_P_o_i_n_t_e_r is performed.  If the client has
the keyboard actively grabbed, an _U_n_g_r_a_b_K_e_y_b_o_a_r_d is per
formed.  All passive grabs by the client are released.  If
the client has the server grabbed, an _U_n_g_r_a_b_S_e_r_v_e_r is per
formed.  All selections (see _S_e_t_S_e_l_e_c_t_i_o_n_O_w_n_e_r request)
owned by the client are disowned.  If close-down mode (see
_S_e_t_C_l_o_s_e_D_o_w_n_M_o_d_e request) is _R_e_t_a_i_n_P_e_r_m_a_n_e_n_t or
_R_e_t_a_i_n_T_e_m_p_o_r_a_r_y, then all resources (including colormap
entries) allocated by the client are marked as permanent or
temporary, respectively (but this does not prevent other
clients from explicitly destroying them).  If the mode is
_D_e_s_t_r_o_y, 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 _M_a_p_W_i_n_d_o_w 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 _F_r_e_e request is performed.  All col
ors and colormap entries allocated by the client are freed.




                             110044





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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 _D_e_s_t_r_o_y 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
_R_e_t_a_i_n_P_e_r_m_a_n_e_n_t or _R_e_t_a_i_n_T_e_m_p_o_r_a_r_y 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 _P_o_i_n_t_e_r_R_o_o_t.

Note that closing a connection with a close-down mode of
_R_e_t_a_i_n_P_e_r_m_a_n_e_n_t or _R_e_t_a_i_n_T_e_m_p_o_r_a_r_y will not cause the server
to reset.

1111..  EEvveennttss

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 _G_r_a_b_B_u_t_t_o_n with argu
ments:

-----------------------------------------------------------
AArrgguummeenntt                 VVaalluuee
-----------------------------------------------------------
event-window             Event window
event-mask               Client's selected pointer events
                         on the event window
pointer-mode and key    _A_s_y_n_c_h_r_o_n_o_u_s
board-mode
owner-events             _T_r_u_e if the client has _O_w_n_e_r_
                         _G_r_a_b_B_u_t_t_o_n selected on the event
                         window, otherwise _F_a_l_s_e
confine-to               _N_o_n_e
cursor                   _N_o_n_e
-----------------------------------------------------------


The grab is terminated automatically when the logical state
of the pointer has all buttons released.  _U_n_g_r_a_b_P_o_i_n_t_e_r and
_C_h_a_n_g_e_A_c_t_i_v_e_P_o_i_n_t_e_r_G_r_a_b can both be used to modify the
active grab.







                             110055





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _K_e_y_P_r_e_s_s
_K_e_y_R_e_l_e_a_s_e
_B_u_t_t_o_n_P_r_e_s_s
_B_u_t_t_o_n_R_e_l_e_a_s_e
_M_o_t_i_o_n_N_o_t_i_f_y

_r_o_o_t, _e_v_e_n_t: WINDOW
_c_h_i_l_d: WINDOW or _N_o_n_e
_s_a_m_e_-_s_c_r_e_e_n: BOOL
_r_o_o_t_-_x, _r_o_o_t_-_y, _e_v_e_n_t_-_x, _e_v_e_n_t_-_y: INT16
_d_e_t_a_i_l: <see below>
_s_t_a_t_e: SETofKEYBUTMASK
||__  _t_i_m_e: 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
_K_e_y_P_r_e_s_s and _K_e_y_R_e_l_e_a_s_e 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 _N_o_n_e.  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:

--------------------------------------
EEvveenntt                  CCoommppoonneenntt
--------------------------------------
_K_e_y_P_r_e_s_s, _K_e_y_R_e_l_e_a_s_e   KEYCODE
_B_u_t_t_o_n_P_r_e_s_s, _B_u_t_t_o_n_   BUTTON
_R_e_l_e_a_s_e





                             110066





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


--------------------------------------
EEvveenntt                  CCoommppoonneenntt
--------------------------------------
_M_o_t_i_o_n_N_o_t_i_f_y           {_N_o_r_m_a_l, _H_i_n_t}
--------------------------------------


_M_o_t_i_o_n_N_o_t_i_f_y 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 _P_o_i_n_t_e_r_M_o_t_i_o_n
receives events independent of the state of the pointer but
tons.  By selecting some subset of _B_u_t_t_o_n_[_1_-_5_]_M_o_t_i_o_n
instead, _M_o_t_i_o_n_N_o_t_i_f_y events will only be received when one
or more of the specified buttons are pressed.  By selecting
_B_u_t_t_o_n_M_o_t_i_o_n, _M_o_t_i_o_n_N_o_t_i_f_y events will be received only when
at least one button is pressed.  The events are always of
type _M_o_t_i_o_n_N_o_t_i_f_y, independent of the selection.  If _P_o_i_n_t_
_e_r_M_o_t_i_o_n_H_i_n_t is selected, the server is free to send only
one _M_o_t_i_o_n_N_o_t_i_f_y event (with detail _H_i_n_t) 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 _Q_u_e_r_y_P_o_i_n_t_e_r or _G_e_t_M_o_t_i_o_n_E_v_e_n_t_s request.


__
||    _E_n_t_e_r_N_o_t_i_f_y
_L_e_a_v_e_N_o_t_i_f_y

_r_o_o_t, _e_v_e_n_t: WINDOW
_c_h_i_l_d: WINDOW or _N_o_n_e
_s_a_m_e_-_s_c_r_e_e_n: BOOL
_r_o_o_t_-_x, _r_o_o_t_-_y, _e_v_e_n_t_-_x, _e_v_e_n_t_-_y: INT16
_m_o_d_e: {_N_o_r_m_a_l, _G_r_a_b, _U_n_g_r_a_b}
_d_e_t_a_i_l: {_A_n_c_e_s_t_o_r, _V_i_r_t_u_a_l, _I_n_f_e_r_i_o_r, _N_o_n_l_i_n_e_a_r,
_N_o_n_l_i_n_e_a_r_V_i_r_t_u_a_l}
_f_o_c_u_s: BOOL
_s_t_a_t_e: SETofKEYBUTMASK
||__  _t_i_m_e: TIMESTAMP


If pointer motion or window hierarchy change causes the
pointer to be in a different window than before, _E_n_t_e_r_N_o_t_i_f_y
and _L_e_a_v_e_N_o_t_i_f_y events are generated instead of a _M_o_t_i_o_n_N_o_
_t_i_f_y event.  Only clients selecting _E_n_t_e_r_W_i_n_d_o_w on a window
receive _E_n_t_e_r_N_o_t_i_f_y events, and only clients selecting
_L_e_a_v_e_W_i_n_d_o_w receive _L_e_a_v_e_N_o_t_i_f_y 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



                             110077





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


the pointer coordinates relative to the event window's ori
gin.  Otherwise, event-x and event-y are zero.  In a
_L_e_a_v_e_N_o_t_i_f_y 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 _N_o_n_e.  For an
_E_n_t_e_r_N_o_t_i_f_y 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 _N_o_n_e.  If the event window
is the focus window or an inferior of the focus window, then
focus is _T_r_u_e.  Otherwise, focus is _F_a_l_s_e.

Normal pointer motion events have mode _N_o_r_m_a_l.  Pseudo-
motion events when a grab activates have mode _G_r_a_b, and
pseudo-motion events when a grab deactivates have mode
_U_n_g_r_a_b.

All _E_n_t_e_r_N_o_t_i_f_y and _L_e_a_v_e_N_o_t_i_f_y events caused by a hierarchy
change are generated after any hierarchy event caused by
that change (that is, _U_n_m_a_p_N_o_t_i_f_y, _M_a_p_N_o_t_i_f_y,
_C_o_n_f_i_g_u_r_e_N_o_t_i_f_y, _G_r_a_v_i_t_y_N_o_t_i_f_y, _C_i_r_c_u_l_a_t_e_N_o_t_i_f_y), but the
ordering of _E_n_t_e_r_N_o_t_i_f_y and _L_e_a_v_e_N_o_t_i_f_y events with respect
to _F_o_c_u_s_O_u_t, _V_i_s_i_b_i_l_i_t_y_N_o_t_i_f_y, and _E_x_p_o_s_e events is not con
strained.

Normal events are generated as follows:

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

    _L_e_a_v_e_N_o_t_i_f_y with detail _A_n_c_e_s_t_o_r is generated on A.

    _L_e_a_v_e_N_o_t_i_f_y with detail _V_i_r_t_u_a_l is generated on each
     window between A and B exclusive (in that order).

    _E_n_t_e_r_N_o_t_i_f_y with detail _I_n_f_e_r_i_o_r is generated on B.

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

    _L_e_a_v_e_N_o_t_i_f_y with detail _I_n_f_e_r_i_o_r is generated on A.

    _E_n_t_e_r_N_o_t_i_f_y with detail _V_i_r_t_u_a_l is generated on each
     window between A and B exclusive (in that order).

    _E_n_t_e_r_N_o_t_i_f_y with detail _A_n_c_e_s_t_o_r is generated on B.

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

    _L_e_a_v_e_N_o_t_i_f_y with detail _N_o_n_l_i_n_e_a_r is generated on A.

    _L_e_a_v_e_N_o_t_i_f_y with detail _N_o_n_l_i_n_e_a_r_V_i_r_t_u_a_l is generated
     on each window between A and C exclusive (in that
     order).



                             110088





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


    _E_n_t_e_r_N_o_t_i_f_y with detail _N_o_n_l_i_n_e_a_r_V_i_r_t_u_a_l is generated
     on each window between C and B exclusive (in that
     order).

    _E_n_t_e_r_N_o_t_i_f_y with detail _N_o_n_l_i_n_e_a_r is generated on B.

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

    _L_e_a_v_e_N_o_t_i_f_y with detail _N_o_n_l_i_n_e_a_r is generated on A.

    If A is not a root window, _L_e_a_v_e_N_o_t_i_f_y with detail _N_o_n_
     _l_i_n_e_a_r_V_i_r_t_u_a_l is generated on each window above A up to
     and including its root (in order).

    If B is not a root window, _E_n_t_e_r_N_o_t_i_f_y with detail _N_o_n_
     _l_i_n_e_a_r_V_i_r_t_u_a_l is generated on each window from B's root
     down to but not including B (in order).

    _E_n_t_e_r_N_o_t_i_f_y with detail _N_o_n_l_i_n_e_a_r is generated on B.

When a pointer grab activates (but after any initial warp
into a confine-to window and before generating any actual
_B_u_t_t_o_n_P_r_e_s_s event that activates the grab), G is the grab-
window for the grab, and P is the window the pointer is in:

    _E_n_t_e_r_N_o_t_i_f_y and _L_e_a_v_e_N_o_t_i_f_y events with mode _G_r_a_b are
     generated (as for _N_o_r_m_a_l 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 _B_u_t_t_o_n_R_e_l_e_a_s_e event that deactivates the grab), G is
the grab-window for the grab, and P is the window the
pointer is in:

    _E_n_t_e_r_N_o_t_i_f_y and _L_e_a_v_e_N_o_t_i_f_y events with mode _U_n_g_r_a_b are
     generated (as for _N_o_r_m_a_l 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.













                             110099





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _F_o_c_u_s_I_n
_F_o_c_u_s_O_u_t

_e_v_e_n_t: WINDOW
_m_o_d_e: {_N_o_r_m_a_l, _W_h_i_l_e_G_r_a_b_b_e_d, _G_r_a_b, _U_n_g_r_a_b}
_d_e_t_a_i_l: {_A_n_c_e_s_t_o_r, _V_i_r_t_u_a_l, _I_n_f_e_r_i_o_r, _N_o_n_l_i_n_e_a_r,
_N_o_n_l_i_n_e_a_r_V_i_r_t_u_a_l, _P_o_i_n_t_e_r,
||__              _P_o_i_n_t_e_r_R_o_o_t, _N_o_n_e}


These events are generated when the input focus changes and
are reported to clients selecting _F_o_c_u_s_C_h_a_n_g_e on the window.
Events generated by _S_e_t_I_n_p_u_t_F_o_c_u_s when the keyboard is not
grabbed have mode _N_o_r_m_a_l.  Events generated by _S_e_t_I_n_p_u_t_F_o_c_u_s
when the keyboard is grabbed have mode _W_h_i_l_e_G_r_a_b_b_e_d.  Events
generated when a keyboard grab activates have mode _G_r_a_b, and
events generated when a keyboard grab deactivates have mode
_U_n_g_r_a_b.

All _F_o_c_u_s_O_u_t events caused by a window unmap are generated
after any _U_n_m_a_p_N_o_t_i_f_y event, but the ordering of _F_o_c_u_s_O_u_t
with respect to generated _E_n_t_e_r_N_o_t_i_f_y, _L_e_a_v_e_N_o_t_i_f_y,
_V_i_s_i_b_i_l_i_t_y_N_o_t_i_f_y, and _E_x_p_o_s_e events is not constrained.

_N_o_r_m_a_l and _W_h_i_l_e_G_r_a_b_b_e_d 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:

    _F_o_c_u_s_O_u_t with detail _A_n_c_e_s_t_o_r is generated on A.

    _F_o_c_u_s_O_u_t with detail _V_i_r_t_u_a_l is generated on each win
     dow between A and B exclusive (in order).

    _F_o_c_u_s_I_n with detail _I_n_f_e_r_i_o_r is generated on B.

    If P is an inferior of B but P is not A or an inferior
     of A or an ancestor of A, _F_o_c_u_s_I_n with detail _P_o_i_n_t_e_r
     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:

    If P is an inferior of A but P is not an inferior of B
     or an ancestor of B, _F_o_c_u_s_O_u_t with detail _P_o_i_n_t_e_r is
     generated on each window from P up to but not including
     A (in order).

    _F_o_c_u_s_O_u_t with detail _I_n_f_e_r_i_o_r is generated on A.

    _F_o_c_u_s_I_n with detail _V_i_r_t_u_a_l is generated on each window
     between A and B exclusive (in order).




                             111100





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


    _F_o_c_u_s_I_n with detail _A_n_c_e_s_t_o_r 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:

    If P is an inferior of A, _F_o_c_u_s_O_u_t with detail _P_o_i_n_t_e_r
     is generated on each window from P up to but not
     including A (in order).

    _F_o_c_u_s_O_u_t with detail _N_o_n_l_i_n_e_a_r is generated on A.

    _F_o_c_u_s_O_u_t with detail _N_o_n_l_i_n_e_a_r_V_i_r_t_u_a_l is generated on
     each window between A and C exclusive (in order).

    _F_o_c_u_s_I_n with detail _N_o_n_l_i_n_e_a_r_V_i_r_t_u_a_l is generated on
     each window between C and B exclusive (in order).

    _F_o_c_u_s_I_n with detail _N_o_n_l_i_n_e_a_r is generated on B.

    If P is an inferior of B, _F_o_c_u_s_I_n with detail _P_o_i_n_t_e_r
     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:

    If P is an inferior of A, _F_o_c_u_s_O_u_t with detail _P_o_i_n_t_e_r
     is generated on each window from P up to but not
     including A (in order).

    _F_o_c_u_s_O_u_t with detail _N_o_n_l_i_n_e_a_r is generated on A.

    If A is not a root window, _F_o_c_u_s_O_u_t with detail _N_o_n_l_i_n_
     _e_a_r_V_i_r_t_u_a_l is generated on each window above A up to
     and including its root (in order).

    If B is not a root window, _F_o_c_u_s_I_n with detail _N_o_n_l_i_n_
     _e_a_r_V_i_r_t_u_a_l is generated on each window from B's root
     down to but not including B (in order).

    _F_o_c_u_s_I_n with detail _N_o_n_l_i_n_e_a_r is generated on B.

    If P is an inferior of B, _F_o_c_u_s_I_n with detail _P_o_i_n_t_e_r
     is generated on each window below B down to and includ
     ing P (in order).

When the focus moves from window A to _P_o_i_n_t_e_r_R_o_o_t (or _N_o_n_e)
and the pointer is in window P:

    If P is an inferior of A, _F_o_c_u_s_O_u_t with detail _P_o_i_n_t_e_r
     is generated on each window from P up to but not
     including A (in order).





                             111111





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


    _F_o_c_u_s_O_u_t with detail _N_o_n_l_i_n_e_a_r is generated on A.

    If A is not a root window, _F_o_c_u_s_O_u_t with detail _N_o_n_l_i_n_
     _e_a_r_V_i_r_t_u_a_l is generated on each window above A up to
     and including its root (in order).

    _F_o_c_u_s_I_n with detail _P_o_i_n_t_e_r_R_o_o_t (or _N_o_n_e) is generated
     on all root windows.

    If the new focus is _P_o_i_n_t_e_r_R_o_o_t, _F_o_c_u_s_I_n with detail
     _P_o_i_n_t_e_r is generated on each window from P's root down
     to and including P (in order).

When the focus moves from _P_o_i_n_t_e_r_R_o_o_t (or _N_o_n_e) to window A
and the pointer is in window P:

    If the old focus is _P_o_i_n_t_e_r_R_o_o_t, _F_o_c_u_s_O_u_t with detail
     _P_o_i_n_t_e_r is generated on each window from P up to and
     including P's root (in order).

    _F_o_c_u_s_O_u_t with detail _P_o_i_n_t_e_r_R_o_o_t (or _N_o_n_e) is generated
     on all root windows.

    If A is not a root window, _F_o_c_u_s_I_n with detail _N_o_n_l_i_n_
     _e_a_r_V_i_r_t_u_a_l is generated on each window from A's root
     down to but not including A (in order).

    _F_o_c_u_s_I_n with detail _N_o_n_l_i_n_e_a_r is generated on A.

    If P is an inferior of A, _F_o_c_u_s_I_n with detail _P_o_i_n_t_e_r
     is generated on each window below A down to and includ
     ing P (in order).

When the focus moves from _P_o_i_n_t_e_r_R_o_o_t to _N_o_n_e (or vice
versa) and the pointer is in window P:

    If the old focus is _P_o_i_n_t_e_r_R_o_o_t, _F_o_c_u_s_O_u_t with detail
     _P_o_i_n_t_e_r is generated on each window from P up to and
     including P's root (in order).

    _F_o_c_u_s_O_u_t with detail _P_o_i_n_t_e_r_R_o_o_t (or _N_o_n_e) is generated
     on all root windows.

    _F_o_c_u_s_I_n with detail _N_o_n_e (or _P_o_i_n_t_e_r_R_o_o_t) is generated
     on all root windows.

    If the new focus is _P_o_i_n_t_e_r_R_o_o_t, _F_o_c_u_s_I_n with detail
     _P_o_i_n_t_e_r 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 _K_e_y_P_r_e_s_s event that activates the grab), G is the
grab-window for the grab, and F is the current focus:




                             111122





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


    _F_o_c_u_s_I_n and _F_o_c_u_s_O_u_t events with mode _G_r_a_b are gener
     ated (as for _N_o_r_m_a_l above) as if the focus were to
     change from F to G.

When a keyboard grab deactivates (but after generating any
actual _K_e_y_R_e_l_e_a_s_e event that deactivates the grab), G is the
grab-window for the grab, and F is the current focus:

    _F_o_c_u_s_I_n and _F_o_c_u_s_O_u_t events with mode _U_n_g_r_a_b are gener
     ated (as for _N_o_r_m_a_l above) as if the focus were to
     change from G to F.


__
||    _K_e_y_m_a_p_N_o_t_i_f_y

||__  _k_e_y_s: LISTofCARD8


The value is a bit vector as described in _Q_u_e_r_y_K_e_y_m_a_p.  This
event is reported to clients selecting _K_e_y_m_a_p_S_t_a_t_e on a win
dow and is generated immediately after every _E_n_t_e_r_N_o_t_i_f_y and
_F_o_c_u_s_I_n.


__
||    _E_x_p_o_s_e

_w_i_n_d_o_w: WINDOW
_x, _y, _w_i_d_t_h, _h_e_i_g_h_t: CARD16
||__  _c_o_u_n_t: CARD16


This event is reported to clients selecting _E_x_p_o_s_u_r_e 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 _A_l_w_a_y_s or
_W_h_e_n_M_a_p_p_e_d.  The regions are decomposed into an arbitrary
set of rectangles, and an _E_x_p_o_s_e event is generated for each
rectangle.

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 _E_x_p_o_s_e events for
this window follow.  If count is nonzero, then at least that
many more _E_x_p_o_s_e 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.



                             111133





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


_E_x_p_o_s_e events are never generated on _I_n_p_u_t_O_n_l_y windows.

All _E_x_p_o_s_e events caused by a hierarchy change are generated
after any hierarchy event caused by that change (for exam
ple, _U_n_m_a_p_N_o_t_i_f_y, _M_a_p_N_o_t_i_f_y, _C_o_n_f_i_g_u_r_e_N_o_t_i_f_y, _G_r_a_v_i_t_y_N_o_t_i_f_y,
_C_i_r_c_u_l_a_t_e_N_o_t_i_f_y).  All _E_x_p_o_s_e events on a given window are
generated after any _V_i_s_i_b_i_l_i_t_y_N_o_t_i_f_y event on that window,
but it is not required that all _E_x_p_o_s_e events on all windows
be generated after all _V_i_s_i_b_i_l_i_t_i_t_y events on all windows.
The ordering of _E_x_p_o_s_e events with respect to _F_o_c_u_s_O_u_t,
_E_n_t_e_r_N_o_t_i_f_y, and _L_e_a_v_e_N_o_t_i_f_y events is not constrained.


__
||    _G_r_a_p_h_i_c_s_E_x_p_o_s_u_r_e

_d_r_a_w_a_b_l_e: DRAWABLE
_x, _y, _w_i_d_t_h, _h_e_i_g_h_t: CARD16
_c_o_u_n_t: CARD16
_m_a_j_o_r_-_o_p_c_o_d_e: CARD8
||__  _m_i_n_o_r_-_o_p_c_o_d_e: 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 _G_r_a_p_h_i_c_s_E_x_p_o_
_s_u_r_e events for this window follow.  If count is nonzero,
then at least that many more _G_r_a_p_h_i_c_s_E_x_p_o_s_u_r_e 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 _C_o_p_y_
_A_r_e_a or _C_o_p_y_P_l_a_n_e, and minor-opcode is always zero.


__
||    _N_o_E_x_p_o_s_u_r_e

_d_r_a_w_a_b_l_e: DRAWABLE
_m_a_j_o_r_-_o_p_c_o_d_e: CARD8
||__  _m_i_n_o_r_-_o_p_c_o_d_e_: 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 _G_r_a_p_h_i_c_s_E_x_p_o_s_u_r_e events
does not produce any.  The drawable specifies the



                             111144





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


destination used for the graphics request.

The major and minor opcodes identify the graphics request
used.  For the core protocol, major-opcode is always _C_o_p_y_
_A_r_e_a or _C_o_p_y_P_l_a_n_e, and the minor-opcode is always zero.


__
||    _V_i_s_i_b_i_l_i_t_y_N_o_t_i_f_y

_w_i_n_d_o_w: WINDOW
||__  _s_t_a_t_e: {_U_n_o_b_s_c_u_r_e_d, _P_a_r_t_i_a_l_l_y_O_b_s_c_u_r_e_d, _F_u_l_l_y_O_b_s_c_u_r_e_d}


This event is reported to clients selecting _V_i_s_i_b_i_l_i_t_y_C_h_a_n_g_e
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 _U_n_o_b_s_c_u_r_e_d 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 _P_a_r_t_i_a_l_l_y_O_b_s_c_u_r_e_d 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 _F_u_l_l_y_O_b_s_c_u_r_e_d is generated.

_V_i_s_i_b_i_l_i_t_y_N_o_t_i_f_y events are never generated on _I_n_p_u_t_O_n_l_y
windows.

All _V_i_s_i_b_i_l_i_t_y_N_o_t_i_f_y events caused by a hierarchy change are
generated after any hierarchy event caused by that change
(for example, _U_n_m_a_p_N_o_t_i_f_y, _M_a_p_N_o_t_i_f_y, _C_o_n_f_i_g_u_r_e_N_o_t_i_f_y,
_G_r_a_v_i_t_y_N_o_t_i_f_y, _C_i_r_c_u_l_a_t_e_N_o_t_i_f_y).  Any _V_i_s_i_b_i_l_i_t_y_N_o_t_i_f_y event
on a given window is generated before any _E_x_p_o_s_e events on
that window, but it is not required that all _V_i_s_i_b_i_l_i_t_y_N_o_
_t_i_f_y events on all windows be generated before all _E_x_p_o_s_e
events on all windows.  The ordering of _V_i_s_i_b_i_l_i_t_y_N_o_t_i_f_y
events with respect to _F_o_c_u_s_O_u_t, _E_n_t_e_r_N_o_t_i_f_y, and _L_e_a_v_e_N_o_
_t_i_f_y events is not constrained.


__
||    _C_r_e_a_t_e_N_o_t_i_f_y

_p_a_r_e_n_t, _w_i_n_d_o_w: WINDOW
_x, _y: INT16
_w_i_d_t_h, _h_e_i_g_h_t, _b_o_r_d_e_r_-_w_i_d_t_h: CARD16
||__  _o_v_e_r_r_i_d_e_-_r_e_d_i_r_e_c_t: BOOL


This event is reported to clients selecting _S_u_b_s_t_r_u_c_t_u_r_e_N_o_
_t_i_f_y on the parent and is generated when the window is



                             111155





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


created.  The arguments are as in the _C_r_e_a_t_e_W_i_n_d_o_w request.


__
||    _D_e_s_t_r_o_y_N_o_t_i_f_y

||__  _e_v_e_n_t, _w_i_n_d_o_w: WINDOW


This event is reported to clients selecting _S_t_r_u_c_t_u_r_e_N_o_t_i_f_y
on the window and to clients selecting _S_u_b_s_t_r_u_c_t_u_r_e_N_o_t_i_f_y 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 _D_e_s_t_r_o_y_N_o_t_i_f_y events is such that for
any given window, _D_e_s_t_r_o_y_N_o_t_i_f_y 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.


__
||    _U_n_m_a_p_N_o_t_i_f_y

_e_v_e_n_t, _w_i_n_d_o_w: WINDOW
||__  _f_r_o_m_-_c_o_n_f_i_g_u_r_e: BOOL


This event is reported to clients selecting _S_t_r_u_c_t_u_r_e_N_o_t_i_f_y
on the window and to clients selecting _S_u_b_s_t_r_u_c_t_u_r_e_N_o_t_i_f_y 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 _T_r_u_e if the event
was generated as a result of the window's parent being
resized when the window itself had a win-gravity of _U_n_m_a_p.


__
||    _M_a_p_N_o_t_i_f_y

_e_v_e_n_t, _w_i_n_d_o_w: WINDOW
||__  _o_v_e_r_r_i_d_e_-_r_e_d_i_r_e_c_t: BOOL


This event is reported to clients selecting _S_t_r_u_c_t_u_r_e_N_o_t_i_f_y
on the window and to clients selecting _S_u_b_s_t_r_u_c_t_u_r_e_N_o_t_i_f_y 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.




                             111166





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _M_a_p_R_e_q_u_e_s_t

||__  _p_a_r_e_n_t, _w_i_n_d_o_w: WINDOW


This event is reported to the client selecting _S_u_b_s_t_r_u_c_t_u_r_
_e_R_e_d_i_r_e_c_t on the parent and is generated when a _M_a_p_W_i_n_d_o_w
request is issued on an unmapped window with an override-
redirect attribute of _F_a_l_s_e.


__
||    _R_e_p_a_r_e_n_t_N_o_t_i_f_y

_e_v_e_n_t, _w_i_n_d_o_w, _p_a_r_e_n_t: WINDOW
_x, _y: INT16
||__  _o_v_e_r_r_i_d_e_-_r_e_d_i_r_e_c_t: BOOL


This event is reported to clients selecting _S_u_b_s_t_r_u_c_t_u_r_e_N_o_
_t_i_f_y on either the old or the new parent and to clients
selecting _S_t_r_u_c_t_u_r_e_N_o_t_i_f_y 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.


__
||    _C_o_n_f_i_g_u_r_e_N_o_t_i_f_y

_e_v_e_n_t, _w_i_n_d_o_w: WINDOW
_x, _y: INT16
_w_i_d_t_h, _h_e_i_g_h_t, _b_o_r_d_e_r_-_w_i_d_t_h: CARD16
_a_b_o_v_e_-_s_i_b_l_i_n_g: WINDOW or _N_o_n_e
||__  _o_v_e_r_r_i_d_e_-_r_e_d_i_r_e_c_t: BOOL


This event is reported to clients selecting _S_t_r_u_c_t_u_r_e_N_o_t_i_f_y
on the window and to clients selecting _S_u_b_s_t_r_u_c_t_u_r_e_N_o_t_i_f_y on
the parent.  It is generated when a _C_o_n_f_i_g_u_r_e_W_i_n_d_o_w 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 _N_o_n_e, 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.



                             111177





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _G_r_a_v_i_t_y_N_o_t_i_f_y

_e_v_e_n_t, _w_i_n_d_o_w: WINDOW
||__  _x, _y: INT16


This event is reported to clients selecting _S_u_b_s_t_r_u_c_t_u_r_e_N_o_
_t_i_f_y on the parent and to clients selecting _S_t_r_u_c_t_u_r_e_N_o_t_i_f_y
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.


__
||    _R_e_s_i_z_e_R_e_q_u_e_s_t

_w_i_n_d_o_w: WINDOW
||__  _w_i_d_t_h, _h_e_i_g_h_t: CARD16


This event is reported to the client selecting _R_e_s_i_z_e_R_e_d_i_
_r_e_c_t on the window and is generated when a _C_o_n_f_i_g_u_r_e_W_i_n_d_o_w
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.


__
||    _C_o_n_f_i_g_u_r_e_R_e_q_u_e_s_t

_p_a_r_e_n_t, _w_i_n_d_o_w: WINDOW
_x, _y: INT16
_w_i_d_t_h, _h_e_i_g_h_t, _b_o_r_d_e_r_-_w_i_d_t_h: CARD16
_s_i_b_l_i_n_g: WINDOW or _N_o_n_e
_s_t_a_c_k_-_m_o_d_e: {_A_b_o_v_e, _B_e_l_o_w, _T_o_p_I_f, _B_o_t_t_o_m_I_f, _O_p_p_o_s_i_t_e}
||__  _v_a_l_u_e_-_m_a_s_k: BITMASK


This event is reported to the client selecting _S_u_b_s_t_r_u_c_t_u_r_
_e_R_e_d_i_r_e_c_t on the parent and is generated when a _C_o_n_f_i_g_
_u_r_e_W_i_n_d_o_w 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 _N_o_n_e and _A_b_o_v_e (respectively) if not
given in the request.






                             111188





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _C_i_r_c_u_l_a_t_e_N_o_t_i_f_y

_e_v_e_n_t, _w_i_n_d_o_w: WINDOW
||__  _p_l_a_c_e: {_T_o_p, _B_o_t_t_o_m}


This event is reported to clients selecting _S_t_r_u_c_t_u_r_e_N_o_t_i_f_y
on the window and to clients selecting _S_u_b_s_t_r_u_c_t_u_r_e_N_o_t_i_f_y on
the parent.  It is generated when the window is actually
restacked from a _C_i_r_c_u_l_a_t_e_W_i_n_d_o_w request.  The event is the
window on which the event was generated, and the window is
the window that is restacked.  If place is _T_o_p, the window
is now on top of all siblings.  Otherwise, it is below all
siblings.


__
||    _C_i_r_c_u_l_a_t_e_R_e_q_u_e_s_t

_p_a_r_e_n_t, _w_i_n_d_o_w: WINDOW
||__  _p_l_a_c_e: {_T_o_p, _B_o_t_t_o_m}


This event is reported to the client selecting _S_u_b_s_t_r_u_c_t_u_r_
_e_R_e_d_i_r_e_c_t on the parent and is generated when a _C_i_r_c_u_
_l_a_t_e_W_i_n_d_o_w 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.


__
||    _P_r_o_p_e_r_t_y_N_o_t_i_f_y

_w_i_n_d_o_w: WINDOW
_a_t_o_m: ATOM
_s_t_a_t_e: {_N_e_w_V_a_l_u_e, _D_e_l_e_t_e_d}
||__  _t_i_m_e: TIMESTAMP


This event is reported to clients selecting _P_r_o_p_e_r_t_y_C_h_a_n_g_e
on the window and is generated with state _N_e_w_V_a_l_u_e when a
property of the window is changed using _C_h_a_n_g_e_P_r_o_p_e_r_t_y or
_R_o_t_a_t_e_P_r_o_p_e_r_t_i_e_s, even when adding zero-length data using
_C_h_a_n_g_e_P_r_o_p_e_r_t_y and when replacing all or part of a property
with identical data using _C_h_a_n_g_e_P_r_o_p_e_r_t_y or
_R_o_t_a_t_e_P_r_o_p_e_r_t_i_e_s.  It is generated with state _D_e_l_e_t_e_d when a
property of the window is deleted using request _D_e_l_e_t_e_P_r_o_p_
_e_r_t_y or _G_e_t_P_r_o_p_e_r_t_y.  The timestamp indicates the server
time when the property was changed.







                             111199





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66

__
||    _S_e_l_e_c_t_i_o_n_C_l_e_a_r

_o_w_n_e_r: WINDOW
_s_e_l_e_c_t_i_o_n: ATOM
||__  _t_i_m_e: 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 _S_e_t_S_e_l_e_c_t_i_o_n_O_w_n_e_r.  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 _S_e_t_S_e_l_e_c_
_t_i_o_n_O_w_n_e_r request.


__
||    _S_e_l_e_c_t_i_o_n_R_e_q_u_e_s_t

_o_w_n_e_r: WINDOW
_s_e_l_e_c_t_i_o_n: ATOM
_t_a_r_g_e_t: ATOM
_p_r_o_p_e_r_t_y: ATOM or _N_o_n_e
_r_e_q_u_e_s_t_o_r: WINDOW
||__  _t_i_m_e: TIMESTAMP or _C_u_r_r_e_n_t_T_i_m_e


This event is reported to the owner of a selection and is
generated when a client issues a _C_o_n_v_e_r_t_S_e_l_e_c_t_i_o_n request.
The owner argument is the window that was specified in the
_S_e_t_S_e_l_e_c_t_i_o_n_O_w_n_e_r request.  The remaining arguments are as
in the _C_o_n_v_e_r_t_S_e_l_e_c_t_i_o_n request.

The owner should convert the selection based on the speci
fied target type and send a _S_e_l_e_c_t_i_o_n_N_o_t_i_f_y back to the
requestor.  A complete specification for using selections is
given in the X Consortium standard _I_n_t_e_r_-_C_l_i_e_n_t _C_o_m_m_u_n_i_c_a_
_t_i_o_n _C_o_n_v_e_n_t_i_o_n_s _M_a_n_u_a_l.


__
||    _S_e_l_e_c_t_i_o_n_N_o_t_i_f_y

_r_e_q_u_e_s_t_o_r: WINDOW
_s_e_l_e_c_t_i_o_n, _t_a_r_g_e_t: ATOM
_p_r_o_p_e_r_t_y: ATOM or _N_o_n_e
||__  _t_i_m_e: TIMESTAMP or _C_u_r_r_e_n_t_T_i_m_e


This event is generated by the server in response to a _C_o_n_
_v_e_r_t_S_e_l_e_c_t_i_o_n request when there is no owner for the selec
tion.  When there is an owner, it should be generated by the
owner using _S_e_n_d_E_v_e_n_t.  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



                             112200





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


conversion could not be performed (indicated with property
_N_o_n_e).


__
||    _C_o_l_o_r_m_a_p_N_o_t_i_f_y

_w_i_n_d_o_w: WINDOW
_c_o_l_o_r_m_a_p: COLORMAP or _N_o_n_e
_n_e_w: BOOL
||__  _s_t_a_t_e: {_I_n_s_t_a_l_l_e_d, _U_n_i_n_s_t_a_l_l_e_d}


This event is reported to clients selecting _C_o_l_o_r_m_a_p_C_h_a_n_g_e
on the window.  It is generated with value _T_r_u_e for new when
the colormap attribute of the window is changed and is gen
erated with value _F_a_l_s_e 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.


__
||    _M_a_p_p_i_n_g_N_o_t_i_f_y

_r_e_q_u_e_s_t: {_M_o_d_i_f_i_e_r, _K_e_y_b_o_a_r_d, _P_o_i_n_t_e_r}
||__  _f_i_r_s_t_-_k_e_y_c_o_d_e, _c_o_u_n_t: 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: _M_o_d_i_f_i_e_r_s for a successful
_S_e_t_M_o_d_i_f_i_e_r_M_a_p_p_i_n_g, _K_e_y_b_o_a_r_d for a successful
_C_h_a_n_g_e_K_e_y_b_o_a_r_d_M_a_p_p_i_n_g, and _P_o_i_n_t_e_r for a successful
_S_e_t_P_o_i_n_t_e_r_M_a_p_p_i_n_g.  If the detail is _K_e_y_b_o_a_r_d, then first-
keycode and count indicate the range of altered keycodes.


__
||    _C_l_i_e_n_t_M_e_s_s_a_g_e

_w_i_n_d_o_w: WINDOW
_t_y_p_e: ATOM
_f_o_r_m_a_t: {8, 16, 32}
||__  _d_a_t_a: LISTofINT8 or LISTofINT16 or LISTofINT32


This event is only generated by clients using _S_e_n_d_E_v_e_n_t.
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



                             112211





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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

1122..  FFllooww CCoonnttrrooll aanndd CCoonnccuurrrreennccyy

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.

                         AAppppeennddiixx AA

                      KKEEYYSSYYMM EEnnccooddiinngg



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

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

    Byte 2 is the next most-significant 8 bits

    Byte 3 is the next most-significant 8 bits




                             112222





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


    Byte 4 is the least-significant 8 bits

There are two special KEYSYM values: _N_o_S_y_m_b_o_l and
_V_o_i_d_S_y_m_b_o_l.  They are used to indicate the absence of sym
bols (see section 5).

-----------------------------------------------
BByyttee 11   BByyttee 22   BByyttee 33   BByyttee 44   NNaammee
-----------------------------------------------
  0         0        0        0     _N_o_S_y_m_b_o_l
  0       255      255      255     _V_o_i_d_S_y_m_b_o_l
-----------------------------------------------

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.

--------------------
BByyttee 33   BByyttee 4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
  14     Korean
 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



                             112233





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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:

-----------------------------------------------------------
UUSS nnaammee          EEuurrooppeeaann nnaammee    ccooddee ppoossiittiioonn iinn LLaattiinn--11
-----------------------------------------------------------
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:

    The Engraving approach





                             112244





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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





                             112255





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


     byte3 * 256 + byte4


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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
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




                             112266





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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
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




                             112277





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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
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




                             112288





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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
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






                             112299





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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
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




                             113300





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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
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




                             113311





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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


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




                             113322





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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
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




                             113333





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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
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




                             113344





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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
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




                             113355





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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
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




                             113366





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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
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




                             113377





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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
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




                             113388





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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
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




                             113399





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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
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




                             114400





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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
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




                             114411





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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
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




                             114422





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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
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




                             114433





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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
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




                             114444





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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
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




                             114455





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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


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




                             114466





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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
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




                             114477





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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
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




                             114488





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


-----------------------------------------------------------------------------------
BByyttee   BByyttee   CCooddee    NNaammee                                               SSeett
 33      44     PPooss
-----------------------------------------------------------------------------------
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
-----------------------------------------------------------------------------------







































                             114499





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66




                         AAppppeennddiixx BB

                     PPrroottooccooll EEnnccooddiinngg




SSyynnttaaccttiicc CCoonnvveennttiioonnss

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:


     _N_a_m_e_o_f_T_h_i_n_g
       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:




                             115500





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


     N         value          name


The value is always interpreted as an N-byte unsigned inte
ger.  For example, the first two bytes of a _W_i_n_d_o_w error are
always zero (indicating an error in general) and three
(indicating the _W_i_n_d_o_w error in particular):


     1         0    Error
     1         3    code


For components described in the protocol as:

     name: {_N_a_m_e_1,..., _N_a_m_e_I}

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: {_I_n_p_u_t_O_u_t_p_u_t, _I_n_p_u_t_O_n_l_y, _C_o_p_y_F_r_o_m_P_a_r_e_n_t}

becomes:


     2                        class
               0    CopyFromParent
               1    InputOutput
               2    InputOnly


For components described in the protocol as:

     NAME: TYPE or _A_l_t_e_r_n_a_t_i_v_e_1...or _A_l_t_e_r_n_a_t_i_v_e_I

the encode-form is:


     N         TYPE           NAME
               value1    Alternative1
               ...
               valueI    AlternativeI





                             115511





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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

     destination: WINDOW or _P_o_i_n_t_e_r_W_i_n_d_o_w or _I_n_p_u_t_F_o_c_u_s

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



                             115522





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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


CCoommmmoonn TTyyppeess

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




                             115533





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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



                             115544





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


       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





                             115555





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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



                             115566





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  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


EErrrroorrss


_R_e_q_u_e_s_t
  1  0                   Error
  1  1                   code
  2  CARD16              sequence number
  4                      unused
  2  CARD16              minor opcode
  1  CARD8               major opcode
  21                     unused



_V_a_l_u_e
  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



                             115577





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


_W_i_n_d_o_w
  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



_P_i_x_m_a_p
  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



_A_t_o_m
  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



_C_u_r_s_o_r
  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



_F_o_n_t
  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





                             115588





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


_M_a_t_c_h
  1  0                   Error
  1  8                   code
  2  CARD16              sequence number
  4                      unused
  2  CARD16              minor opcode
  1  CARD8               major opcode
  21                     unused



_D_r_a_w_a_b_l_e
  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



_A_c_c_e_s_s
  1  0                   Error
  1  10                  code
  2  CARD16              sequence number
  4                      unused
  2  CARD16              minor opcode
  1  CARD8               major opcode
  21                     unused



_A_l_l_o_c
  1  0                   Error
  1  11                  code
  2  CARD16              sequence number
  4                      unused
  2  CARD16              minor opcode
  1  CARD8               major opcode
  21                     unused



_C_o_l_o_r_m_a_p
  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





                             115599





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


_G_C_o_n_t_e_x_t
  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



_I_D_C_h_o_i_c_e
  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



_N_a_m_e
  1  0                   Error
  1  15                  code
  2  CARD16              sequence number
  4                      unused
  2  CARD16              minor opcode
  1  CARD8               major opcode
  21                     unused



_L_e_n_g_t_h
  1  0                   Error
  1  16                  code
  2  CARD16              sequence number
  4                      unused
  2  CARD16              minor opcode
  1  CARD8               major opcode
  21                     unused



_I_m_p_l_e_m_e_n_t_a_t_i_o_n
  1  0                   Error
  1  17                  code
  2  CARD16              sequence number
  4                      unused
  2  CARD16              minor opcode
  1  CARD8               major opcode
  21                     unused





                             116600





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


KKeeyybbooaarrddss

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.

PPooiinntteerrss

BUTTON values are numbered starting with one.

PPrreeddeeffiinneedd AAttoommss


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



                             116611





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


WM_ICON_NAME     37
WM_ICON_SIZE     38
WM_NAME          39


CCoonnnneeccttiioonn SSeettuupp

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)






                             116622





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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






                             116633





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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


RReeqquueessttss


_C_r_e_a_t_e_W_i_n_d_o_w



                             116644





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  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



                             116655





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  4  SETofDEVICEEVENT    do-not-propagate-mask
  4  COLORMAP            colormap
     0         CopyFromParent
  4  CURSOR              cursor
     0         None



_C_h_a_n_g_e_W_i_n_d_o_w_A_t_t_r_i_b_u_t_e_s
  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



_G_e_t_W_i_n_d_o_w_A_t_t_r_i_b_u_t_e_s
  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



                             116666





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  2  SETofDEVICEEVENT    do-not-propagate-mask
  2                      unused



_D_e_s_t_r_o_y_W_i_n_d_o_w
  1  4                   opcode
  1                      unused
  2  2                   request length
  4  WINDOW              window



_D_e_s_t_r_o_y_S_u_b_w_i_n_d_o_w_s
  1  5                   opcode
  1                      unused
  2  2                   request length
  4  WINDOW              window



_C_h_a_n_g_e_S_a_v_e_S_e_t
  1  6                   opcode
  1                      mode
     0         Insert
     1         Delete
  2  2                   request length
  4  WINDOW              window



_R_e_p_a_r_e_n_t_W_i_n_d_o_w
  1  7                   opcode
  1                      unused
  2  4                   request length
  4  WINDOW              window
  4  WINDOW              parent
  2  INT16               x
  2  INT16               y



_M_a_p_W_i_n_d_o_w
  1  8                   opcode
  1                      unused
  2  2                   request length
  4  WINDOW              window



_M_a_p_S_u_b_w_i_n_d_o_w_s
  1  9                   opcode
  1                      unused
  2  2                   request length



                             116677





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  4  WINDOW              window



_U_n_m_a_p_W_i_n_d_o_w
  1  10                  opcode
  1                      unused
  2  2                   request length
  4  WINDOW              window



_U_n_m_a_p_S_u_b_w_i_n_d_o_w_s
  1  11                  opcode
  1                      unused
  2  2                   request length
  4  WINDOW              window



_C_o_n_f_i_g_u_r_e_W_i_n_d_o_w
  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



_C_i_r_c_u_l_a_t_e_W_i_n_d_o_w



                             116688





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  1  13                  opcode
  1                      direction
     0         RaiseLowest
     1         LowerHighest
  2  2                   request length
  4  WINDOW              window



_G_e_t_G_e_o_m_e_t_r_y
  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



_Q_u_e_r_y_T_r_e_e
  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



_I_n_t_e_r_n_A_t_o_m
  1  16                  opcode



                             116699





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  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



_G_e_t_A_t_o_m_N_a_m_e
  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)



_C_h_a_n_g_e_P_r_o_p_e_r_t_y
  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)



                             117700





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  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)



_D_e_l_e_t_e_P_r_o_p_e_r_t_y
  1  19                  opcode
  1                      unused
  2  3                   request length
  4  WINDOW              window
  4  ATOM                property



_G_e_t_P_r_o_p_e_r_t_y
  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)



_L_i_s_t_P_r_o_p_e_r_t_i_e_s
  1  21                  opcode
  1                      unused
  2  2                   request length



                             117711





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  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



_S_e_t_S_e_l_e_c_t_i_o_n_O_w_n_e_r
  1  22                  opcode
  1                      unused
  2  4                   request length
  4  WINDOW              owner
     0         None
  4  ATOM                selection
  4  TIMESTAMP           time
     0         CurrentTime



_G_e_t_S_e_l_e_c_t_i_o_n_O_w_n_e_r
  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



_C_o_n_v_e_r_t_S_e_l_e_c_t_i_o_n
  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



                             117722





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


     0         CurrentTime



_S_e_n_d_E_v_e_n_t
  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)



_G_r_a_b_P_o_i_n_t_e_r
  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



_U_n_g_r_a_b_P_o_i_n_t_e_r
  1  27                  opcode
  1                      unused



                             117733





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  2  2                   request length
  4  TIMESTAMP           time
     0         CurrentTime



_G_r_a_b_B_u_t_t_o_n
  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



_U_n_g_r_a_b_B_u_t_t_o_n
  1  29                  opcode
  1  BUTTON              button
     0         AnyButton
  2  3                   request length
  4  WINDOW              grab-window
  2  SETofKEYMASK        modifiers
     #x8000    AnyModifier
  2                      unused



_C_h_a_n_g_e_A_c_t_i_v_e_P_o_i_n_t_e_r_G_r_a_b
  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





                             117744





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


_G_r_a_b_K_e_y_b_o_a_r_d
  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



_U_n_g_r_a_b_K_e_y_b_o_a_r_d
  1  32                  opcode
  1                      unused
  2  2                   request length
  4  TIMESTAMP           time
     0         CurrentTime



_G_r_a_b_K_e_y
  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



                             117755





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  3                      unused



_U_n_g_r_a_b_K_e_y
  1  34                  opcode
  1  KEYCODE             key
     0         AnyKey
  2  3                   request length
  4  WINDOW              grab-window
  2  SETofKEYMASK        modifiers
     #x8000    AnyModifier
  2                      unused



_A_l_l_o_w_E_v_e_n_t_s
  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



_G_r_a_b_S_e_r_v_e_r
  1  36                  opcode
  1                      unused
  2  1                   request length



_U_n_g_r_a_b_S_e_r_v_e_r
  1  37                  opcode
  1                      unused
  2  1                   request length



_Q_u_e_r_y_P_o_i_n_t_e_r
  1  38                  opcode
  1                      unused
  2  2                   request length
  4  WINDOW              window





                             117766





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


 =>
  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



_G_e_t_M_o_t_i_o_n_E_v_e_n_t_s
  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



_T_r_a_n_s_l_a_t_e_C_o_o_r_d_i_n_a_t_e_s
  1  40                  opcode
  1                      unused
  2  4                   request length
  4  WINDOW              src-window
  4  WINDOW              dst-window
  2  INT16               src-x
  2  INT16               src-y



                             117777





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


 =>
  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



_W_a_r_p_P_o_i_n_t_e_r
  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



_S_e_t_I_n_p_u_t_F_o_c_u_s
  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



_G_e_t_I_n_p_u_t_F_o_c_u_s
  1  43                  opcode
  1                      unused
  2  1                   request length


 =>
  1  1                   Reply
  1                      revert-to



                             117788





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


     0         None
     1         PointerRoot
     2         Parent
  2  CARD16              sequence number
  4  0                   reply length
  4  WINDOW              focus
     0         None
     1         PointerRoot
  20                     unused



_Q_u_e_r_y_K_e_y_m_a_p
  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



_O_p_e_n_F_o_n_t
  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)



_C_l_o_s_e_F_o_n_t
  1  46                  opcode
  1                      unused
  2  2                   request length
  4  FONT                font



_Q_u_e_r_y_F_o_n_t
  1  47                  opcode
  1                      unused
  2  2                   request length
  4  FONTABLE            font





                             117799





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


 =>
  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



_Q_u_e_r_y_T_e_x_t_E_x_t_e_n_t_s
  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



                             118800





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


     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



_L_i_s_t_F_o_n_t_s
  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)



_L_i_s_t_F_o_n_t_s_W_i_t_h_I_n_f_o
  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



                             118811





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  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



_S_e_t_F_o_n_t_P_a_t_h
  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)



_G_e_t_F_o_n_t_P_a_t_h
  1  52                  opcode
  1                      unused
  2  1                   request list


 =>



                             118822





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  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)



_C_r_e_a_t_e_P_i_x_m_a_p
  1  53                  opcode
  1  CARD8               depth
  2  4                   request length
  4  PIXMAP              pid
  4  DRAWABLE            drawable
  2  CARD16              width
  2  CARD16              height



_F_r_e_e_P_i_x_m_a_p
  1  54                  opcode
  1                      unused
  2  2                   request length
  4  PIXMAP              pixmap



_C_r_e_a_t_e_G_C
  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



                             118833





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


     #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



                             118844





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  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



_C_h_a_n_g_e_G_C
  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



_C_o_p_y_G_C
  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



_S_e_t_D_a_s_h_e_s
  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)






                             118855





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


_S_e_t_C_l_i_p_R_e_c_t_a_n_g_l_e_s
  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



_F_r_e_e_G_C
  1  60                  opcode
  1                      unused
  2  2                   request length
  4  GCONTEXT            gc



_C_l_e_a_r_A_r_e_a
  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



_C_o_p_y_A_r_e_a
  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



_C_o_p_y_P_l_a_n_e
  1  63                  opcode
  1                      unused



                             118866





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  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



_P_o_l_y_P_o_i_n_t
  1  64                  opcode
  1                      coordinate-mode
     0         Origin
     1         Previous
  2  3+n                 request length
  4  DRAWABLE            drawable
  4  GCONTEXT            gc
  4n LISTofPOINT         points



_P_o_l_y_L_i_n_e
  1  65                  opcode
  1                      coordinate-mode
     0         Origin
     1         Previous
  2  3+n                 request length
  4  DRAWABLE            drawable
  4  GCONTEXT            gc
  4n LISTofPOINT         points



_P_o_l_y_S_e_g_m_e_n_t
  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





                             118877





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


_P_o_l_y_R_e_c_t_a_n_g_l_e
  1  67                  opcode
  1                      unused
  2  3+2n                request length
  4  DRAWABLE            drawable
  4  GCONTEXT            gc
  8n LISTofRECTANGLE     rectangles



_P_o_l_y_A_r_c
  1  68                  opcode
  1                      unused
  2  3+3n                request length
  4  DRAWABLE            drawable
  4  GCONTEXT            gc
  12n          LISTofARC arcs



_F_i_l_l_P_o_l_y
  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



_P_o_l_y_F_i_l_l_R_e_c_t_a_n_g_l_e
  1  70                  opcode
  1                      unused
  2  3+2n                request length
  4  DRAWABLE            drawable
  4  GCONTEXT            gc
  8n LISTofRECTANGLE     rectangles



_P_o_l_y_F_i_l_l_A_r_c
  1  71                  opcode
  1                      unused
  2  3+3n                request length
  4  DRAWABLE            drawable
  4  GCONTEXT            gc



                             118888





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  12n          LISTofARC arcs



_P_u_t_I_m_a_g_e
  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)



_G_e_t_I_m_a_g_e
  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)



_P_o_l_y_T_e_x_t_8
  1  74                  opcode



                             118899





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  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)



_P_o_l_y_T_e_x_t_1_6
  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)



_I_m_a_g_e_T_e_x_t_8
  1  76                  opcode
  1  n                   length of string
  2  4+(n+p)/4           request length
  4  DRAWABLE            drawable
  4  GCONTEXT            gc



                             119900





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  2  INT16               x
  2  INT16               y
  n  STRING8             string
  p                      unused, p=pad(n)



_I_m_a_g_e_T_e_x_t_1_6
  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)



_C_r_e_a_t_e_C_o_l_o_r_m_a_p
  1  78                  opcode
  1                      alloc
     0         None
     1         All
  2  4                   request length
  4  COLORMAP            mid
  4  WINDOW              window
  4  VISUALID            visual



_F_r_e_e_C_o_l_o_r_m_a_p
  1  79                  opcode
  1                      unused
  2  2                   request length
  4  COLORMAP            cmap



_C_o_p_y_C_o_l_o_r_m_a_p_A_n_d_F_r_e_e
  1  80                  opcode
  1                      unused
  2  3                   request length
  4  COLORMAP            mid
  4  COLORMAP            src-cmap



_I_n_s_t_a_l_l_C_o_l_o_r_m_a_p
  1  81                  opcode
  1                      unused
  2  2                   request length
  4  COLORMAP            cmap



                             119911





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


_U_n_i_n_s_t_a_l_l_C_o_l_o_r_m_a_p
  1  82                  opcode
  1                      unused
  2  2                   request length
  4  COLORMAP            cmap



_L_i_s_t_I_n_s_t_a_l_l_e_d_C_o_l_o_r_m_a_p_s
  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



_A_l_l_o_c_C_o_l_o_r
  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



_A_l_l_o_c_N_a_m_e_d_C_o_l_o_r
  1  85                  opcode
  1                      unused



                             119922





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  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



_A_l_l_o_c_C_o_l_o_r_C_e_l_l_s
  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



_A_l_l_o_c_C_o_l_o_r_P_l_a_n_e_s
  1  87                  opcode
  1  BOOL                contiguous
  2  4                   request length
  4  COLORMAP            cmap
  2  CARD16              colors
  2  CARD16              reds
  2  CARD16              greens



                             119933





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  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



_F_r_e_e_C_o_l_o_r_s
  1  88                  opcode
  1                      unused
  2  3+n                 request length
  4  COLORMAP            cmap
  4  CARD32              plane-mask
  4n LISTofCARD32        pixels



_S_t_o_r_e_C_o_l_o_r_s
  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



_S_t_o_r_e_N_a_m_e_d_C_o_l_o_r
  1  90                  opcode
  1                      do-red, do-green, do-blue
     #x01      do-red (1 is True, 0 is False)



                             119944





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


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



_Q_u_e_r_y_C_o_l_o_r_s
  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



_L_o_o_k_u_p_C_o_l_o_r
  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



                             119955





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  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



_C_r_e_a_t_e_C_u_r_s_o_r
  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



_C_r_e_a_t_e_G_l_y_p_h_C_u_r_s_o_r
  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



_F_r_e_e_C_u_r_s_o_r
  1  95                  opcode
  1                      unused
  2  2                   request length
  4  CURSOR              cursor



                             119966





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


_R_e_c_o_l_o_r_C_u_r_s_o_r
  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



_Q_u_e_r_y_B_e_s_t_S_i_z_e
  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



_Q_u_e_r_y_E_x_t_e_n_s_i_o_n
  1  98                  opcode
  1                      unused
  2  2+(n+p)/4           request length
  2  n                   length of name
  2                      unused
  n  STRING8             name
  p                      unused, p=pad(n)


 =>
  1  1                   Reply
  1                      unused
  2  CARD16              sequence number
  4  0                   reply length
  1  BOOL                present
  1  CARD8               major-opcode



                             119977





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  1  CARD8               first-event
  1  CARD8               first-error
  20                     unused



_L_i_s_t_E_x_t_e_n_s_i_o_n_s
  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)



_C_h_a_n_g_e_K_e_y_b_o_a_r_d_M_a_p_p_i_n_g
  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



_G_e_t_K_e_y_b_o_a_r_d_M_a_p_p_i_n_g
  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



_C_h_a_n_g_e_K_e_y_b_o_a_r_d_C_o_n_t_r_o_l



                             119988





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  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



_G_e_t_K_e_y_b_o_a_r_d_C_o_n_t_r_o_l
  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





                             119999





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


_B_e_l_l
  1  104                 opcode
  1  INT8                percent
  2  1                   request length



_C_h_a_n_g_e_P_o_i_n_t_e_r_C_o_n_t_r_o_l
  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



_G_e_t_P_o_i_n_t_e_r_C_o_n_t_r_o_l
  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



_S_e_t_S_c_r_e_e_n_S_a_v_e_r
  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





                             220000





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


_G_e_t_S_c_r_e_e_n_S_a_v_e_r
  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



_C_h_a_n_g_e_H_o_s_t_s
  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)



_L_i_s_t_H_o_s_t_s
  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



                             220011





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  22                     unused
  n  LISTofHOST          hosts (n always a multiple of 4)



_S_e_t_A_c_c_e_s_s_C_o_n_t_r_o_l
  1  111                 opcode
  1                      mode
     0         Disable
     1         Enable
  2  1                   request length



_S_e_t_C_l_o_s_e_D_o_w_n_M_o_d_e
  1  112                 opcode
  1                      mode
     0         Destroy
     1         RetainPermanent
     2         RetainTemporary
  2  1                   request length



_K_i_l_l_C_l_i_e_n_t
  1  113                 opcode
  1                      unused
  2  2                   request length
  4  CARD32              resource
     0         AllTemporary



_R_o_t_a_t_e_P_r_o_p_e_r_t_i_e_s
  1  114                 opcode
  1                      unused
  2  3+n                 request length
  4  WINDOW              window
  2  n                   number of properties
  2  INT16               delta
  4n LISTofATOM          properties



_F_o_r_c_e_S_c_r_e_e_n_S_a_v_e_r
  1  115                 opcode
  1                      mode
     0         Reset
     1         Activate
  2  1                   request length



_S_e_t_P_o_i_n_t_e_r_M_a_p_p_i_n_g



                             220022





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  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



_G_e_t_P_o_i_n_t_e_r_M_a_p_p_i_n_g
  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)



_S_e_t_M_o_d_i_f_i_e_r_M_a_p_p_i_n_g
  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






                             220033





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


_G_e_t_M_o_d_i_f_i_e_r_M_a_p_p_i_n_g
  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



_N_o_O_p_e_r_a_t_i_o_n
  1  127                 opcode
  1                      unused
  2  1+n                 request length
  4n                     unused


EEvveennttss


_K_e_y_P_r_e_s_s
  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



_K_e_y_R_e_l_e_a_s_e
  1  3                   code
  1  KEYCODE             detail
  2  CARD16              sequence number
  4  TIMESTAMP           time
  4  WINDOW              root
  4  WINDOW              event
  4  WINDOW              child
     0         None



                             220044





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  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



_B_u_t_t_o_n_P_r_e_s_s
  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



_B_u_t_t_o_n_R_e_l_e_a_s_e
  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



_M_o_t_i_o_n_N_o_t_i_f_y
  1  6                   code
  1                      detail
     0         Normal
     1         Hint
  2  CARD16              sequence number



                             220055





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  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



_E_n_t_e_r_N_o_t_i_f_y
  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



_L_e_a_v_e_N_o_t_i_f_y
  1  8                   code
  1                      detail
     0         Ancestor
     1         Virtual
     2         Inferior
     3         Nonlinear
     4         NonlinearVirtual
  2  CARD16              sequence number



                             220066





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  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



_F_o_c_u_s_I_n
  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



_F_o_c_u_s_O_u_t
  1  10                  code
  1                      detail
     0         Ancestor
     1         Virtual
     2         Inferior
     3         Nonlinear
     4         NonlinearVirtual
     5         Pointer
     6         PointerRoot
     7         None



                             220077





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  2  CARD16              sequence number
  4  WINDOW              event
  1                      mode
     0         Normal
     1         Grab
     2         Ungrab
     3         WhileGrabbed
  23                     unused



_K_e_y_m_a_p_N_o_t_i_f_y
  1  11                  code
  31 LISTofCARD8         keys (byte for keycodes 0-7 is omitted)



_E_x_p_o_s_e
  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



_G_r_a_p_h_i_c_s_E_x_p_o_s_u_r_e
  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



_N_o_E_x_p_o_s_u_r_e
  1  14                  code
  1                      unused
  2  CARD16              sequence number
  4  DRAWABLE            drawable
  2  CARD16              minor-opcode
  1  CARD8               major-opcode



                             220088





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  21                     unused



_V_i_s_i_b_i_l_i_t_y_N_o_t_i_f_y
  1  15                  code
  1                      unused
  2  CARD16              sequence number
  4  WINDOW              window
  1                      state
     0         Unobscured
     1         PartiallyObscured
     2         FullyObscured
  23                     unused



_C_r_e_a_t_e_N_o_t_i_f_y
  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



_D_e_s_t_r_o_y_N_o_t_i_f_y
  1  17                  code
  1                      unused
  2  CARD16              sequence number
  4  WINDOW              event
  4  WINDOW              window
  20                     unused



_U_n_m_a_p_N_o_t_i_f_y
  1  18                  code
  1                      unused
  2  CARD16              sequence number
  4  WINDOW              event
  4  WINDOW              window
  1  BOOL                from-configure
  19                     unused






                             220099





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


_M_a_p_N_o_t_i_f_y
  1  19                  code
  1                      unused
  2  CARD16              sequence number
  4  WINDOW              event
  4  WINDOW              window
  1  BOOL                override-redirect
  19                     unused



_M_a_p_R_e_q_u_e_s_t
  1  20                  code
  1                      unused
  2  CARD16              sequence number
  4  WINDOW              parent
  4  WINDOW              window
  20                     unused



_R_e_p_a_r_e_n_t_N_o_t_i_f_y
  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



_C_o_n_f_i_g_u_r_e_N_o_t_i_f_y
  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



_C_o_n_f_i_g_u_r_e_R_e_q_u_e_s_t



                             221100





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  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



_G_r_a_v_i_t_y_N_o_t_i_f_y
  1  24                  code
  1                      unused
  2  CARD16              sequence number
  4  WINDOW              event
  4  WINDOW              window
  2  INT16               x
  2  INT16               y
  16                     unused



_R_e_s_i_z_e_R_e_q_u_e_s_t
  1  25                  code
  1                      unused
  2  CARD16              sequence number
  4  WINDOW              window
  2  CARD16              width
  2  CARD16              height
  20                     unused



_C_i_r_c_u_l_a_t_e_N_o_t_i_f_y
  1  26                  code



                             221111





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  1                      unused
  2  CARD16              sequence number
  4  WINDOW              event
  4  WINDOW              window
  4  WINDOW              unused
  1                      place
     0         Top
     1         Bottom
  15                     unused



_C_i_r_c_u_l_a_t_e_R_e_q_u_e_s_t
  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



_P_r_o_p_e_r_t_y_N_o_t_i_f_y
  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



_S_e_l_e_c_t_i_o_n_C_l_e_a_r
  1  29                  code
  1                      unused
  2  CARD16              sequence number
  4  TIMESTAMP           time
  4  WINDOW              owner
  4  ATOM                selection
  16                     unused



_S_e_l_e_c_t_i_o_n_R_e_q_u_e_s_t
  1  30                  code
  1                      unused



                             221122





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  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



_S_e_l_e_c_t_i_o_n_N_o_t_i_f_y
  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



_C_o_l_o_r_m_a_p_N_o_t_i_f_y
  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



_C_l_i_e_n_t_M_e_s_s_a_g_e
  1  33                  code
  1  CARD8               format
  2  CARD16              sequence number
  4  WINDOW              window
  4  ATOM                type
  20                     data



_M_a_p_p_i_n_g_N_o_t_i_f_y



                             221133





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


  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















































                             221144





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66




                          GGlloossssaarryy



AAcccceessss ccoonnttrrooll lliisstt

     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.

AAccttiivvee ggrraabb

     A grab is active when the pointer or keyboard is actu
     ally owned by the single grabbing client.

AAnncceessttoorrss

     If W is an inferior of A, then A is an ancestor of W.

AAttoomm

     An atom is a unique ID corresponding to a string name.
     Atoms are used to identify properties, types, and
     selections.

BBaacckkggrroouunndd

     An _I_n_p_u_t_O_u_t_p_u_t 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.

BBaacckkiinngg ssttoorree

     When a server maintains the contents of a window, the
     pixels saved off screen are known as a backing store.












                             221155





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


BBiitt ggrraavviittyy

     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.

BBiitt ppllaannee

     When a pixmap or window is thought of as a stack of
     bitmaps, each bitmap is called a bit plane or plane.

BBiittmmaapp

     A bitmap is a pixmap of depth one.

BBoorrddeerr

     An _I_n_p_u_t_O_u_t_p_u_t 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.

BBuuttttoonn ggrraabbbbiinngg

     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.

BByyttee oorrddeerr

     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.

CChhiillddrreenn

     The children of a window are its first-level subwin
     dows.













                             221166





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


CClliieenntt

     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.

CClliippppiinngg rreeggiioonn

     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.

CCoolloorrmmaapp

     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.

CCoonnnneeccttiioonn

     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.

CCoonnttaaiinnmmeenntt

     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.










                             221177





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


CCoooorrddiinnaattee ssyysstteemm

     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.

CCuurrssoorr

     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.

DDeepptthh

     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.

DDeevviiccee

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

DDiirreeccttCCoolloorr

     _D_i_r_e_c_t_C_o_l_o_r 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.

DDiissppllaayy

     A server, together with its screens and input devices,
     is called a display.










                             221188





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


DDrraawwaabbllee

     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 _I_n_p_u_t_O_n_l_y window cannot be used as a source or des
     tination in a graphics operation.

EEvveenntt

     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.

EEvveenntt mmaasskk

     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.

EEvveenntt ssyynncchhrroonniizzaattiioonn

     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.

EEvveenntt pprrooppaaggaattiioonn

     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.

EEvveenntt ssoouurrccee

     The window the pointer is in is the source of a device-
     related event.

EExxppoossuurree eevveenntt

     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.




                             221199





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


EExxtteennssiioonn

     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.

FFooccuuss wwiinnddooww

     The focus window is another term for the input focus.

FFoonntt

     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.

GGCC, GGCCoonntteexxtt

     GC and gcontext are abbreviations for graphics context.

GGllyypphh

     A glyph is an image, typically of a character, in a
     font.

GGrraabb

     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.

GGrraapphhiiccss ccoonntteexxtt

     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.

GGrraavviittyy

     See bbiitt ggrraavviittyy and wwiinnddooww ggrraavviittyy.







                             222200





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


GGrraayySSccaallee

     _G_r_a_y_S_c_a_l_e can be viewed as a degenerate case of
     _P_s_e_u_d_o_C_o_l_o_r, 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 dynami
     cally.

HHoottssppoott

     A cursor has an associated hotspot that defines the
     point in the cursor corresponding to the coordinates
     reported for the pointer.

IIddeennttiiffiieerr

     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.

IInnffeerriioorrss

     The inferiors of a window are all of the subwindows
     nested below it: the children, the children's children,
     and so on.

IInnppuutt ffooccuuss

     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.

IInnppuutt mmaannaaggeerr

     Control over keyboard input is typically provided by an
     input manager client.

IInnppuuttOOnnllyy wwiinnddooww

     An _I_n_p_u_t_O_n_l_y window is a window that cannot be used for
     graphics requests.  _I_n_p_u_t_O_n_l_y windows are invisible and
     can be used to control such things as cursors, input
     event generation, and grabbing.  _I_n_p_u_t_O_n_l_y windows can
     not have _I_n_p_u_t_O_u_t_p_u_t windows as inferiors.






                             222211





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


IInnppuuttOOuuttppuutt wwiinnddooww

     An _I_n_p_u_t_O_u_t_p_u_t window is the normal kind of opaque win
     dow, used for both input and output.  _I_n_p_u_t_O_u_t_p_u_t win
     dows can have both _I_n_p_u_t_O_u_t_p_u_t and _I_n_p_u_t_O_n_l_y windows as
     inferiors.

KKeeyy ggrraabbbbiinngg

     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.

KKeeyybbooaarrdd ggrraabbbbiinngg

     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.

KKeeyyssyymm

     An encoding of a symbol on a keycap on a keyboard.

MMaappppeedd

     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.

MMooddiiffiieerr kkeeyyss

     Shift, Control, Meta, Super, Hyper, Alt, Compose,
     Apple, CapsLock, ShiftLock, and similar keys are called
     modifier keys.

MMoonnoocchhrroommee

     Monochrome is a special case of _S_t_a_t_i_c_G_r_a_y in which
     there are only two colormap entries.

OObbssccuurree

     A window is obscured if some other window obscures it.
     Window A obscures window B if both are viewable
     _I_n_p_u_t_O_u_t_p_u_t 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.






                             222222





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


OOcccclluuddee

     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 rect
     angle defined by the outside edges of B.  Note the dis
     tinction between occludes and obscures.  Also note that
     window borders are included in the calculation.

PPaaddddiinngg

     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.

PPaarreenntt wwiinnddooww

     If C is a child of P, then P is the parent of C.

PPaassssiivvee ggrraabb

     Grabbing a key or button is a passive grab.  The grab
     activates when the key or button is actually pressed.

PPiixxeell vvaalluuee

     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.

PPiixxmmaapp

     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.

PPllaannee

     When a pixmap or window is thought of as a stack of
     bitmaps, each bitmap is called a plane or bit plane.










                             222233





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


PPllaannee mmaasskk

     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.

PPooiinntteerr

     The pointer is the pointing device attached to the cur
     sor and tracked on the screens.

PPooiinntteerr ggrraabbbbiinngg

     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.

PPooiinnttiinngg ddeevviiccee

     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.

PPrrooppeerrttyy

     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.

PPrrooppeerrttyy lliisstt

     The property list of a window is the list of properties
     that have been defined for the window.

PPsseeuuddooCCoolloorr

     _P_s_e_u_d_o_C_o_l_o_r 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.








                             222244





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


RReeddiirreeccttiinngg ccoonnttrrooll

     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.

RReeppllyy

     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.

RReeqquueesstt

     A command to the server is called a request.  It is a
     single block of data sent over a connection.

RReessoouurrccee

     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.

RRGGBB vvaalluueess

     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.

RRoooott

     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.

RRoooott wwiinnddooww

     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.





                             222255





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


SSaavvee sseett

     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.

SSccaannlliinnee

     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.

SSccaannlliinnee oorrddeerr

     An image represented in scanline order contains scan
     lines ordered by increasing y coordinate.

SSccrreeeenn

     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.

SSeelleeccttiioonn

     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.




                             222266





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


SSeerrvveerr

     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.

SSeerrvveerr ggrraabbbbiinngg

     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.

SSiibblliinngg

     Children of the same parent window are known as sibling
     windows.

SSttaacckkiinngg oorrddeerr

     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.

SSttaattiiccCCoolloorr

     _S_t_a_t_i_c_C_o_l_o_r can be viewed as a degenerate case of _P_s_e_u_
     _d_o_C_o_l_o_r in which the RGB values are predefined and
     read-only.

SSttaattiiccGGrraayy

     _S_t_a_t_i_c_G_r_a_y can be viewed as a degenerate case of
     _G_r_a_y_S_c_a_l_e in which the gray values are predefined and
     read-only.  The values are typically linear or near-
     linear increasing ramps.

SSttiippppllee

     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.










                             222277





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


SSttrriinngg EEqquuiivvaalleennccee

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

TTiillee

     A pixmap can be replicated in two dimensions to tile a
     region.  The pixmap itself is also known as a tile.

TTiimmeessttaammpp

     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
     _C_u_r_r_e_n_t_T_i_m_e) is never generated by the server.  This
     value is reserved for use in requests to represent the
     current server time.

TTrruueeCCoolloorr

     _T_r_u_e_C_o_l_o_r can be viewed as a degenerate case of _D_i_r_e_c_t_
     _C_o_l_o_r 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.

TTyyppee

     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.







                             222288





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66


VViieewwaabbllee

     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.

VViissiibbllee

     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.

WWiinnddooww ggrraavviittyy

     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.

WWiinnddooww mmaannaaggeerr

     Manipulation of windows on the screen and much of the
     user interface (policy) is typically provided by a win
     dow manager client.

XXYYFFoorrmmaatt

     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.

ZZFFoorrmmaatt

     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.
















                             222299





XX PPrroottooccooll                                    XX1111,, RReelleeaassee 66



                     TTaabbllee ooff CCoonntteennttss


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 . . . . . . . . . . . . . . 122
Appendix B - Protocol Encoding . . . . . . . . . . . . . 150
Glossary . . . . . . . . . . . . . . . . . . . . . . . . 215
Index  . . . . . . . . . . . . . . . . . . . . . . . . . 230







































