6292 lines
158 KiB
XML
6292 lines
158 KiB
XML
<?xml version="1.0" encoding="UTF-8" ?>
|
||
<!DOCTYPE article
|
||
PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
|
||
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
|
||
|
||
<article id="lbx">
|
||
|
||
<articleinfo>
|
||
<title>Low Bandwidth X Extension</title>
|
||
<subtitle>X Consortium Standard</subtitle>
|
||
<authorgroup>
|
||
<author>
|
||
<firstname>D.</firstname>
|
||
<surname>Converse</surname>
|
||
</author>
|
||
<author>
|
||
<firstname>J.</firstname>
|
||
<surname>Fulton</surname>
|
||
</author>
|
||
<author>
|
||
<firstname>D.</firstname>
|
||
<surname>Lemke</surname>
|
||
</author>
|
||
<author>
|
||
<firstname>R.</firstname>
|
||
<surname>Mor</surname>
|
||
</author>
|
||
<author>
|
||
<firstname>K.</firstname>
|
||
<surname>Packard</surname>
|
||
</author>
|
||
<author>
|
||
<firstname>R.</firstname>
|
||
<surname>Tice</surname>
|
||
</author>
|
||
<author>
|
||
<firstname>D.</firstname>
|
||
<surname>Tonogai</surname>
|
||
</author>
|
||
</authorgroup>
|
||
<releaseinfo>Protocol Version 1.0</releaseinfo>
|
||
|
||
|
||
<legalnotice>
|
||
<para>
|
||
Copyright (c) 1996 X Consortium
|
||
</para>
|
||
<para>
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||
this software and associated
|
||
documentation files (the "Software"), to deal in the Software without
|
||
restriction, including without limitation
|
||
the rights to use, copy, modify, merge, publish, distribute, sublicense, and
|
||
sell copies of the Software,
|
||
and to permit persons to whom the Software is furnished to do so, subject to
|
||
the following conditions:
|
||
</para>
|
||
<para>
|
||
The above copyright notice and this permission notice shall be included in all
|
||
copies or substantial portions
|
||
of the Software.
|
||
</para>
|
||
<para>
|
||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X
|
||
CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||
</para>
|
||
<para>
|
||
Except as contained in this notice, the name of the X Consortium shall not be
|
||
used in advertising or otherwise
|
||
to promote the sale, use or other dealings in this Software without prior
|
||
written authorization from the
|
||
X Consortium.
|
||
|
||
|
||
</para>
|
||
</legalnotice>
|
||
|
||
</articleinfo>
|
||
|
||
<sect1 id='introduction'>
|
||
<title>Introduction</title>
|
||
|
||
<para>
|
||
Low Bandwidth X (LBX) is a network-transparent protocol for running X Window
|
||
System applications over transport channels whose bandwidth and latency are
|
||
significantly worse than that used in local area networks. It combines a
|
||
variety of caching and reencoding techniques to reduce the volume of data that
|
||
must be sent over the wire. It can be used with existing clients by placing a
|
||
proxy between the clients and server, so that the low bandwidth/high latency
|
||
communication occurs between the proxy and server.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
This extension was designed and implemented by Jim Fulton, David Lemke, Keith
|
||
Packard, and Dale Tonogai, all of Network Computing Devices (NCD). Chris Kent
|
||
Kantarjiev (Xerox PARC) participated in early design discussions. Ralph Mor (X
|
||
Consortium) designed and implemented additional sections. Donna Converse (X
|
||
Consortium) authored the protocol description and encoding from design notes
|
||
and the implementation. Ray Tice (X Consortium) resolved the open issues in the
|
||
design and specification. Bob Scheifler (X Consortium) helped out in many areas.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The extension name is "LBX".
|
||
</para>
|
||
|
||
|
||
</sect1>
|
||
<sect1 id='description'>
|
||
<title>Description</title>
|
||
|
||
<para>
|
||
The design center for LBX is to use a proxy as an intermediary between the
|
||
client and server. The proxy reencodes and compresses requests, events, replies
|
||
and errors, as well as the resulting data stream. Additionally, the proxy can
|
||
cache information from the server to provide low-latency replies to clients.
|
||
This reply generation by the proxy is known as short-circuiting. A proxy can
|
||
handle multiple clients for a given server, but does not prevent clients from
|
||
connecting directly to the server. The design allows the proxy to multiplex
|
||
multiple clients into a single data stream to the server.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Much of LBX is implemented as an extension. The compression and reencoding
|
||
changes can be isolated to the transport and dispatch portions of the server,
|
||
while short-circuiting requires minor changes to the server’s colormap and
|
||
property code.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
LBX employs several different compression and short-circuiting methods. Use of
|
||
these methods is negotiable, and in some cases, the algorithm used by a given
|
||
method is negotiable as well. LBX also provides for negotiation of extensions
|
||
to LBX.
|
||
</para>
|
||
|
||
|
||
<sect2 id='data_flow'>
|
||
<title>Data Flow</title>
|
||
|
||
<para>
|
||
The LBX data stream goes through a number of layers:
|
||
</para>
|
||
|
||
|
||
<orderedlist>
|
||
<listitem>
|
||
<para>Client requests</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>Read by LBX and potential byte-swapping</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>Request-specific compression</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>Potential byte swapping</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>Multiplexing of client request streams</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>Delta replacement</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>Stream compression</para>
|
||
</listitem>
|
||
</orderedlist>
|
||
|
||
<para>
|
||
Transport
|
||
</para>
|
||
|
||
<!-- FIXME: descending -->
|
||
<orderedlist>
|
||
<listitem>
|
||
<para>Stream decompression</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>Delta substitution</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>Demultiplexing of client request streams</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>Potential byte swapping</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>Reencoding</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>Request processing</para>
|
||
</listitem>
|
||
</orderedlist>
|
||
|
||
<para>
|
||
The reverse process occurs with X server replies, events, and errors.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='tags'>
|
||
<title>Tags</title>
|
||
|
||
<para>
|
||
Tags are used to support caching of large data items that are expected to be
|
||
queried multiple times. Such things as the keyboard map and font metrics are
|
||
often requested by multiple clients. Rather than send the data each time, the
|
||
first time the data is sent it includes a tag. The proxy saves this data, so
|
||
that subsequent requests can send only the tag to refer to that same data. The
|
||
different types of tags are used for connection information, keyboard maps,
|
||
modifier maps, fonts information and properties.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Tag usage is negotiated as a boolean in the <emphasis>
|
||
LbxStartProxy</emphasis>
|
||
message. The proxy controls how many tags are stored in the proxy. The server
|
||
may wish to observe the proxy’s InvalidateTag behavior to limit how many tags
|
||
are cached at any one time. Tagged data is not shared across types of tags, but
|
||
the number space used for the tag ids is. The tag ids are generated by the
|
||
server.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The X server keeps track of what tags are known to the proxy. The proxy can
|
||
invalidate a tag if no tag bearing replies of that type are pending. The proxy
|
||
sends an <emphasis>
|
||
LbxInvalidateTag</emphasis>
|
||
message to release the tagged data. The proxy must not invalidate connection
|
||
tags unless instructed to do so by the server.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the server wishes to discard tagged data, it must either have received an
|
||
<emphasis>
|
||
LbxInvalidateTag</emphasis>
|
||
request from the proxy or send an <emphasis>
|
||
LbxInvalidateTag</emphasis>
|
||
event to the proxy for that tag.
|
||
</para>
|
||
|
||
|
||
<sect3 id='tag_substitution_in_requests'>
|
||
<title>Tag Substitution in Requests</title>
|
||
|
||
<para>
|
||
Many substitution requests have a tag field, followed by fields marked
|
||
optional. For these requests, if the optional fields are present, the
|
||
data in them is stored in the indicated tag, unless the tag is 0. If
|
||
the optional fields are absent, the tag field indicates the tag that
|
||
contains the data for the "optional" fields.
|
||
</para>
|
||
|
||
|
||
</sect3>
|
||
<sect3 id='property_tags'>
|
||
<title>Property Tags</title>
|
||
|
||
<para>
|
||
Property data makes special use of tags. A common use of properties is for
|
||
inter-client communication. If both clients use the proxy, it is wasteful to
|
||
send the data to the server and then back, when the server may never need it.
|
||
<emphasis>
|
||
LbxChangeProperty</emphasis>
|
||
request does the same work as the core <emphasis>
|
||
ChangeProperty</emphasis>
|
||
request, but it does not send the data. The reply to this request contains a
|
||
tag id corresponding to the data. If the property information is used locally,
|
||
the server responds to <emphasis>
|
||
LbxGetProperty</emphasis>
|
||
with the tag, and the property data need never be sent to the server. If the
|
||
server does require the data, it can issue an <emphasis>
|
||
LbxQueryTag</emphasis>
|
||
message. The proxy can also send the data on at any time if it judges it
|
||
appropriate (i.e., when the wire goes idle). Since the proxy owns the property
|
||
data, it must not invalidate the tag before sending the data back to the server
|
||
via an <emphasis>
|
||
LbxTagData</emphasis>
|
||
request.
|
||
</para>
|
||
|
||
|
||
</sect3>
|
||
</sect2>
|
||
<sect2 id='short_circuiting'>
|
||
<title>Short-circuiting</title>
|
||
|
||
<para>
|
||
Short-circuiting is used to handle constant data. This includes atoms, color
|
||
name/RGB mappings, and <emphasis>
|
||
AllocColor</emphasis>
|
||
calls. Atoms and color name/RGB mappings stay constant for the life of the
|
||
server. <emphasis>
|
||
AllocColor</emphasis>
|
||
<emphasis>
|
||
</emphasis>
|
||
replies are constant for each colormap. Short-circuiting replaces round-trip
|
||
requests with one-way requests, and can sometimes use one in place of many.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Atoms are used heavily for ICCCM communication. Once the proxy knows the string
|
||
to atom mapping, it has no need to send subsequent requests for this atom to
|
||
the server.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Colorname/RGB mappings are constant, so once the proxy sees the response from
|
||
<emphasis>
|
||
LookupColor</emphasis>
|
||
, it need not forward any subsequent requests.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Clients often use the same color cells, so once a read-only color allocation
|
||
has occurred, the proxy knows what RGB values should be returned to the client.
|
||
The proxy doesn't need to forward any <emphasis>
|
||
AllocColor</emphasis>
|
||
requests it can resolve, but it must tell the server to modify the color
|
||
cell's reference count. <emphasis>
|
||
LbxIncrementPixel</emphasis>
|
||
is used to support this.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
For all three classes of short-circuiting, the proxy must still tell the server
|
||
a request has occurred, so that the request sequence numbers stay in sync. This
|
||
is done with <emphasis>
|
||
LbxModifySequence</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Sequence numbers cause the major complication with short-circuiting. X
|
||
guarantees that any replies, events or errors generated by a previous request
|
||
will be sent before those of a later request. This means that any requests that
|
||
can be handled by the proxy must have their reply sent after any previous
|
||
events or errors.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If a proxy’s applications do not require strict adherence to the X protocol
|
||
ordering of errors or events, a proxy might provide further optimization by
|
||
avoiding the overhead of maintaining this ordering, however, the resulting
|
||
protocol is not strictly X11 compliant.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='graphics_re_encoding'>
|
||
<title>Graphics Re-encoding</title>
|
||
|
||
<para>
|
||
The LBX proxy attempts to reencode <emphasis>PolyPoint</emphasis>,
|
||
<emphasis>PolyLine</emphasis>, <emphasis>PolySegment</emphasis>,
|
||
<emphasis>PolyRectangle</emphasis>, <emphasis>PolyArc</emphasis>,
|
||
<emphasis>FillPoly</emphasis>, <emphasis>PolyFillRectangle</emphasis>,
|
||
<emphasis>PolyFillArc</emphasis>, <emphasis>CopyArea</emphasis>,
|
||
<emphasis>CopyPlane</emphasis>, <emphasis>PolyText8</emphasis>,
|
||
<emphasis>PolyText16</emphasis>, <emphasis>ImageText8</emphasis>,
|
||
and <emphasis>ImageText16</emphasis> requests. If the request can be
|
||
reencoded, it may be replaced by an equivalent LBX form of the request.
|
||
The requests are reencoded by attempting to reduce 2-byte coordinate,
|
||
length, width and angle fields to 1 byte. Where applicable, the
|
||
coordinate mode is also converted to <emphasis>Previous</emphasis>
|
||
to improve the compressibility of the resulting data. In image requests,
|
||
the image data may also be compressed.
|
||
</para>
|
||
|
||
</sect2>
|
||
<sect2 id='motion_events'>
|
||
<title>Motion events</title>
|
||
|
||
<para>
|
||
To prevent clogging the wire with <emphasis>MotionNotify</emphasis>
|
||
events, the server and proxy work together to control the number
|
||
of events on the wire. This is done with the
|
||
<emphasis>LbxAllowMotion</emphasis>
|
||
request. The request adds an amount to an allowed motion count in
|
||
the server, which is kept on a per-proxy basis. Every motion notify
|
||
event sent to the proxy decrements the allowed motion counter. If
|
||
the allowed motion count is less than or equal to zero, motion
|
||
events not required by the X protocol definition are not sent to the
|
||
proxy. The allowed motion counter has a minimum value of -2^31.
|
||
</para>
|
||
|
||
</sect2>
|
||
<sect2 id='event_squishing'>
|
||
<title>Event Squishing</title>
|
||
|
||
<para>
|
||
In the core protocol, all events are padded as needed to be 32 bytes long. The
|
||
LBX extension reduces traffic by removing padding at the end of events, and
|
||
implying the event length from its type. This is known as squishing.
|
||
</para>
|
||
|
||
</sect2>
|
||
<sect2 id='master_client_'>
|
||
<title>Master Client </title>
|
||
|
||
<para>
|
||
When the initial X connection between the proxy and the server is converted to
|
||
LBX mode, the proxy itself becomes the master client. New client requests and
|
||
some tag messages are sent in the context of the master client.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='multiplexing_of_clients'>
|
||
<title>Multiplexing of Clients</title>
|
||
|
||
<para>
|
||
The LBX proxy multiplexes the data streams of all its clients into one stream,
|
||
and then splits them apart again when they are received. The <emphasis>
|
||
LbxSwitch</emphasis>
|
||
message is used to tell each end which client is using the wire at the time.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The server should process delta requests in the order that they appear on the
|
||
LBX connection. If the server does not maintain the interclient request order
|
||
for requests sent by the proxy, it must still obey the semantics implied by the
|
||
interclient request order so that the delta cache functions correctly.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The server can affect the multiplexing of clients by the proxy using the
|
||
<emphasis>
|
||
LbxListenToOne</emphasis>
|
||
and <emphasis>
|
||
LbxListenToAll</emphasis>
|
||
messages. This is useful during grabs, since the master connection can not be
|
||
blocked during grabs like other clients. The proxy is responsible for tracking
|
||
server grabs issued by its clients so that the proxy can multiplex the client
|
||
streams in an order executable by the server.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Replies must be ordered in the multiplexed data stream from the server to the
|
||
proxy such that the reply carrying tagged data precedes replies that refer to
|
||
that tagged data.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='swapping'>
|
||
<title>Swapping</title>
|
||
|
||
<para>
|
||
Swapping is handled as with any X extension, with one caveat. Since a proxy can
|
||
be supporting clients with different byte orders, and they all share the same
|
||
wire, the length fields of all messages between the server and proxy are
|
||
expressed in the proxy byte order. This prevents any problems with length
|
||
computation that may occur when clients are switched.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='delta_cache'>
|
||
<title>Delta cache</title>
|
||
|
||
<para>
|
||
LBX takes advantage of the fact that an X message may be very similar to one
|
||
that has been previously sent. For example, a <emphasis>
|
||
KeyPress</emphasis>
|
||
event may differ from a previous <emphasis>
|
||
KeyPress</emphasis>
|
||
event in just a few bytes. By sending just the bytes that differ (or
|
||
"deltas"), the number of bytes sent over the wire can be substantially reduced.
|
||
Delta compaction is used on requests being sent by the proxy as well as on
|
||
replies and events being sent by the server.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The server and the proxy each keep per-proxy request and response caches. The
|
||
response cache contains events, errors and replies. All messages are saved in
|
||
the appropriate delta cache if they are of an appropriate type and more than 8
|
||
bytes long but fit within the delta cache. The number of entries in the delta
|
||
cache and the maximum saved message size are negotiated in the <emphasis>
|
||
LbxStartProxy</emphasis>
|
||
request.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The LBX requests that are never stored in the request delta cache are the
|
||
<emphasis>
|
||
LbxQueryVersion</emphasis>
|
||
, <emphasis>
|
||
LbxStartProxy</emphasis>
|
||
, <emphasis>
|
||
LbxSwitch</emphasis>
|
||
, <emphasis>
|
||
LbxNewClient</emphasis>
|
||
, <emphasis>
|
||
LbxAllowMotion</emphasis>
|
||
, <emphasis>
|
||
LbxDelta</emphasis>
|
||
, <emphasis>
|
||
LbxQueryExtension</emphasis>
|
||
, <emphasis>
|
||
LbxPutImage</emphasis>
|
||
, <emphasis>
|
||
LbxGetImage</emphasis>
|
||
, <emphasis>
|
||
LbxBeginLargeRequest</emphasis>
|
||
, <emphasis>
|
||
LbxLargeRequestData</emphasis>
|
||
, <emphasis>
|
||
LbxEndLargeRequest</emphasis>
|
||
and <emphasis>
|
||
LbxInternAtoms</emphasis>
|
||
requests. The responses that are never stored in the response cache are
|
||
<emphasis>
|
||
LbxSwitchEvent</emphasis>
|
||
and <emphasis>
|
||
LbxDeltaResponse</emphasis>
|
||
. The message carried by a <emphasis>
|
||
delta </emphasis>
|
||
message is also cached, if it meets the other requirements. Messages after the
|
||
<emphasis>
|
||
LbxStartProxy</emphasis>
|
||
request are cached starting at index 0, and incrementing the index, modulo the
|
||
number of entries, thereafter. The request and response caches are
|
||
independently indexed.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the current message is cachable and the same length as a message in the
|
||
corresponding delta cache, a delta message may be substituted in place of the
|
||
original message in the protocol stream.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='stream_compression'>
|
||
<title>Stream Compression</title>
|
||
|
||
<para>
|
||
Before being passed down to the transport layer messages can be passed through
|
||
a general purpose data compressor. The choice of compression algorithm is
|
||
negotiated with <ulink url="lbx.htm#20870">See LbxStartProxy</ulink>. The proxy
|
||
and server are not required to support any specific stream compressor. As an
|
||
example, however, the X Consortium implementation of a ZLIB based compressor is
|
||
described below.
|
||
</para>
|
||
|
||
<note><para>
|
||
The XC-ZLIB compressor is presented with a simple byte stream - the X and LBX
|
||
message boundaries are not apparent. The data is broken up into fixed sized
|
||
blocks. Each block is compressed using zlib 1.0 (by Gailly & Adler), then a
|
||
two byte header is prepended, and then the entire packet is transmitted. The
|
||
header has the following information:
|
||
</para></note>
|
||
<para><programlisting>
|
||
out[0] = (length & 0xfff) >> 8 | ((compflag) ? 0x80 : 0);
|
||
out[1] = length & 0xff;
|
||
</programlisting></para>
|
||
|
||
</sect2>
|
||
<sect2 id='authentication_protocols'>
|
||
<title>Authentication Protocols</title>
|
||
|
||
<para>
|
||
The current version of LBX does not support multipass authentication protocols
|
||
for clients of the proxy. These authentication protocols return an <emphasis>
|
||
Authenticate</emphasis>
|
||
message in response to a connection setup request, and require additional
|
||
authentication data from the client after the <emphasis>
|
||
LbxNewClient</emphasis>
|
||
request, and before the reply to <emphasis>
|
||
LbxNewClient</emphasis>
|
||
. One example of such a protocol is XC-QUERY-SECURITY-1.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
</sect1>
|
||
<sect1 id='c_library_interfaces_'>
|
||
<title>C Library Interfaces </title>
|
||
|
||
<para>
|
||
The C Library routines for LBX are in the Xext library. The prototypes are
|
||
located in a file named "XLbx.h".
|
||
</para>
|
||
|
||
|
||
<sect2 id='application_library_interfaces'>
|
||
<title>Application Library Interfaces</title>
|
||
|
||
<para>
|
||
In a proxy environment, applications do not need to call these routines to take
|
||
advantage of LBX. Clients can, however, obtain information about the LBX
|
||
extension to the server using this interface. Use of this routine may be
|
||
altered when connected through a proxy, as described in <ulink
|
||
url="lbx.htm#33319">See C Library Interfaces</ulink>.
|
||
</para>
|
||
|
||
|
||
<sect3 id='xlbxqueryversion'>
|
||
<title>XLbxQueryVersion</title>
|
||
|
||
<para>
|
||
To determine the version of LBX supported by the X server, call <emphasis>
|
||
XLbxQueryVersion</emphasis>
|
||
.
|
||
</para>
|
||
|
||
<funcsynopsis>
|
||
<funcprototype>
|
||
<funcdef>Bool <function>XLbxQueryVersion</function></funcdef>
|
||
<paramdef>Display * <parameter>display</parameter></paramdef>
|
||
<paramdef>int * <parameter>major_version_return</parameter></paramdef>
|
||
<paramdef>int * <parameter>minor_version_return</parameter></paramdef>
|
||
</funcprototype>
|
||
</funcsynopsis>
|
||
|
||
<variablelist>
|
||
<varlistentry>
|
||
<term>display</term>
|
||
<listitem><para>Specifies the connection to the X server.</para></listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term>major_version_return</term>
|
||
<listitem><para>Returns the extension major version number.</para></listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term>minor_version_return</term>
|
||
<listitem><para>Returns the extension minor version number.</para></listitem>
|
||
</varlistentry>
|
||
</variablelist>
|
||
|
||
<para>
|
||
The <emphasis>
|
||
XLbxQueryVersion</emphasis>
|
||
function determines if the LBX extension is present. If the extension is not
|
||
present, <emphasis>
|
||
XLbxQueryVersion</emphasis>
|
||
returns <emphasis>
|
||
False</emphasis>
|
||
; otherwise, it returns <emphasis>
|
||
True</emphasis>
|
||
. If the extension is present, <emphasis>
|
||
XLbxQueryVersion</emphasis>
|
||
returns the major and minor version numbers of the extension as supported by
|
||
the X server.
|
||
</para>
|
||
|
||
|
||
</sect3>
|
||
</sect2>
|
||
<sect2 id='proxy_library_interfaces'>
|
||
<title>Proxy Library Interfaces</title>
|
||
|
||
<para>
|
||
The following interfaces are intended for use by the proxy.
|
||
</para>
|
||
|
||
<sect3 id='xlbxqueryextension'>
|
||
<title>XLbxQueryExtension</title>
|
||
|
||
<para>
|
||
To determine the dynamically assigned codes for the extension, use the Xlib
|
||
function <emphasis>
|
||
XQueryExtension</emphasis>
|
||
or the LBX function <emphasis>
|
||
XLbxQueryExtension</emphasis>
|
||
.</para>
|
||
|
||
|
||
<funcsynopsis>
|
||
<funcprototype>
|
||
<funcdef>Bool <function>XLbxQueryExtension</function></funcdef>
|
||
<paramdef>Display * <parameter>display</parameter></paramdef>
|
||
<paramdef>int * <parameter>major_opcode_return</parameter></paramdef>
|
||
<paramdef>int * <parameter>first_event_return</parameter></paramdef>
|
||
<paramdef>int * <parameter>first_error_return</parameter></paramdef>
|
||
</funcprototype>
|
||
</funcsynopsis>
|
||
|
||
<variablelist>
|
||
<varlistentry>
|
||
<term>display</term>
|
||
<listitem><para>Specifies the connection to the X server.</para></listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term>major_opcode_return</term>
|
||
<listitem><para>Returns the major opcode.</para></listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term>first_event_return</term>
|
||
<listitem><para>Returns the first event code.</para></listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term>first_error_return</term>
|
||
<listitem><para>Returns the first error code.</para></listitem>
|
||
</varlistentry>
|
||
</variablelist>
|
||
|
||
<para>
|
||
The <emphasis>
|
||
XLbxQueryExtension</emphasis>
|
||
function determines if the LBX extension is present. If the extension is not
|
||
present, <emphasis>
|
||
XLbxQueryExtension</emphasis>
|
||
returns <emphasis>
|
||
False</emphasis>
|
||
; otherwise, it returns <emphasis>
|
||
True</emphasis>
|
||
. If the extension is present, <emphasis>
|
||
XLbxQueryExtension</emphasis>
|
||
returns the major opcode for the extension to major_opcode_return, the base
|
||
event type code to first_event_return, and the base error code to
|
||
first_error_return; otherwise, the return values are undefined.
|
||
</para>
|
||
|
||
</sect3>
|
||
|
||
<sect3 id='xlbxgeteventbase'>
|
||
<title>XLbxGetEventBase</title>
|
||
<para>
|
||
To determine the base event type code, use the Xlib function <emphasis>
|
||
XQueryExtension</emphasis>
|
||
or the LBX function <emphasis>
|
||
XLbxGetEventBase</emphasis>.
|
||
</para>
|
||
|
||
|
||
<funcsynopsis>
|
||
<funcprototype>
|
||
<funcdef>int <function>XLbxGetEventBase</function></funcdef>
|
||
<paramdef>Display * <parameter>display</parameter></paramdef>
|
||
</funcprototype>
|
||
</funcsynopsis>
|
||
|
||
<variablelist>
|
||
<varlistentry>
|
||
<term>display</term>
|
||
<listitem><para>Specifies the connection to the X server.</para></listitem>
|
||
</varlistentry>
|
||
</variablelist>
|
||
|
||
<para>
|
||
The <emphasis>XLbxGetEventBase</emphasis>
|
||
function returns the base event type code if the extension is
|
||
present; otherwise, it returns -1.
|
||
</para>
|
||
|
||
</sect3>
|
||
</sect2>
|
||
</sect1>
|
||
|
||
|
||
<sect1 id='protocol'>
|
||
<title>Protocol</title>
|
||
|
||
<sect2 id='syntactic_conventions_and_common_types'>
|
||
<title>Syntactic Conventions and Common Types</title>
|
||
|
||
<para>
|
||
Please refer to the X Window System Protocol specification,
|
||
as this document uses the syntactic conventions established
|
||
there and references types defined there.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The following additional types are defined by this extension:
|
||
</para>
|
||
|
||
<literallayout>
|
||
<emphasis role='bold'>DIFFITEM</emphasis>
|
||
1 CARD8 offset
|
||
1 CARD8 diff
|
||
</literallayout>
|
||
|
||
<literallayout>
|
||
<emphasis role='bold'>LBXANGLE: CARD8 or 2 BYTE</emphasis>
|
||
where (in order of precedence):
|
||
(0 <= in <= A(95)) && !(in % A(5)) out = 0x5a + (in /
|
||
A(5))
|
||
A(105) <= in <= A(360) && !(in % A(15)) out = 0x67 +
|
||
(in / A(15))
|
||
-A(100) <= in <= -A(5) && !(in % A(5)) out = 0xa6 +
|
||
(in / A(5))
|
||
-A(360) < in <= -A(105) && !(in % A(15)) out = 0x98 +
|
||
(in / A(15))
|
||
-A(360) < in <= A(360) out[0] = in >> 8; out[1] = in
|
||
</literallayout>
|
||
|
||
<literallayout>
|
||
<emphasis role='bold'>LBXARC:</emphasis>
|
||
[x, y: LBXINT16,
|
||
width, height: LBXCARD16,
|
||
angle1, angle2: LBXANGLE]
|
||
</literallayout>
|
||
|
||
<para>
|
||
Within a list of arcs, after the first arc, x and y are
|
||
relative to the corresponding fields of the prior arc.
|
||
</para>
|
||
|
||
<literallayout>
|
||
<emphasis role='bold'>LBXCARD16: CARD8 or 2 BYTE</emphasis>
|
||
where:
|
||
0x0000 <= in < 0x00F0 CARD8
|
||
0x00F0 <= in < 0x10F0 out[0] = 0xF0 | ((in - 0xF0) >>
|
||
8)
|
||
out[1] = in - 0xF0
|
||
</literallayout>
|
||
|
||
<literallayout>
|
||
<emphasis role='bold'>LBXGCANDDRAWENT</emphasis>
|
||
[ gc-cache-index, drawable-cache-index: CARD4 ]
|
||
</literallayout>
|
||
|
||
<literallayout>
|
||
<emphasis role='bold'>LBXGCANDDRAWUPDATE</emphasis>
|
||
drawable: DRAWABLE /* present only if
|
||
<emphasis>drawable-cache-index</emphasis>
|
||
== 0 */
|
||
gc: GC] /* present only if <emphasis>gc-cache-index</emphasis> == 0 */
|
||
</literallayout>
|
||
|
||
<literallayout>
|
||
<emphasis role='bold'>LBXGCANDDRAWABLE</emphasis>
|
||
cache-entries: LBXGCANDDRAWENT
|
||
updates: LBXGCANDDRAWUPDATE
|
||
</literallayout>
|
||
|
||
<literallayout>
|
||
<emphasis role='bold'>LBXINT16</emphasis>: INT8 or 2 BYTE
|
||
where:
|
||
0xF790 <= in < 0xFF90 out[0] = 0x80 | (((in + 0x70) >>
|
||
8) & 0x0F)
|
||
out[1] = in + 0x70
|
||
0xFF90 <= in < 0x0080 CARD8
|
||
0x0080 <= in < 0x0880 out[0] = 0x80 | (((in - 0x80) >>
|
||
8) & 0x0F)
|
||
out[1] = in - 0x80
|
||
</literallayout>
|
||
|
||
<literallayout>
|
||
<emphasis role='bold'>LBXPINT16</emphasis>: CARD8 or 2 BYTE /* for
|
||
usually positive numbers */
|
||
where:
|
||
0xFE00 <= in < 0x0000 out[0] = 0xF0 | (((in + 0x1000)
|
||
>> 8) & 0x0F)
|
||
out[1] = in + 0x1000
|
||
0x0000 <= in < 0x00F0 CARD8
|
||
0x00F0 <= in < 0x0EF0 out[0] = 0xF0 | ((in - 0xF0) >>8)
|
||
out[1] = in - 0xF0
|
||
</literallayout>
|
||
|
||
<literallayout>
|
||
<emphasis role='bold'>LBXPOINT</emphasis>: [x, y: LBXINT16]
|
||
Within a list of points, after the first rectangle, x and y are
|
||
relative to the corresponding fields of the prior point.
|
||
</literallayout>
|
||
|
||
<literallayout>
|
||
<emphasis role='bold'>LBXRECTANGLE</emphasis>:
|
||
[x, y: LBXINT16,
|
||
width, height: LBXCARD16]
|
||
</literallayout>
|
||
|
||
<para>
|
||
Within a list of rectangles, after the first rectangle, x and
|
||
y are relative to the corresponding fields of the prior rectangle.
|
||
</para>
|
||
|
||
<para>
|
||
MASK: CARD8
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='errors'>
|
||
<title>Errors</title>
|
||
|
||
<para>
|
||
As with the X11 protocol, when a request terminates with an error,
|
||
the request has no side effects (that is, there is no partial execution).
|
||
</para>
|
||
|
||
|
||
<para>
|
||
There is one error, <emphasis>
|
||
LbxClient</emphasis>
|
||
. This error indicates that the client field of an LBX request was invalid, or
|
||
that the proxy’s connection was in an invalid state for a start or stop proxy
|
||
request.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='requests'>
|
||
<title>Requests</title>
|
||
|
||
<para>
|
||
There is one request that is expected to be used only by the client: <emphasis>
|
||
LbxQueryVersion</emphasis>
|
||
</para>
|
||
|
||
|
||
<para>
|
||
There is one request that is expected to be used by the client or the proxy:
|
||
<emphasis>
|
||
LbxQueryExtension</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The following requests are expected to be used only by the proxy, and are
|
||
instigated by the proxy: <emphasis>
|
||
LbxStartProxy</emphasis>
|
||
, <emphasis>
|
||
LbxStopProxy</emphasis>
|
||
, <emphasis>
|
||
LbxNewClient</emphasis>
|
||
, <emphasis>
|
||
LbxSwitch</emphasis>
|
||
, <emphasis>
|
||
LbxCloseClient</emphasis>
|
||
, <emphasis>
|
||
LbxModifySequence</emphasis>
|
||
, <emphasis>
|
||
LbxAllowMotion</emphasis>
|
||
, <emphasis>
|
||
LbxInvalidateTag</emphasis>
|
||
, <emphasis>
|
||
LbxTagData</emphasis>
|
||
and <emphasis>
|
||
LbxQueryTag</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
All other requests are sent by the proxy to the LBX server and are instigated
|
||
by reception of an X request from the client. They replace the X request.
|
||
</para>
|
||
|
||
|
||
<sect3 id='requests_initiated_by_the_proxy_or_by_the_client'>
|
||
<title>Requests Initiated by the Proxy or by the Client</title>
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxQueryVersion</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry>=>;</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>majorVersion: CARD16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>minorVersion: CARD16</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request returns the major and minor version numbers of the LBX protocol.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding of this request is on <ulink url="lbx.htm#34166">See
|
||
LbxQueryVersion</ulink>.
|
||
</para>
|
||
|
||
|
||
|
||
</sect3>
|
||
<sect3 id='requests_initiated_or_substituted_by_the_proxy'>
|
||
<title>Requests Initiated or Substituted by the Proxy</title>
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxQueryExtension</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
nbytes</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
name</emphasis>
|
||
: STRING8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry>=></entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>num-requests: CARD8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>present: BOOL</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>major-opcode: CARD8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>first-event: CARD8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>first-error: CARD8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>reply-mask: LISTofMASK /* optional */</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>event-mask:LISTofMASK /* optional */</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Alloc</emphasis>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request is identical to the <emphasis>
|
||
QueryExtension</emphasis>
|
||
request, with an additional field, and two optional additional fields. When
|
||
the client issues an <emphasis>
|
||
QueryExtension</emphasis>
|
||
request, the proxy will substitute an <emphasis>
|
||
LbxQueryExtension</emphasis>
|
||
request.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
This request determines if the named extension is present. If so, the major
|
||
opcode for the extension is returned, if it has one. Otherwise, zero is
|
||
returned. Any minor opcode and the request formats are specific to the
|
||
extension. If the extension involves additional event types, the base event
|
||
type code is returned. Otherwise, zero is returned. The format of events is
|
||
specific to the extension. If the extension involves additional error codes,
|
||
the base error code is returned. Otherwise, zero is returned. The format of
|
||
additional data in the errors is specific to the extension.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
In addition, the number of requests defined by the named extension is returned.
|
||
If the number of requests is nonzero, and if the information is available,
|
||
reply-mask and event-mask will be included in the reply. The reply-mask
|
||
represents a bit-wise one-to-one correspondence with the extension requests.
|
||
The least significant bit corresponds to the first request, and the next bit
|
||
corresponds to the next request, and so on. Each element in the list contains
|
||
eight meaningful bits, except for the last element, which contains eight or
|
||
fewer meaningful bits. Unused bits are not guaranteed to be zero. The bit
|
||
corresponding to a request is set if the request could generate a reply,
|
||
otherwise it is zero. In the same way, the event-mask represents a bit-wise
|
||
one-to-one correspondence with the extension requests. A bit is set if the
|
||
corresponding request could result in the generation of one or more extension
|
||
or X11 events. If reply-mask is present in the reply, event-mask will also be
|
||
present.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding of this request is on <ulink url="lbx.htm#37117">See
|
||
LbxQueryExtension</ulink>.
|
||
</para>
|
||
|
||
|
||
|
||
</sect3>
|
||
<sect3 id='control_requests_initiated_by_the_proxy'>
|
||
<title>Control Requests Initiated by the Proxy</title>
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxStartProxy</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
options</emphasis>
|
||
: LISTofOPTION</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry>=></entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>choices: LISTofCHOICE</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
LbxClient</emphasis>
|
||
, <emphasis>
|
||
Alloc</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry>where:</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>OPTION [optcode: CARD8,</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> len: OPTLEN,</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> option: (See <ulink
|
||
url="lbx.htm#35444">See StartProxy Options</ulink>) ]</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>CHOICE [optcode: CARD8,</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> len: OPTLEN,</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> choice: (See <ulink
|
||
url="lbx.htm#35444">See StartProxy Options</ulink>) ]</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
<!--
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> -->
|
||
|
||
|
||
<table frame='none'>
|
||
<title>StartProxy Options</title>
|
||
<tgroup cols='4'>
|
||
<colspec colsep='0'/>
|
||
<colspec colsep='0'/>
|
||
<colspec colsep='0'/>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry>optcode</entry>
|
||
<entry>option</entry>
|
||
<entry>choice</entry>
|
||
<entry>default</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry>delta-proxy</entry>
|
||
<entry>DELTAOPT</entry>
|
||
<entry>DELTACHOICE</entry>
|
||
<entry>entries=16, maxlen=64</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry>delta-server</entry>
|
||
<entry>DELTAOPT</entry>
|
||
<entry>DELTACHOICE</entry>
|
||
<entry>entries=16, maxlen=64</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry>stream-comp</entry>
|
||
<entry>LISTofNAMEDOPT</entry>
|
||
<entry>INDEXEDCHOICE</entry>
|
||
<entry>No Compression</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry>bitmap-comp</entry>
|
||
<entry>LISTofSTRING8</entry>
|
||
<entry>LISTofINDEXEDOPT</entry>
|
||
<entry>No Compression</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry>pixmap-comp</entry>
|
||
<entry>LISTofPIXMAPMETHOD</entry>
|
||
<entry>LISTofPIXMAPCHOICE</entry>
|
||
<entry>No Compression</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry>use-squish</entry>
|
||
<entry>BOOL</entry>
|
||
<entry>BOOL</entry>
|
||
<entry>True</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry>use-tags</entry>
|
||
<entry>BOOL</entry>
|
||
<entry>BOOL</entry>
|
||
<entry>True</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry>colormap</entry>
|
||
<entry>LISTofSTRING8</entry>
|
||
<entry>INDEXEDCHOICE</entry>
|
||
<entry>No Colormap Grabbing</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry>extension</entry>
|
||
<entry>NAMEDOPT</entry>
|
||
<entry>INDEXEDCHOICE</entry>
|
||
<entry>Extension Disabled</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
<!-- </entry>
|
||
</row>
|
||
-->
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> </entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>DELTAOPT [minN, maxN, prefN: CARD8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> minMaxMsgLen, maxMaxMsgLen, prefMaxMsgLen:
|
||
CARD8]</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>DELTACHOICE [entries, maxlen:
|
||
CARD8]</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>INDEXEDCHOICE [index: CARD8,</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> data: LISTofBYTE]</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>INDEXEDOPT [index, opcode: CARD8]</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>NAMEDOPT [name: STRING8,</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> detail: LISTofBYTE]</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>OPTLEN 1 or 3 CARD8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> where:</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> (0 < in <= 0xFF): out =
|
||
in</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> (0 <= in<= 0xFFFF): out[0] =
|
||
0; out[1] = in >> 8; out[2] = in& 0xFF;</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>PIXMAPMETHOD [name: STRING8,</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> format-mask: BITMASK,</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> depths: LISTofCARD8]</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>PIXMAPCHOICE [index, opcode: CARD8,</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> format-mask: BITMASK,</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> depths: LISTofCARD8]</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'></entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request negotiates LBX protocol options, and switches the proxy-server
|
||
connection from X11 protocol to LBX protocol.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The proxy gives the preferred protocol options in the request. The server
|
||
chooses from the given options and informs the proxy which to use. The options
|
||
may be listed in any order, and the proxy may choose which options to
|
||
negotiate. If an option is not successfully negotiated, the default is used.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The server delta cache and proxy delta caches can be configured for number of
|
||
entries, and the length of entries. (See <ulink url="lbx.htm#22595">See Delta
|
||
cache</ulink> for details.) The delta caches are configured using the <emphasis>
|
||
delta-server</emphasis>
|
||
and <emphasis>
|
||
delta-proxy</emphasis>
|
||
options. To configure a cache, the proxy sends the minimum, maximum and
|
||
preferred values for the number of cache entries, (<emphasis>
|
||
minN, maxN, prefN</emphasis>
|
||
), and the length of the cache entries, (<emphasis>
|
||
minMaxMsgLen, maxMaxMsgLen, prefMaxMsgLen</emphasis>
|
||
). The server’s reply fields, <emphasis>
|
||
entries</emphasis>
|
||
and <emphasis>
|
||
maxlen</emphasis>
|
||
, contains the values to use. These values must be within the ranges specified
|
||
by the proxy. The server may also specify an <emphasis>
|
||
entries</emphasis>
|
||
value of 0 to disable delta caching. The cache entry lengths are specified in
|
||
units of 4 bytes.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The stream compression algorithm is selected using the <emphasis>
|
||
stream-comp </emphasis>
|
||
option. (Stream compression is described in <ulink url="lbx.htm#11596">See
|
||
Stream Compression</ulink>.) Each algorithm has a name that follows the naming
|
||
conventions in <ulink url="lbx.htm#13570">See Algorithm Naming</ulink>. To
|
||
negotiate using the stream-comp option, the proxy lists its available
|
||
compressors. For each candidate algorithm, the proxy sends the name in the
|
||
<emphasis>
|
||
name</emphasis>
|
||
field, and uses the <emphasis>
|
||
detail</emphasis>
|
||
field to send any additional data specific to each compression algorithm. The
|
||
reply contains a 0-based index into the list of algorithms to indicate which
|
||
algorithm to use, followed by data specific to that algorithm.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Bitmap compression is negotiated using the <emphasis>
|
||
bitmap-comp</emphasis>
|
||
option. The proxy sends a list of names of available algorithms, and the
|
||
server reply lists the algorithms to use. For each bitmap algorithm in the
|
||
reply, a 0-based index into the list of algorithms indicates the algorithm, and
|
||
the <emphasis>
|
||
opcode</emphasis>
|
||
field gives the value for use in requests. The algorithm names follow the
|
||
conventions in <ulink url="lbx.htm#13570">See Algorithm Naming</ulink>.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Pixmap compression is negotiated using the <emphasis>
|
||
pixmap-comp</emphasis>
|
||
option. The proxy sends a list of available algorithms. For each algorithm,
|
||
the list includes, the name, a bitmask of supported formats, and a list of
|
||
depths that the format supports. The server reply lists the algorithms to use.
|
||
For each pixmap algorithm in the reply, the reply contains a 0-based index into
|
||
the list of proxy algorithms, the opcode to use in requests when referring to
|
||
this algorithm, a mask of valid formats, and a list of valid depths. Algorithm
|
||
names follow the conventions in <ulink url="lbx.htm#13570">See Algorithm
|
||
Naming</ulink>.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Squishing is negotiated using the use-squish option. If the proxy desires
|
||
squishing, it sends a true value. The reply from the server indicates whether
|
||
to do squishing, and will indicate squishing only if <emphasis>
|
||
use-squish</emphasis>
|
||
is set to true in the request.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Tag caching, described in <ulink url="lbx.htm#11018">See Tags</ulink>, is
|
||
negotiated using the use-tag option. If the proxy desires tag caching, it sends
|
||
a true value. The reply from the server indicates whether to do tag caching,
|
||
and will demand caching only if <emphasis>
|
||
use-tag</emphasis>
|
||
is set to true in the request.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The colormap option is used to negotiate what color matching algorithm will be
|
||
used by the proxy when the proxy uses the <emphasis>
|
||
LbxAllocColor</emphasis>
|
||
request to allocate pixels in a grabbed colormap. To negotiate using the
|
||
colormap option, the proxy lists the names of available colormap algorithms.
|
||
The choice in the reply contains a 0-based index into the list of algorithms to
|
||
indicate which algorithm to use, followed by data specific to that algorithm.
|
||
If no colormap algorithm is successfully negotiated, then the <emphasis>
|
||
LbxAllocColor</emphasis>
|
||
, <emphasis>
|
||
LbxGrabCmap</emphasis>
|
||
, and <emphasis>
|
||
LbxReleaseCmap</emphasis>
|
||
requests will not be used.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The extension option is used to control extensions to LBX. These extensions
|
||
may, for example, enable other types of compression. To negotiate an extension,
|
||
the name of the extension is sent, followed by any data specific to that
|
||
extension. The extension name follows the conventions in <ulink
|
||
url="lbx.htm#13570">See Algorithm Naming</ulink>. The extension option may
|
||
occur multiple times in the start proxy message, since multiple extensions can
|
||
be negotiated. The reply to an extension option contains the zero-based index
|
||
of the extension option, as counted in the <emphasis>
|
||
LbxStartProxy</emphasis>
|
||
message. This index is followed by extension-specific information. The server
|
||
does not respond to extensions it does not recognize.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
An <emphasis>
|
||
LbxClient</emphasis>
|
||
error is returned when a client which is already communicating through an LBX
|
||
proxy to the X server sends a <emphasis>
|
||
LbxStartProxy</emphasis>
|
||
request.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#27452">See
|
||
LbxStartProxy</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxStopProxy</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
LbxClient</emphasis>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request terminates the connection between the proxy and X server, and
|
||
terminates any clients connected through the proxy.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#23471">See
|
||
LbxStopProxy</ulink>.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
An <emphasis>
|
||
LbxClient</emphasis>
|
||
error is returned if the requesting client is not an LBX proxy.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxNewClient</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
byte-order</emphasis>
|
||
: CARD8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
client-id</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
protocol-major-version</emphasis>
|
||
: CARD16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
protocol-minor-version:</emphasis>
|
||
CARD16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
authorization-protocol-name</emphasis>
|
||
: STRING8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
authorization-protocol-data</emphasis>
|
||
: STRING8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry>=></entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>Core X reply (if connection is rejected)</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> </entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>OR</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> </entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>success: BOOL</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>change-type: {NoDeltas, NormalClientDeltas,
|
||
AppGroupDeltas}</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>protocol-major-version: CARD16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>protocol-minor-version: CARD16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>tag-id: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>length: CARD16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>connection-data: CONINFO or CONDIF or
|
||
CONDIFROOT</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> </entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>where:</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>CONINFO: (the "additional data"
|
||
portion of the core connection reply for successes)</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>CONDIF: [resource-id-base: CARD32,</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> root-input-masks: LISTofSETofEVENT]</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>CONDIFROOT: [resource-id-base:
|
||
CARD32,</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> root: WINDOW</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> root-visual: VISUALID</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> default-colormap: COLORMAP</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> white-pixel, black-pixel: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> root-input-masks: LISTofSETofEVENT]</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
Errors: LbxClient, Alloc
|
||
</para>
|
||
|
||
|
||
<para>
|
||
This request, which is sent by the proxy over the control connection, creates a
|
||
new virtual connection to the server.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Much of the information in the <emphasis>
|
||
LbxNewClient</emphasis>
|
||
request and reply is identical to the connection setup and reply information
|
||
in the core X protocol.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
For the <emphasis>
|
||
LbxNewClient</emphasis>
|
||
request, the field unique to LBX is client-id. For the <emphasis>
|
||
LbxNewClient</emphasis>
|
||
reply, <emphasis>
|
||
tag-id</emphasis>
|
||
and <emphasis>
|
||
change-type</emphasis>
|
||
are fields unique to LBX, and the contents of connection-data may be different
|
||
in LBX from the core X protocol (see below).
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The proxy assigns each virtual connection a unique identifier using the
|
||
<emphasis>
|
||
client-id</emphasis>
|
||
field in the <emphasis>
|
||
LbxNewClient</emphasis>
|
||
request. This client-id is used in the LBX protocol to specify the current
|
||
client (see the <emphasis>
|
||
LbxSwitch</emphasis>
|
||
request and the <emphasis>
|
||
LbxSwitchEvent</emphasis>
|
||
). client-id 0 is reserved for the proxy control connection. An <emphasis>
|
||
LbxClient</emphasis>
|
||
error will result if the <emphasis>
|
||
LbxNewClient</emphasis>
|
||
request contains a client-id of 0 or an already in use client-id.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the server rejects this new virtual connection, the server sends a core X
|
||
connection failure reply to the proxy. The current version of LBX does not
|
||
support the return of an <emphasis>
|
||
Authenticate</emphasis>
|
||
reply.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the <emphasis>
|
||
change-type</emphasis>
|
||
field is set to <emphasis>
|
||
NoDeltas</emphasis>
|
||
, then <emphasis>
|
||
connection-data</emphasis>
|
||
is sent using the CONINFO structure, which is identical to the additional data
|
||
of the core connection reply. If the <emphasis>
|
||
tag-id</emphasis>
|
||
is non-zero, then the connection-data is stored by the proxy using this tag
|
||
value. Tagged connection data must be stored by the proxy, and can not be
|
||
invalidated by the proxy until an <emphasis>
|
||
LbxInvalidateTag</emphasis>
|
||
event is received for that tag.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
When the <emphasis>
|
||
change-type</emphasis>
|
||
field is not set to <emphasis>
|
||
NoDeltas</emphasis>
|
||
, then connection data is sent as changes against connection information
|
||
previously sent to the proxy. The <emphasis>
|
||
tag-id</emphasis>
|
||
field, if non-zero, has the tag of the previously sent data to apply the
|
||
changes to. A zero tag-id indicates that the changes are with respect to the
|
||
connection information sent when the proxy connected to the server.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the <emphasis>
|
||
change-type</emphasis>
|
||
field is set to <emphasis>
|
||
NormalClientDeltas</emphasis>
|
||
, then <emphasis>
|
||
connection-data</emphasis>
|
||
is sent using the CONDIF structure. The values in the CONDIF structure are
|
||
substituted for the identically named fields of the connection information for
|
||
the new connection.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the <emphasis>
|
||
change-type</emphasis>
|
||
field is set to <emphasis>
|
||
AppGroupDeltas</emphasis>
|
||
, then <emphasis>
|
||
connection-data</emphasis>
|
||
is sent using the CONDIFROOT structure. The <emphasis>
|
||
root</emphasis>
|
||
, <emphasis>
|
||
root-visual</emphasis>
|
||
, and <emphasis>
|
||
default-colormap</emphasis>
|
||
fields, when nonzero, are substituted for the corresponding fields in the
|
||
reference connection information. The <emphasis>
|
||
white-pixel</emphasis>
|
||
and <emphasis>
|
||
black-pixel</emphasis>
|
||
fields are substituted only when the <emphasis>
|
||
default-colormap</emphasis>
|
||
field of the reply is non-zero. When <emphasis>
|
||
default-colormap</emphasis>
|
||
field of the reply is zero, so are <emphasis>
|
||
white-pixel</emphasis>
|
||
and <emphasis>
|
||
black-pixel</emphasis>
|
||
. The first entry in the <emphasis>
|
||
root-input-masks</emphasis>
|
||
field is the current-input-mask for the default root window. The remaining
|
||
entries in <emphasis>
|
||
root-input-masks</emphasis>
|
||
are input masks for non-video screens, as defined by the X Print Extension.
|
||
The number of non-video screens is one less than the number of entries in
|
||
<emphasis>
|
||
root-input-masks</emphasis>
|
||
. These screens are at the end of screen list in the reference connection
|
||
information.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#15166">See The
|
||
description of this request is on page 13.</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxCloseClient</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
client</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
LbxClient</emphasis>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This requests the server to close down the connection represented by the
|
||
specified proxy’s client identifier. If the specified client wasn’t
|
||
previously registered with the server by a <emphasis>
|
||
LbxNewClient</emphasis>
|
||
request, the server will send the <emphasis>
|
||
LbxClient</emphasis>
|
||
error.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#21121">See The
|
||
description of this request is on page 12.</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxSwitch</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
client</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
LbxClient</emphasis>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request causes the X server to treat subsequent requests as being from a
|
||
connection to the X server represented by the specified client identifier.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the client making the request is not the proxy, or if the client identifier
|
||
sent in the request was not previously sent in a <emphasis>
|
||
LbxNewClient</emphasis>
|
||
request, an <emphasis>
|
||
LbxClient</emphasis>
|
||
error is returned.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#36790">See
|
||
LbxSwitch</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxSync</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry>=></entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
The sync request causes the server to send a reply when all requests before the
|
||
sync request have been processed.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this client is on <ulink url="lbx.htm#21186">See
|
||
LbxSync</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxModifySequence</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
adjust</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: None</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request advances the sequence number of the virtual client connection by
|
||
the specified amount. The proxy sends the <emphasis>
|
||
LbxModifySequence</emphasis>
|
||
request to the server when it replies to a client request without forwarding
|
||
the client request on to the X server.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this client is on <ulink url="lbx.htm#10940">See The
|
||
description of this request is on page 13.</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxAllowMotion</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
num</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: None</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request controls the delivery of optional motion notify events, as
|
||
described in <ulink url="lbx.htm#15503">See Motion events</ulink>. The num
|
||
field specifies an increase in the allowed number of motion notify events sent.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#11897">See The
|
||
description of this request is on page 14.</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxInvalidateTag</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
tag</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
The LBX proxy sends this notification to the X server when it refuses to store
|
||
tagged data, or when it releases tagged data which was previously stored and
|
||
which was not invalidated by a notification from the X server.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#37545">See
|
||
LbxInvalidateTag</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxTagData</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
tag</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
real-length</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
data</emphasis>
|
||
: LISTofBYTE</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request specifies the data associated with a previously assigned tag. It
|
||
is sent in two circumstances: in response to receiving a <emphasis>
|
||
SendTagDataEvent</emphasis>
|
||
, and spontaneously, when the proxy must rely on the server to store data which
|
||
was not previously received from the server. The data is carried in the byte
|
||
order and structure as would have originally been sent in the core protocol
|
||
request.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#37174">See
|
||
LbxTagData</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxGrabCmap</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
cmap</emphasis>
|
||
: Colormap </entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry>=></entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
smart-grab</emphasis>
|
||
: BOOL</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
large-pixel: </emphasis>
|
||
BOOL /* optional */</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
auto-release: </emphasis>
|
||
BOOL /* optional */</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
three-channels</emphasis>
|
||
: BOOL /* optional */</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
bits-per-rgb: </emphasis>
|
||
CARD4 /* optional */</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
cells</emphasis>
|
||
: LISTofCHAN /* optional */</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> </entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>where:</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>CHAN: LISTofLBXPIXEL</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>LBXPIXEL: PIXELPRIVATE or PIXELPRIVATERANGE
|
||
or </entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> PIXELALLOC or PIXELALLOCRANGE </entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>PIXEL: CARD8 or CARD16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>PIXELPRIVATE: [ pixel: PIXEL ]</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>PIXELPRIVATERANGE: [ first-pixel,
|
||
last-pixel: PIXEL]</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>PIXELALLOC: [ pixel: PIXEL,</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> color: COLORSINGLE or COLORTRIPLE]</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>PIXELALLOCRANGE: [ first-pixel,
|
||
last-pixel: PIXEL,</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> colors: LISTofCOLORSINGLE or
|
||
LISTofCOLORTRIPLE]</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>COLORSINGLE: [ value: CARD8 or CARD16
|
||
]</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>COLORTRIPLE: [ r, g, b:
|
||
COLORSINGLE]</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Colormap</emphasis>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request asks the server for control of allocating new colormap cells in
|
||
the specified colormap. The server grants control by replying to this request.
|
||
If no changes have occurred since the last time this proxy grabbed this
|
||
colormap, then the <emphasis>
|
||
smart-grab</emphasis>
|
||
field of the reply is set to true, and the optional fields are not sent.
|
||
Otherwise, the current contents of the colormap are placed in the reply, as
|
||
described later in this section.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Once the proxy has received the reply, it can use the <emphasis>
|
||
LbxAllocColor</emphasis>
|
||
request to allocate new colormap cells without the performance penalty of
|
||
round trips. The proxy is still permitted to use the normal colormap and
|
||
<emphasis>
|
||
LbxIncrementPixel</emphasis>
|
||
requests while the colormap is grabbed. The grab is valid across all virtual
|
||
connections of the proxy.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
LbxGrabCmap</emphasis>
|
||
request is limited to colormaps for the visual types negotiated as part of the
|
||
colormap algorithm negotiation in the start proxy request at connection setup.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The server and other proxies may not allocate new colormap cells in the
|
||
colormap while the colormap is grabbed by this proxy. If the server or another
|
||
proxy needs to allocate new colormap cells, the server sends a Lbx<emphasis>
|
||
ReleaseCmap</emphasis>
|
||
event to the proxy holding the grab, which then issues an <emphasis>
|
||
LbxReleaseCmap</emphasis>
|
||
request.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The server and other proxies may free colormap cells in a colormap grabbed by a
|
||
proxy. The server will send an <emphasis>
|
||
LbxFreeCells</emphasis>
|
||
event to the proxy that currently has the colormap grabbed when the cell
|
||
reference count reaches 0.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the colormap is a of a static visual type, such as <emphasis>
|
||
StaticGray</emphasis>
|
||
, <emphasis>
|
||
StaticColor</emphasis>
|
||
, <emphasis>
|
||
GrayScale</emphasis>
|
||
, or <emphasis>
|
||
TrueColor</emphasis>
|
||
, then the proxy’s grab is immediately released by the server, and the proxy
|
||
must use <emphasis>
|
||
LbxIncrementPixel</emphasis>
|
||
requests in place of <emphasis>
|
||
LbxAllocColor</emphasis>
|
||
requests for this colormap.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the cmap field does not refer to a valid colormap or the colormap is already
|
||
grabbed by this proxy then a <emphasis>
|
||
Colormap</emphasis>
|
||
error is generated.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The reply describes the contents of the colormap via several arguments and a
|
||
descriptive list containing one or three channels, with each channel describing
|
||
allocations in the colormap.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
large-pixel</emphasis>
|
||
argument, if True, specifies that PIXEL indices will be listed as CARD16
|
||
quantities instead of CARD8. The<emphasis>
|
||
auto-release</emphasis>
|
||
field, if True, indicates that this colormap is of a static visual type and
|
||
the proxy’s grab is immediately released by the server.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
three-channels</emphasis>
|
||
is False, a single channel is enclosed and color values are described using
|
||
COLORTRIPLE, which has fields for red, green and blue. A single channel is used
|
||
when the visual type is not <emphasis>
|
||
DirectColor</emphasis>
|
||
or <emphasis>
|
||
TrueColor</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
three-channels</emphasis>
|
||
is True, separate red, green and blue channel lists are enclosed, for
|
||
describing a <emphasis>
|
||
DirectColor</emphasis>
|
||
or <emphasis>
|
||
TrueColor</emphasis>
|
||
colormap. Color values for entries in each channel are sent using COLORSINGLE
|
||
and the corresponding PIXEL value refers to the RGB subfield of the current
|
||
channel, as defined by the corresponding red-mask, green-mask and blue-mask of
|
||
the visual.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
bits-per-rgb</emphasis>
|
||
value is one less than the bits-per-rgb-value field of the visual that the
|
||
colormap belongs to. If the value is 7 or less, then COLORSINGLE values in the
|
||
descriptive list are sent using CARD8 fields. Otherwise these values are sent
|
||
using CARD16 fields.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The list describing current colormap allocations contains entries of the
|
||
following types:
|
||
</para>
|
||
|
||
|
||
<para>
|
||
An LBXPIXELPRIVATE entry indicates that the pixel in the <emphasis>
|
||
pixel </emphasis>
|
||
field is unavailable for allocation.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
An LBXPIXELPRIVATERANGE entry indicates that a contiguous range of pixels are
|
||
unavailable for allocation. The range is <emphasis>
|
||
first-pixel</emphasis>
|
||
to <emphasis>
|
||
last-pixel</emphasis>
|
||
, and includes <emphasis>
|
||
last-pixel</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
An LBXPIXELALLOC entry indicates that the pixel in the <emphasis>
|
||
pixel </emphasis>
|
||
field is allocated as a read-only pixel. The <emphasis>
|
||
color</emphasis>
|
||
field carries the color information of the pixel.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
An LBXPIXELALLOCRANGE entry indicates that a contiguous range of pixels are
|
||
allocated as read-only. The range starts <emphasis>
|
||
first-pixel</emphasis>
|
||
to <emphasis>
|
||
last-pixel</emphasis>
|
||
, and includes <emphasis>
|
||
last-pixel</emphasis>
|
||
. These fields are followed by a list of COLORSINGLE or COLORTRIPLE, depending
|
||
on the value of <emphasis>
|
||
three-channels</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
A NEXTCHANNEL entry indicates that the next channel of the colormap will be
|
||
described.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
A LISTEND entry indicates the end of the colormap description.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
All pixels not described in the reply are unallocated.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#17198">See
|
||
LbxGrabCmap</ulink>.
|
||
</para>
|
||
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxReleaseCmap</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
cmap</emphasis>
|
||
: Colormap</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request releases the specified grabbed colormap. If the <emphasis>
|
||
cmap</emphasis>
|
||
field does not refer to a colormap, a <emphasis>
|
||
BadColormap</emphasis>
|
||
error is produced.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The proxy must remember the state of the colormap when the <emphasis>
|
||
LbxReleaseCmap</emphasis>
|
||
request is issued if this proxy may at some future time issue another
|
||
<emphasis>
|
||
LbxGrabCmap</emphasis>
|
||
request on this colormap before the state of the colormap changes.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#14796">See
|
||
LbxReleaseCmap</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxInternAtoms</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
count</emphasis>
|
||
: CARD16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
names: LISTofSTRING8</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry>=></entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
atoms</emphasis>
|
||
: LISTofATOM</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Alloc</emphasis>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request allows the proxy to intern a group of atoms in a single round
|
||
trip. The server will create any atoms that do not exist.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#34140">See
|
||
LbxInternAtoms</ulink>.
|
||
</para>
|
||
|
||
|
||
|
||
</sect3>
|
||
<sect3 id='substitution_requests'>
|
||
<title>Substitution Requests</title>
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxAllocColor</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
cmap</emphasis>
|
||
: Colormap</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
pixel</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
red</emphasis>
|
||
, <emphasis>
|
||
green</emphasis>
|
||
, <emphasis>
|
||
blue</emphasis>
|
||
: CARD16</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request is sent by a proxy that has given colormap grabbed to allocate a
|
||
new read-only cell in the colormap. The proxy may substitute this request for
|
||
the core <emphasis>
|
||
AllocColor</emphasis>
|
||
and <emphasis>
|
||
AllocNamedColor</emphasis>
|
||
requests.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
pixel</emphasis>
|
||
field identifies the colormap cell to allocate. The <emphasis>
|
||
red</emphasis>
|
||
, <emphasis>
|
||
green</emphasis>
|
||
, and <emphasis>
|
||
blue</emphasis>
|
||
fields are the hardware specific color values of the corresponding fields of
|
||
the core <emphasis>
|
||
AllocColor</emphasis>
|
||
request. The mapping to hardware specific colormap values by the proxy is
|
||
performed using the color algorithm negotiated by <emphasis>
|
||
LbxStartProxy</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
For colormaps of static visual types, the <emphasis>
|
||
LbxIncrementPixel</emphasis>
|
||
request is used instead of LBX <emphasis>
|
||
AllocColor</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the <emphasis>
|
||
cmap</emphasis>
|
||
field does not identify a grabbed colormap then a <emphasis>
|
||
BadAccess</emphasis>
|
||
error is produced. If the <emphasis>
|
||
pixel</emphasis>
|
||
field refers to a read-write entry, or the pixel field refers to a pixel
|
||
outside of the range of this colormap, a <emphasis>
|
||
BadAlloc</emphasis>
|
||
error is produced.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#28429">See
|
||
LbxAllocColor</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxIncrementPixel</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
cmap</emphasis>
|
||
: COLORMAP</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
pixel</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: None</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request replaces the <emphasis>
|
||
AllocColor</emphasis>
|
||
request for read-only pixels currently allocated for the current client. If
|
||
the visual type of the colormap is of a static type, this request may be used
|
||
on currently unallocated pixels. The colormap is not required to be grabbed to
|
||
use this request.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#38053">See The
|
||
description of this request is on page 14.</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxDelta</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
count</emphasis>
|
||
: CARD8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
cache-index</emphasis>
|
||
: CARD8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
diffs</emphasis>
|
||
: LISTofDIFFITEM</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request contains a minimal amount of information relative to a similar
|
||
prior request. The information is in the form of a difference comparison to a
|
||
prior request. The prior request is specified by an index to a cache,
|
||
independently maintained by both the proxy and the server.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#39838">See The
|
||
description of this request is on page 18.</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxGetModifierMapping</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry>=></entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
keyspermod</emphasis>
|
||
: CARD8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
tag</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
keycodes</emphasis>
|
||
: LISTofKEYCODE /* optional */</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request is identical to the core <emphasis>
|
||
GetModifierMapping</emphasis>
|
||
request, with the addition of a tag being returned in the reply. See <ulink
|
||
url="lbx.htm#26534">See Tag Substitution in Requests</ulink> for a description
|
||
of the <emphasis>
|
||
tag</emphasis>
|
||
field and optional fields.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#40057">See
|
||
LbxGetModifierMapping</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxGetKeyboardMapping</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
firstKeyCode</emphasis>
|
||
: KEYCODE</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
count</emphasis>
|
||
: CARD8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry>=></entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
keysperkeycode</emphasis>
|
||
: CARD8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
tag</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
keysyms</emphasis>
|
||
: LISTofKEYSYM /* optional */</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Value</emphasis>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request is identical to the X <emphasis>
|
||
GetKeyboardMapping</emphasis>
|
||
protocol request, with the addition that a tag is returned in the reply. See
|
||
<ulink url="lbx.htm#26534">See Tag Substitution in Requests</ulink> for a
|
||
description of the <emphasis>
|
||
tag</emphasis>
|
||
field and optional fields.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#21702">See
|
||
LbxGetKeyboardMapping</ulink>.
|
||
</para>
|
||
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxGetWinAttrAndGeom</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
window</emphasis>
|
||
: WINDOW</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry>=></entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>visual: VISUALID</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>class: {InputOutput, InputOnly}</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>bit-gravity: BITGRAVITY</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>win-gravity: WINGRAVITY</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>backing-store: {NotUseful, WhenMapped,
|
||
Always}</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>backing-planes: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>backing-pixel: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>save-under: BOOL</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>colormap: COLORMAP or None</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>map-is-installed: BOOL</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>map-state: {Unmapped, Unviewable,
|
||
Viewable}</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>all-event-masks, your-event-mask:
|
||
SETofEVENT</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>do-not-propagate-mask: SETofDEVICEEVENT</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>override-redirect: BOOL</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>root: WINDOW</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>depth: CARD8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>x, y: INT16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>width, height, border-width: CARD16</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Window</emphasis>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
<emphasis>
|
||
GetWindowAttributes</emphasis>
|
||
and <emphasis>
|
||
GetGeometry</emphasis>
|
||
are frequently used together in the X protocol. <emphasis>
|
||
LbxGetWinAttrAndGeom</emphasis>
|
||
allows the proxy to request the same information in one round trip.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#41440">See
|
||
LbxGetWinAttrAndGeom</ulink>.
|
||
</para>
|
||
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxQueryFont</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
font</emphasis>
|
||
: FONTABLE</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry>=></entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>compression: BOOL</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>tag: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>font-info: FONTINFO /* optional
|
||
*/</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>char-infos: LISTofCHARINFO or LISTofLBXCHARINFO
|
||
/* optional */</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>where:</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>LBXCHARINFO: [left-side-bearing:
|
||
INT6</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> right-side-bearing: INT7</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> character-width: INT6</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> ascent: INT6</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> descent: INT7]</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Font,Alloc</emphasis>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request is used to replace the core <emphasis>
|
||
QueryFont</emphasis>
|
||
request and has identical semantics.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
See <ulink url="lbx.htm#26534">See Tag Substitution in Requests</ulink> for a
|
||
description of the <emphasis>
|
||
tag</emphasis>
|
||
field and optional fields.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
compression</emphasis>
|
||
field is True if the <emphasis>
|
||
char-infos</emphasis>
|
||
field is represented using LBXCHARINFO.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The per-character information will be encoded in an LBXCHARINFO when, for every
|
||
character, the character-width, left-side-bearing, and ascent can each be
|
||
represented in not more than 6 bits, and the right-side-bearing and descent can
|
||
each be represented in not more than 7 bits, and the attributes field is
|
||
identical the attributes field of the max_bounds of the <emphasis>
|
||
font_info</emphasis>
|
||
field of the font.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#24597">See
|
||
LbxQueryFont</ulink>.
|
||
</para>
|
||
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxChangeProperty</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
window</emphasis>
|
||
: WINDOW</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
property</emphasis>
|
||
: ATOM</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
type</emphasis>
|
||
: ATOM</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
format</emphasis>
|
||
: {0,8,16,32}</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
mode</emphasis>
|
||
: {Replace, Prepend, Append}</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
nUnits</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry>=></entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>tag: CARD32</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request is sent to the server when the client sends an X <emphasis>
|
||
ChangeProperty </emphasis>
|
||
request through the proxy. The size of the data is sent with this request, but
|
||
not the property data itself. The server reply contains a tag identifier for
|
||
the data, which is stored in the proxy. The proxy must not discard this data
|
||
before it is sent to the server, or invalidated by the server. This means that
|
||
before issuing an <emphasis>
|
||
LbxStopProxy</emphasis>
|
||
request, or exiting, the proxy must send Lbx<emphasis>
|
||
TagData</emphasis>
|
||
requests for these items. If the server loses the connection before the
|
||
information is sent back, the server should revert the property value to its
|
||
last known value, if possible.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the <emphasis>
|
||
mode</emphasis>
|
||
field is <emphasis>
|
||
Prepend</emphasis>
|
||
or <emphasis>
|
||
Append</emphasis>
|
||
, the tag refers only to the prepended or appended data.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the tag in the reply is zero, then the change was ignored by the server, as
|
||
defined in the security extension. The proxy should dump the associated data,
|
||
since the server will never ask for it.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#18013">See
|
||
LbxChangeProperty</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxGetProperty</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
window</emphasis>
|
||
: WINDOW</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
property</emphasis>
|
||
: ATOM</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
type</emphasis>
|
||
: ATOM or AnyPropertyType</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
long-offset</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
long-length</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
delete</emphasis>
|
||
: CARD8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry>=></entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>type: ATOM or None</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>format: {0, 8, 16, 32}</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>bytes-after: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>nItems: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>tag: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>value: LISTofINT8 or LISTofINT16 or
|
||
LISTofINT32</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request may be used by the proxy as a substitution for a core <emphasis>
|
||
GetProperty</emphasis>
|
||
request. It allows tags to be used for property data that is unlikely to
|
||
change often in value, but is likely to be fetched by multiple clients.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
LbxGetProperty</emphasis>
|
||
request has the same arguments as the core <emphasis>
|
||
GetProperty</emphasis>
|
||
request. The reply for <emphasis>
|
||
LbxGetProperty</emphasis>
|
||
has all of the fields from the core <emphasis>
|
||
GetProperty</emphasis>
|
||
reply, but has the additional fields of <emphasis>
|
||
nItems</emphasis>
|
||
and <emphasis>
|
||
tag</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
In order to utilize tags in <emphasis>
|
||
LbxGetProperty</emphasis>
|
||
for a specific property, the server must first send the complete property data
|
||
to the proxy and associate this data with a tag. More precisely, the server
|
||
sends an <emphasis>
|
||
LbxGetProperty</emphasis>
|
||
reply with a new <emphasis>
|
||
tag</emphasis>
|
||
, <emphasis>
|
||
nItems</emphasis>
|
||
set to the number of items in the property, the size of the property data in
|
||
the reply length field, and the complete property data in value. The proxy
|
||
stores the property data in its tag cache and associates it with the specified
|
||
tag.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
In response to future <emphasis>
|
||
LbxGetProperty</emphasis>
|
||
requests for the same property, if the server thinks that the proxy has the
|
||
actual property data in its tag cache, it may choose to send an <emphasis>
|
||
LbxGetProperty</emphasis>
|
||
reply without the actual property data. In this case, the reply would include
|
||
a non-zero <emphasis>
|
||
tag</emphasis>
|
||
, a zero reply length, and no data for value.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the server chooses not to generate a tagged reply to <emphasis>
|
||
LbxGetProperty</emphasis>
|
||
, or for some reason is unable to do so, it would send a reply with a <emphasis>
|
||
tag</emphasis>
|
||
of zero, the size of the property data in the reply length field, and the
|
||
complete property data in value.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#13863">See
|
||
LbxGetProperty</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxPolyPoint</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
gc-and-drawable: </emphasis>
|
||
LBXGCANDDRAWABLE</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
points</emphasis>
|
||
: LISTofLBXPOINT</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Alloc</emphasis>
|
||
and those given for the corresponding X request.</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request replaces the <emphasis>
|
||
PolyPoint</emphasis>
|
||
request. Not all <emphasis>
|
||
PolyPoint</emphasis>
|
||
requests can be represented as <emphasis>
|
||
LbxPolyPoint</emphasis>
|
||
requests.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The proxy will convert the representation of the points to be relative to the
|
||
previous point, as described by previous coordinate mode in the X protocol.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#29719">See
|
||
LbxPolyPoint</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxPolyLine</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
gc-and-drawable: </emphasis>
|
||
LBXGCANDDRAWABLE</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
points</emphasis>
|
||
: LISTofLBXPOINT</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Alloc</emphasis>
|
||
and those given for the corresponding X request.</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request replaces the <emphasis>
|
||
PolyLine</emphasis>
|
||
request. Not all <emphasis>
|
||
PolyLine</emphasis>
|
||
requests can be represented as <emphasis>
|
||
LbxPolyline</emphasis>
|
||
requests.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The proxy will convert the representation of the points to be relative to the
|
||
previous point, as described by previous coordinate mode in the X protocol.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#31086">See The
|
||
description of this request is on page 21.</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxPolySegment</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
gc-and-drawable: </emphasis>
|
||
LBXGCANDDRAWABLE</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
segments</emphasis>
|
||
: LISTofLBXSEGMENT</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'> </entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>where:</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>LBXSEGEMENT; [x1, y1, x2, y2: LBXINT16]</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Alloc</emphasis>
|
||
and those given for the corresponding X request.</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request replaces the <emphasis>
|
||
PolySegment</emphasis>
|
||
request. Not all <emphasis>
|
||
PolySegment</emphasis>
|
||
requests can be represented as <emphasis>
|
||
LbxPolySegment</emphasis>
|
||
requests.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
For segments other than the first segment of the request, [x1, y1] is
|
||
relative to [x1, y1] of the previous segment. For all segments, [x2, y2] is
|
||
relative to that segment’s [x1, y1].
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#27528">See
|
||
LbxPolySegment</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxPolyRectangle</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
gc-and-drawable: </emphasis>
|
||
LBXGCANDDRAWABLE</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
rectangles</emphasis>
|
||
: LISTofLBXRECTANGLE</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Alloc</emphasis>
|
||
and those given for the corresponding X request.</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request replaces the <emphasis>
|
||
PolyRectangle</emphasis>
|
||
request. Not all <emphasis>
|
||
PolyRectangle</emphasis>
|
||
requests can be represented as <emphasis>
|
||
LbxPolyRectangle</emphasis>
|
||
requests.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#33628">See The
|
||
description of this request is on page 22.</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxPolyArc</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
gc-and-drawable: </emphasis>
|
||
LBXGCANDDRAWABLE</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
arcs</emphasis>
|
||
: LISTofLBXARC</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Alloc</emphasis>
|
||
and those given for the corresponding X request.</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request replaces the <emphasis>
|
||
PolyArc</emphasis>
|
||
request. Not all <emphasis>
|
||
PolyArc</emphasis>
|
||
requests can be represented as <emphasis>
|
||
LbxPolyArc</emphasis>
|
||
requests.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#25855">See
|
||
LbxPolyArc</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxPolyFillRectangle</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
gc-and-drawable: </emphasis>
|
||
LBXGCANDDRAWABLE</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
rectangles</emphasis>
|
||
: LISTofLBXRECTANGLE</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Alloc</emphasis>
|
||
and those given for the corresponding X request.</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request replaces the <emphasis>
|
||
PolyFillRectangle</emphasis>
|
||
request. Not all <emphasis>
|
||
PolyFillRectangle</emphasis>
|
||
requests can be represented as <emphasis>
|
||
LbxPolyFillRectangle</emphasis>
|
||
requests.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#26399">See
|
||
LbxPolyFillRectangle</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxPolyFillArc</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
gc-and-drawable: </emphasis>
|
||
LBXGCANDDRAWABLE</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
arcs</emphasis>
|
||
: LISTofLBXARC</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Alloc</emphasis>
|
||
and those given for the corresponding X request.</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request replaces the <emphasis>
|
||
PolyFillArc</emphasis>
|
||
request. Not all <emphasis>
|
||
PolyFillArc</emphasis>
|
||
requests can be represented as <emphasis>
|
||
LbxPolyFillArc</emphasis>
|
||
requests.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#19081">See The
|
||
description of this request is on page 22.</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxFillPoly</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
gc-and-drawable: </emphasis>
|
||
LBXGCANDDRAWABLE</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
shape</emphasis>
|
||
: BYTE</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
points</emphasis>
|
||
: LISTofLBXPOINT</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Alloc</emphasis>
|
||
and those given for the corresponding X request.</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request replaces the <emphasis>
|
||
FillPoly</emphasis>
|
||
request. Not all <emphasis>
|
||
FillPoly</emphasis>
|
||
requests can be represented as <emphasis>
|
||
LbxFillPoly</emphasis>
|
||
requests.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The proxy will convert the representation of the points to be relative to the
|
||
previous point, as described by previous coordinate mode in the X protocol.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#24998">See
|
||
LbxFillPoly</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxCopyArea</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
srcCache</emphasis>
|
||
: CARD8 /* source drawable */</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
gc-and-drawable: </emphasis>
|
||
LBXGCANDDRAWABLE</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
src-Drawable</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
src-x</emphasis>
|
||
: LBXPINT16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
src-y</emphasis>
|
||
: LBXPINT16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
width</emphasis>
|
||
: LBXCARD16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
height</emphasis>
|
||
: LBXCARD16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
dst-x</emphasis>
|
||
: LBXPINT16 </entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
dst-y</emphasis>
|
||
: LBXPINT16</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: Those given for the corresponding X
|
||
request.</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request replaces the <emphasis>
|
||
CopyArea</emphasis>
|
||
request for requests within its encoding range.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#10231">See
|
||
LbxCopyArea</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxCopyPlane</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
bit-plane</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
src-cache</emphasis>
|
||
: CARD8 /* cache reference for source drawable */</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
gc-and-drawable: </emphasis>
|
||
LBXGCANDDRAWABLE</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
src-drawable</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
src-x</emphasis>
|
||
: LBXPINT16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
src-y</emphasis>
|
||
: LBXPINT16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
width</emphasis>
|
||
: LBXCARD16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
height</emphasis>
|
||
: LBXCARD16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
dst-x</emphasis>
|
||
: LBXPINT16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
dst-y</emphasis>
|
||
: LBXPINT16</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: Those given for the corresponding X
|
||
request.</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request replaces the <emphasis>
|
||
CopyPlane</emphasis>
|
||
request for requests within its coding range.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#18847">See
|
||
LbxCopyPlane</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxPolyText8</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
gc-and-drawable: </emphasis>
|
||
LBXGCANDDRAWABLE</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
x</emphasis>
|
||
: LBXPINT16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
y</emphasis>
|
||
: LBXPINT16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
items</emphasis>
|
||
: LISTofTEXTITEM8</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Alloc</emphasis>
|
||
, and those given for the corresponding X request.</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request replaces the <emphasis>
|
||
PolyText8</emphasis>
|
||
request for requests within its encoding range.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#39640">See The
|
||
description of this request is on page 23.</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxPolyText16</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
gc-and-drawable: </emphasis>
|
||
LBXGCANDDRAWABLE</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
x:</emphasis>
|
||
LBXPINT16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
y</emphasis>
|
||
: LBXPINT16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
items</emphasis>
|
||
: LISTofTEXTITEM16</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Alloc</emphasis>
|
||
, and those given for the corresponding X request.</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request replaces the <emphasis>
|
||
PolyText16</emphasis>
|
||
request for requests within its encoding range.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#32634">See The
|
||
description of this request is on page 24.</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxImageText8</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
gc-and-drawable: </emphasis>
|
||
LBXGCANDDRAWABLE</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
nChars</emphasis>
|
||
: CARD8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
x</emphasis>
|
||
: LBXPINT16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
y</emphasis>
|
||
: LBXPINT16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
string</emphasis>
|
||
: STRING8</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Alloc</emphasis>
|
||
, and those given for the corresponding X request.</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request replaces the <emphasis>
|
||
ImageText8</emphasis>
|
||
request for requests within its encoding range.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#17018">See The
|
||
description of this request is on page 24.</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxImageText16</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
nChars</emphasis>
|
||
: CARD8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
gc-and-drawable: </emphasis>
|
||
LBXGCANDDRAWABLE</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>x: LBXPINT16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
y</emphasis>
|
||
: LBXPINT16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
string</emphasis>
|
||
: STRING16</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Alloc</emphasis>
|
||
, and those given for the corresponding X request.</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request replaces the <emphasis>
|
||
ImageText16</emphasis>
|
||
request for requests within its encoding range.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#23910">See The
|
||
description of this request is on page 24.</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxPutImage</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
compression-method</emphasis>
|
||
: CARD8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
format</emphasis>
|
||
: {<emphasis>
|
||
Bitmap</emphasis>
|
||
, <emphasis>
|
||
XYPixmap</emphasis>
|
||
, <emphasis>
|
||
ZPixmap</emphasis>
|
||
} /* packed */</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
gc-and-drawable: </emphasis>
|
||
LBXGCANDDRAWABLE</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
width</emphasis>
|
||
, <emphasis>
|
||
height</emphasis>
|
||
: LBXCARD16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
dst-x</emphasis>
|
||
, <emphasis>
|
||
dst-y</emphasis>
|
||
: LBXPINT16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
depth</emphasis>
|
||
: CARD8 /* packed */</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
left-pad</emphasis>
|
||
: CARD8 /* packed */</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
pad-bytes</emphasis>
|
||
: CARD8 /* packed */</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
data</emphasis>
|
||
:LISTofBYTE</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Alloc</emphasis>
|
||
, <emphasis>
|
||
Value</emphasis>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
When the request can be usefully compressed, this request replaces the
|
||
<emphasis>
|
||
PutImage</emphasis>
|
||
request. The <emphasis>
|
||
compression-method</emphasis>
|
||
parameter contains the opcode of a compression method returned in the
|
||
<emphasis>
|
||
LbxStartProxy</emphasis>
|
||
reply. The <emphasis>
|
||
pad-bytes</emphasis>
|
||
parameter gives the number of unused pad bytes that follow the compressed
|
||
image data. All other parameters are as in the X request. If the specified
|
||
compression method is not recognized, the server returns a <emphasis>
|
||
Value</emphasis>
|
||
error.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#12268">See
|
||
LbxPutImage</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxGetImage</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
drawable</emphasis>
|
||
: DRAWABLE</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
x</emphasis>
|
||
, <emphasis>
|
||
y</emphasis>
|
||
: INT16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
width</emphasis>
|
||
, <emphasis>
|
||
height</emphasis>
|
||
: CARD16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
plane-mask</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
format</emphasis>
|
||
: {XYPixmap, ZPixmap}</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry>=></entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>depth: CARD8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>x-length: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>visual: VISUALID or None</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>compression-method: CARD8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'>data: LISTofBYTE</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Alloc,Match,Value</emphasis>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request can replace the <emphasis>
|
||
GetImage</emphasis>
|
||
request. The same semantics apply, with the following exceptions.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
compression-method</emphasis>
|
||
field contains the opcode of the compression method used in the reply. The
|
||
compression opcodes are supplied in the <emphasis>
|
||
LbxStartProxy</emphasis>
|
||
reply. The <emphasis>
|
||
x-length </emphasis>
|
||
field<emphasis>
|
||
</emphasis>
|
||
contains the length of the uncompressed version of the reply in 4 byte units.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
A <emphasis>
|
||
Value</emphasis>
|
||
error is returned if the format is not recognized by the X server. A <emphasis>
|
||
Match</emphasis>
|
||
error is returned under the same circumstances as described by the <emphasis>
|
||
GetImage</emphasis>
|
||
request.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#10066">See
|
||
LbxGetImage</ulink>.
|
||
</para>
|
||
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxBeginLargeRequest</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
large-request-length</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Alloc</emphasis>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request, along with the Lbx<emphasis>
|
||
LargeRequestData</emphasis>
|
||
and Lbx<emphasis>
|
||
EndLargeRequest</emphasis>
|
||
requests, is used to transport a large request in pieces. The smaller size of
|
||
the resulting requests allows smoother multiplexing of clients on a single low
|
||
bandwidth connection to the server. The resulting finer-grained multiplexing
|
||
improves responsiveness for the other clients.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
After a <emphasis>
|
||
LbxBeginLargeRequest</emphasis>
|
||
request is sent, multiple <emphasis>
|
||
LbxLargeRequestData</emphasis>
|
||
requests are sent to transport all of the data in the large request, and
|
||
finally an <emphasis>
|
||
LbxEndLargeRequest</emphasis>
|
||
request is sent. The large-request-length field expresses the total length of
|
||
the transported large request, expressed as the number of bytes in the
|
||
transported request divided by four.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#22013">See The
|
||
description of this request is on page 25.</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxLargeRequestData</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
data</emphasis>
|
||
: LISTofBYTE</entry>
|
||
</row>
|
||
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Alloc</emphasis>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request is used to carry the segments of a larger request, as described in
|
||
the definition of <emphasis>
|
||
LbxBeginLargeRequest</emphasis>
|
||
. The data must be carried in order, starting with the request header, and each
|
||
segment must be multiples of 4 bytes long. If the <emphasis>
|
||
LbxLargeRequestData</emphasis>
|
||
is not preceded by a corresponding <emphasis>
|
||
LbxBeginLargeRequest</emphasis>
|
||
, a <emphasis>
|
||
BadAlloc</emphasis>
|
||
error is generated.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#31469">See The
|
||
description of this request is on page 26.</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxEndLargeRequest</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Length, Alloc</emphasis>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
As described in the definition of <emphasis>
|
||
LbxBeginLargeRequest</emphasis>
|
||
, <emphasis>
|
||
LbxEndLargeRequest</emphasis>
|
||
is used to signal the end of a series of <emphasis>
|
||
LargeRequestData</emphasis>
|
||
requests. If the total length of the data transported by the <emphasis>
|
||
LbxLargeRequestData</emphasis>
|
||
requests does not match the large-request-length field of the preceding
|
||
<emphasis>
|
||
LbxBeginLargeRequest</emphasis>
|
||
request, then a <emphasis>
|
||
Length</emphasis>
|
||
error occurs. If the <emphasis>
|
||
LbxEndLargeRequest</emphasis>
|
||
is not preceded by a corresponding <emphasis>
|
||
LbxBeginLargeRequest</emphasis>
|
||
, a <emphasis>
|
||
BadAlloc</emphasis>
|
||
error is generated. The request is executed in order for that client as if it
|
||
were the request after the request preceding <emphasis>
|
||
LbxEndLargeRequest</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this request is on <ulink url="lbx.htm#31037">See
|
||
LbxEndLargeRequest</ulink>.
|
||
</para>
|
||
|
||
|
||
|
||
</sect3>
|
||
</sect2>
|
||
<sect2 id='events'>
|
||
<title>Events</title>
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxSwitchEvent</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
client</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
Notify the proxy that the subsequent replies, events, and errors are relative
|
||
to the specified client.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this event is on <ulink url="lbx.htm#17348">See
|
||
LbxSwitchEvent</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxCloseEvent</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
client</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
Notify the proxy that the specified client's connection to the server is closed.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this event is on <ulink url="lbx.htm#41814">See The
|
||
description of this event is on page 27.</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxInvalidateTagEvent</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
tag</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
tag-type</emphasis>
|
||
: {Modmap, Keymap, Property, Font, ConnInfo}</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This message informs the proxy that the tag and the server data referenced by
|
||
the tag are obsolete, and should be discarded. The tag type may be one of the
|
||
following values: <emphasis>
|
||
LbxTagTypeModmap</emphasis>
|
||
, <emphasis>
|
||
LbxTagTypeKeymap</emphasis>
|
||
, <emphasis>
|
||
LbxTagTypeProperty</emphasis>
|
||
, <emphasis>
|
||
LbxTagTypeFont</emphasis>
|
||
, <emphasis>
|
||
LbxTagTypeConnInfo</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this event is on <ulink url="lbx.htm#34406">See
|
||
LbxInvalidateTagEvent</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxSendTagDataEvent</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
tag</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
tag-type</emphasis>
|
||
: {Property}</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
The server sends this event to the proxy to request a copy of tagged data which
|
||
is being stored by the proxy. The request contains a tag which was previously
|
||
assigned to the data by the server. The proxy should respond to <emphasis>
|
||
SendTagData</emphasis>
|
||
by sending a <emphasis>
|
||
TagData</emphasis>
|
||
request to the server. The tag type may be one of the following values:
|
||
<emphasis>
|
||
LbxTagTypeProperty</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this event is on <ulink url="lbx.htm#22353">See
|
||
LbxSendTagDataEvent</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxListenToOne</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
client</emphasis>
|
||
: CARD32 or <emphasis>
|
||
0xffffffff</emphasis>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
When the server is grabbed, <emphasis>
|
||
ListenToOne</emphasis>
|
||
is sent to the proxy. As an X client, the proxy itself is unaffected by grabs,
|
||
in order that it may respond to requests for data from the X server.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
When the client grabbing the server is managed through the proxy, the proxy
|
||
will permit messages from itself and the grabbing client to be sent immediately
|
||
to the server, and may buffer requests from other clients of the proxy. The
|
||
client is identified in the event.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
When the client grabbing the server is not managed through the proxy, the
|
||
client field in the event will be <emphasis>
|
||
0xffffffff</emphasis>
|
||
. The proxy will communicate with the server, and it may buffer requests from
|
||
other clients. The proxy will continue to handle new connections while the
|
||
server is grabbed.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The server will send <emphasis>
|
||
ListenToAll</emphasis>
|
||
to the proxy when the server is ungrabbed. There is no time-out for this
|
||
interval in the protocol.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this event is on <ulink url="lbx.htm#18630">See The
|
||
description of this event is on page 27.</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxListenToAll</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
Notify the proxy that the server has been ungrabbed, and that the proxy may now
|
||
send all buffered client requests on to the server.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this event is on <ulink url="lbx.htm#30610">See The
|
||
description of this event is on page 27.</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxQuickMotionDeltaEvent</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
deltaTime</emphasis>
|
||
: CARD8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
deltaX</emphasis>
|
||
: INT8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
deltaY</emphasis>
|
||
: INT8</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This event is used as a replacement for the <emphasis>
|
||
MotionNotify</emphasis>
|
||
event when possible. The fields are used as deltas to the most recent
|
||
<emphasis>
|
||
MotionNotify</emphasis>
|
||
event encoded as a <emphasis>
|
||
MotionNotify</emphasis>
|
||
event, <emphasis>
|
||
LbxQuickMotionDeltaEvent</emphasis>
|
||
, or <emphasis>
|
||
LbxMotionDeltaEvent</emphasis>
|
||
. Not every <emphasis>
|
||
MotionNotify</emphasis>
|
||
event can be encoded as a <emphasis>
|
||
LbxQuickMotionDeltaEvent</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this event is on <ulink url="lbx.htm#35213">See
|
||
LbxQuickMotionDeltaEvent</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxMotionDeltaEvent</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
deltaX</emphasis>
|
||
: INT8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
deltaY</emphasis>
|
||
: INT8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
deltaTime</emphasis>
|
||
: CARD16</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
deltaSequence</emphasis>
|
||
: CARD16</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This event is used as a replacement for the <emphasis>
|
||
MotionNotify</emphasis>
|
||
event when possible. The fields are used as deltas to the most recent
|
||
<emphasis>
|
||
MotionNotify</emphasis>
|
||
event encoded as a <emphasis>
|
||
MotionNotify</emphasis>
|
||
event, <emphasis>
|
||
LbxQuickMotionDeltaEvent</emphasis>
|
||
, or <emphasis>
|
||
LbxMotionDeltaEvent</emphasis>
|
||
. Not every <emphasis>
|
||
MotionNotify</emphasis>
|
||
event can be encoded as <emphasis>
|
||
a LbxMotionDeltaEvent</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this event is on <ulink url="lbx.htm#35310">See
|
||
LbxMotionDeltaEvent</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxReleaseCmapEvent</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
colormap</emphasis>
|
||
: Colormap</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This event notifies the proxy that it must release the grab on this colormap
|
||
via the ReleaseCmap request. <ulink url="lbx.htm#34675">See
|
||
LbxReleaseCmap</ulink>
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this event is on <ulink url="lbx.htm#14052">See
|
||
LbxReleaseCmapEvent</ulink>.
|
||
</para>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxFreeCellsEvent</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
colormap</emphasis>
|
||
: Colormap</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
pixelStart, pixelEnd</emphasis>
|
||
: CARD32</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
The <emphasis>
|
||
LbxFreeCells</emphasis>
|
||
event is sent to a proxy that has a colormap grabbed to notify the proxy that
|
||
the reference count of the described cells were decremented to zero by the
|
||
server or another proxy. The reference count includes those by this proxy. The
|
||
proxy must update its copy of the colormap state accordingly if the colormap is
|
||
still grabbed, or if the proxy may in the future grab the colormap using
|
||
smart-grab mode. <ulink url="lbx.htm#10922">See LbxGrabCmap</ulink>
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The pixelStart and pixelEnd fields of the event denote a continuous range of
|
||
cells that were freed.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this event is on <ulink url="lbx.htm#14731">See
|
||
LbxFreeCellsEvent</ulink>.
|
||
</para>
|
||
|
||
</sect2>
|
||
<sect2 id='responses'>
|
||
<title>Responses</title>
|
||
|
||
<para>
|
||
Responses are messages from the server to the proxy that not, strictly
|
||
speaking, events, replies or errors.
|
||
</para>
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<tgroup cols='1'>
|
||
<colspec colsep='0'/>
|
||
<thead>
|
||
<row rowsep='0'>
|
||
<entry role='protoname'>LbxDeltaResponse</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
count</emphasis>
|
||
: CARD8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
cache-index</emphasis>
|
||
: CARD8</entry>
|
||
</row>
|
||
<row rowsep='0'>
|
||
<entry role='protoargs'><emphasis>
|
||
diffs</emphasis>
|
||
: LISTofDIFFITEM</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This response carries an event, reply, or error that has been encoded relative
|
||
to a message in the response delta cache. The <emphasis>
|
||
cache-index</emphasis>
|
||
field is the index into the cache. Each entry in <emphasis>
|
||
diffs</emphasis>
|
||
provides a byte offset and replacement value to use in reconstructing the
|
||
response.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The encoding for this event is on <ulink url="lbx.htm#17100">See
|
||
LbxDeltaResponse</ulink>.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
</sect1>
|
||
<sect1 id='algorithm_naming'>
|
||
<title>Algorithm Naming</title>
|
||
|
||
<para>
|
||
To avoid potential clashes between different but similar algorithms for stream,
|
||
bitmap, and pixmap compression, the following naming scheme will be adhered to:
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Each algorithm has a unique name, which is a STRING8, of the following form:
|
||
</para>
|
||
|
||
|
||
<para>
|
||
<organization>-<some-descriptive-name>
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The organization field above is the organization name as registered in section
|
||
1 of the X Registry (the registry is provided as a free service by the X
|
||
Consortium.) This prevents conflicts among different vendor’s extensions.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
As an example, the X Consortium defines a zlib-based stream compression
|
||
algorithm called XC-ZLIB.
|
||
</para>
|
||
|
||
|
||
</sect1>
|
||
<sect1 id='encoding'>
|
||
<title>Encoding</title>
|
||
|
||
<para>
|
||
The syntax and types used in the encoding are taken from the X protocol
|
||
encoding. Where LBX defines new types, they are defined earlier in this
|
||
document.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
As in the X protocol, in various cases, the number of bytes occupied by a
|
||
component will be specified by a lowercase single-letter variable name instead
|
||
of a specific numeric value, and often some other component will have its value
|
||
specified as a simple numeric expression involving these variables. Components
|
||
specified with such expressions are always interpreted as unsigned integers.
|
||
The scope of such variables is always just the enclosing request, reply, error,
|
||
event, or compound type structure.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
For unused bytes, the encode-form is:
|
||
</para>
|
||
|
||
<literallayout>
|
||
N unused
|
||
</literallayout>
|
||
|
||
<para>
|
||
If the number of unused bytes is variable, the encode-form typically is:
|
||
</para>
|
||
|
||
<literallayout>
|
||
p unused, p=pad(E)
|
||
</literallayout>
|
||
|
||
<para>
|
||
where E is some expression, and pad(E) is the number of bytes needed to round E
|
||
up to a multiple of four.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
pad(E) = (4 - (E mod 4)) mod 4
|
||
</para>
|
||
|
||
|
||
<para>
|
||
In many of the encodings, the length depends on many variable length fields.
|
||
The variable L is used to indicate the number of padded 4 byte units needed to
|
||
carry the request. Similarly, the variable Lpad indicates the number of bytes
|
||
needed to pad the request to a 4 byte boundary.
|
||
</para>
|
||
|
||
<literallayout>
|
||
For counted lists there is a common encoding of NLISTofFOO:
|
||
</literallayout>
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>NLISTofFOO</emphasis>
|
||
1 m num items
|
||
m LISTofFOO items
|
||
</literallayout>
|
||
|
||
<para>
|
||
For cached GC and Drawables:
|
||
</para>
|
||
|
||
<literallayout>
|
||
<emphasis role='bold'>LBXGCANDDRAWUPDATE</emphasis>
|
||
4 or 0 DRAWBLE optional drawable
|
||
4 or 0 GC optional GC
|
||
</literallayout>
|
||
|
||
|
||
|
||
<literallayout>
|
||
<emphasis role='bold'>LBXGCANDDRAWABLE</emphasis>
|
||
8 LBXGCANDDRAWENT cache-entries
|
||
8 unused
|
||
m LBXGCANDDRAWUPDATE optional GC and Drawable
|
||
</literallayout>
|
||
|
||
|
||
<sect2 id='errors2'>
|
||
<title>Errors</title>
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxClient</emphasis>
|
||
1 0 Error
|
||
1 CARD8 error-base + 0
|
||
2 CARD16 sequence number
|
||
4 unused
|
||
2 CARD16 lbx opcode
|
||
1 CARD8 major opcode
|
||
21 unused
|
||
</literallayout>
|
||
|
||
</sect2>
|
||
<sect2 id='requests2'>
|
||
<title>Requests</title>
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxQueryVersion</emphasis>
|
||
1 CARD8 opcode
|
||
1 0 lbx opcode
|
||
2 1 request length
|
||
=>
|
||
1 1 Reply
|
||
1 unused
|
||
2 CARD16 sequence number
|
||
4 0 reply length
|
||
2 CARD16 major version
|
||
2 CARD16 minor version
|
||
20 unused
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#18761">See
|
||
LbxQueryVersion</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxStartProxy</emphasis>
|
||
1 CARD8 opcode
|
||
1 1 lbx opcode
|
||
2 L request length
|
||
n NLISTofOPTION-REQUEST options
|
||
p unused, p=pad(n)
|
||
|
||
<emphasis role='bold'>OPTION-REQUEST</emphasis>
|
||
1 OPTCODE option-code
|
||
m OPTLEN option-request-byte-length, (b=m+a+1)
|
||
a DELTAOPT or option
|
||
NLISTofNAMEDOPT or
|
||
NLISTofSTR or
|
||
NLISTofPIXMAPMETHOD or
|
||
BOOL
|
||
</literallayout>
|
||
|
||
<para>
|
||
The encoding of the option field depends on the option-code.
|
||
See <ulink url="lbx.htm#35444">See StartProxy Options</ulink>.
|
||
</para>
|
||
|
||
<literallayout class='monospaced'>
|
||
1 OPTCODE option-code
|
||
0 LbxOptionDeltaProxy
|
||
1 LbxOptionDeltaServer
|
||
2 LbxOptionStreamCompression
|
||
3 LbxOptionBitmapCompression
|
||
4 LbxOptionPixmapCompression
|
||
5 LbxOptionMessageCompression /* also known as squishing */
|
||
6 LbxOptionUseTags
|
||
7 LbxOptionColormapAllocation
|
||
255 LbxOptionExtension
|
||
</literallayout>
|
||
|
||
<para>
|
||
OPTLEN has two possible encodings, depending on the size of the value carried:
|
||
</para>
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>OPTLEN</emphasis>
|
||
1 CARD8 b (0 < b <= 255)
|
||
|
||
<emphasis role='bold'>OPTLEN</emphasis>
|
||
1 0 long length header
|
||
1 c length0, c = b >> 8
|
||
1 d length1, d= b & #xff
|
||
|
||
<emphasis role='bold'>DELTAOPT</emphasis>
|
||
1 CARD8 min-cache-size
|
||
1 CARD8 max-cache-size
|
||
1 CARD8 preferred-cache-size
|
||
1 CARD8 min-message-length
|
||
1 CARD8 max-message-length (in 4-byte units)
|
||
1 CARD8 preferred-message-length
|
||
|
||
<emphasis role='bold'>NAMEDOPT</emphasis>
|
||
f STR type-name
|
||
1 g+1 option-data-length
|
||
g LISTofBYTE option-data (option specific)
|
||
|
||
<emphasis role='bold'>PIXMAPMETHOD</emphasis>
|
||
h STR name
|
||
1 BITMASK format mask
|
||
1 j depth count
|
||
j LISTofCARD8 depths
|
||
|
||
=>
|
||
=>
|
||
|
||
1 1 Reply
|
||
1 CARD8 count
|
||
|
||
0xff options in request cannot be decoded
|
||
2 CARD16 sequence number
|
||
4 (a+p-32)/4 reply length
|
||
a LISTofCHOICE options-reply
|
||
p unused, if (n<24) p=24-n else p=pad(n)
|
||
|
||
<emphasis role='bold'>CHOICE</emphasis>
|
||
1 CARD8 request-option-index
|
||
b OPTLEN reply-option-byte-length
|
||
c DELTACHOICE or choice
|
||
INDEXEDCHOICE or
|
||
NLISTofINDEXEDOPT or
|
||
NLISTofPIXMAPCHOICE or
|
||
BOOL or
|
||
INDEXEDCHOICE
|
||
</literallayout>
|
||
|
||
<para>
|
||
The encoding of the choice field depends on the option-code. See <ulink
|
||
url="lbx.htm#35444">See StartProxy Options</ulink>.
|
||
</para>
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>DELTACHOICE</emphasis>
|
||
1 CARD8 preferred cache size
|
||
1 CARD8 preferred message length in 4-byte units
|
||
|
||
<emphasis role='bold'>INDEXEDCHOICE</emphasis>
|
||
1 CARD8 index
|
||
d LISTofBYTE data
|
||
|
||
<emphasis role='bold'>PIXMAPCHOICE</emphasis>
|
||
1 CARD8 index
|
||
1 CARD8 opcode
|
||
1 BITMASK format mask
|
||
e NLISTofCARD8 depths
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#20870">See
|
||
LbxStartProxy</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxStopProxy</emphasis>
|
||
1 CARD8 opcode
|
||
1 2 lbx opcode
|
||
2 1 request length
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#27455">See
|
||
LbxStopProxy</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxSwitch</emphasis>
|
||
1 CARD8 opcode
|
||
1 3 lbx opcode
|
||
2 2 request length
|
||
4 CARD32 client
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on
|
||
<ulink url="lbx.htm#33500">See LbxSwitch</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxNewClient</emphasis>
|
||
1 CARD8 opcode
|
||
1 4 lbx opcode
|
||
2 L request length
|
||
4 CARD32 client
|
||
The remaining bytes of the request are the core connection setup.
|
||
=>
|
||
If the connection is rejected, a core connection reply is sent. Otherwise the
|
||
reply has the form:
|
||
1 BOOL success
|
||
1 change type
|
||
0 no-deltas
|
||
1 normal-client-deltas
|
||
2 app-group-deltas
|
||
2 CARD16 major version
|
||
2 CARD16 minor version
|
||
2 1 + a length
|
||
4 CARD32 tag id
|
||
</literallayout>
|
||
|
||
<para>
|
||
The remaining bytes depend on the value of change-type and length.
|
||
</para>
|
||
|
||
<para>
|
||
For no-deltas, the remaining bytes are the "additional data"
|
||
bytes of the core reply. (a = length of core reply, in 4 byte quantities).
|
||
</para>
|
||
|
||
<para>
|
||
For normal-client-deltas, the additional bytes have the form, with a length (a
|
||
= 1 +b):
|
||
</para>
|
||
|
||
<literallayout class='monospaced'>
|
||
4 CARD32 resource id base
|
||
4b LISTofSETofEVENT root input masks
|
||
</literallayout>
|
||
|
||
<para>
|
||
For app-group-deltas, the additional bytes have the following form, with a
|
||
length of (a = 1 + 4c):
|
||
</para>
|
||
|
||
<literallayout class='monospaced'>
|
||
4 CARD32 resource id base
|
||
4 WINDOW root id base
|
||
4 VISUALID visual
|
||
4 COLORMAP colormap
|
||
4 CARD32 white pixel
|
||
4 CARD32 black pixel
|
||
4c LISTofSETofEVENT root input masks
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on
|
||
<ulink url="lbx.htm#17810">See LbxNewClient</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxCloseClient</emphasis>
|
||
1 CARD8 opcode
|
||
1 5 lbx opcode
|
||
2 2 request length
|
||
4 CARD32 client
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on
|
||
<ulink url="lbx.htm#21625">See LbxCloseClient</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxModifySequence</emphasis>
|
||
1 CARD8 opcode
|
||
1 6 lbx opcode
|
||
2 2 request length
|
||
4 CARD32 offset to sequence number
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#36693">See
|
||
LbxModifySequence</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxAllowMotion</emphasis>
|
||
1 CARD8 opcode
|
||
1 7 lbx opcode
|
||
2 2 request length
|
||
4 CARD32 number of MotionNotify events
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#15895">See
|
||
LbxAllowMotion</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxIncrementPixel</emphasis>
|
||
1 CARD8 opcode
|
||
1 8 lbx opcode
|
||
2 3 request length
|
||
4 COLORMAP colormap
|
||
4 CARD32 pixel
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#27227">See
|
||
LbxIncrementPixel</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxDelta</emphasis>
|
||
1 CARD8 opcode
|
||
1 9 lbx opcode
|
||
2 1+(2n +p+2)/4 request length
|
||
1 n count of diffs
|
||
1 CARD8 cache index
|
||
2n LISTofDIFFITEM offsets and differences
|
||
p unused, p=pad(2n + 2)
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#26857">See
|
||
LbxDelta</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxGetModifierMapping</emphasis>
|
||
1 CARD8 opcode
|
||
1 10 lbx opcode
|
||
2 1 request length
|
||
=>
|
||
1 1 Reply
|
||
1 n keycodes-per-modifier
|
||
2 CARD16 sequence number
|
||
4 2n reply length
|
||
4 CARD32 tag
|
||
20 unused
|
||
8n LISTofKEYCODE keycodes
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#37687">See
|
||
LbxGetModifierMapping</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxInvalidateTag</emphasis>
|
||
1 CARD8 opcode
|
||
1 12 lbx opcode
|
||
2 2 request length
|
||
4 CARD32 tag
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#12515">See
|
||
LbxInvalidateTag</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxPolyPoint</emphasis>
|
||
1 CARD8 opcode
|
||
1 13 lbx opcode
|
||
2 1+(m+n+p)/4 request length
|
||
m LBXGCANDDRAWABLE cache entries
|
||
n LISTofLBXPOINT points (n is data-dependent)
|
||
p 0 unused, p=Lpad
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#37179">See
|
||
LbxPolyPoint</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxPolyLine</emphasis>
|
||
1 CARD8 opcode
|
||
1 14 lbx opcode
|
||
2 1+(m+n+p)/4 request length
|
||
m LBXGCANDDRAWABLE cache entries
|
||
n LISTofLBXPOINT points (n is data-dependent)
|
||
p 0 unused, p=Lpad
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#16574">See
|
||
LbxPolyLine</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxPolySegment</emphasis>
|
||
1 CARD8 opcode
|
||
1 15 lbx opcode
|
||
2 1+(m+n+p)/4 request length
|
||
m LBXGCANDDRAWABLE cache entries
|
||
n LISTofLBXSEGMENT segments (n is data-dependent)
|
||
p 0 unused, p=Lpad
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#26077">See
|
||
LbxPolySegment</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxPolyRectangle</emphasis>
|
||
1 CARD8 opcode
|
||
1 16 lbx opcode
|
||
2 1+(m+n+p)/4 request length
|
||
m LBXGCANDDRAWABLE cache entries
|
||
n LISTofLBXRECTANGLE rectangles (n is data-dependent)
|
||
p 0 unused, p=pad(m+n)
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#40958">See
|
||
LbxPolyRectangle</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxPolyArc</emphasis>
|
||
1 CARD8 opcode
|
||
1 17 lbx opcode
|
||
2 1+(m+n+p)/4 request length
|
||
m LBXGCANDDRAWABLE cache entries
|
||
n LISTofLBXARCS arcs (n is data-dependent)
|
||
p 0 unused, p=Lpad
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#15317">See
|
||
LbxPolyArc</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxFillPoly</emphasis>
|
||
1 CARD8 opcode
|
||
1 18 lbx opcode
|
||
2 1+(3+m+n+p)/4 request length
|
||
1 LBXGCANDDRAWENT cache entries
|
||
1 shape
|
||
0 Complex
|
||
1 Nonconvex
|
||
2 Convex
|
||
1 p pad byte count
|
||
m LBXGCANDDRAWUPDATE optional gc and drawable
|
||
n LISTofLBXPOINT points (n is data-dependent)
|
||
p 0 unused, p=Lpad
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#35796">See
|
||
LbxFillPoly</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxPolyFillRectangle</emphasis>
|
||
1 CARD8 opcode
|
||
1 19 lbx opcode
|
||
2 1+(m+n+p)/4 request length
|
||
m LBXGCANDDRAWABLE cache entries
|
||
n LISTofLBXRECTANGLE rectangles (n is data-dependent)
|
||
p 0 unused, p=Lpad
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#25511">See
|
||
LbxPolyFillRectangle</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxPolyFillArc</emphasis>
|
||
1 CARD8 opcode
|
||
1 20 lbx opcode
|
||
2 1+(m+n+p)/4 request length
|
||
m LBXGCANDDRAWABLE cache entries
|
||
n LISTofLBXARC arcs (n is data-dependent)
|
||
p 0 unused, p=Lpad
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#42698">See
|
||
LbxPolyFillArc</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxGetKeyboardMapping</emphasis>
|
||
1 CARD8 opcode
|
||
1 21 lbx opcode
|
||
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)
|
||
4 CARD32 tag
|
||
20 unused
|
||
4nm LISTofKEYSYM keysyms
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#33719">See
|
||
LbxGetKeyboardMapping</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxQueryFont</emphasis>
|
||
1 CARD8 opcode
|
||
1 22 lbx opcode
|
||
2 2 request length
|
||
4 FONTABLE font
|
||
=>
|
||
1 1 Reply
|
||
1 BOOL compression
|
||
2 CARD16 sequence number
|
||
4 L reply length
|
||
4 CARD32 tag
|
||
20 unused
|
||
All of the following is conditional:
|
||
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 <emphasis>LeftToRight</emphasis>
|
||
1 <emphasis>RightToLeft</emphasis>
|
||
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 elements in char-infos
|
||
8n LISTofFONTPROP properties
|
||
and either
|
||
12m LISTofCHARINFO char-infos
|
||
or
|
||
m LISTofLBXCHARINFO char-infos
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#18818">See
|
||
LbxQueryFont</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxChangeProperty</emphasis>
|
||
1 CARD8 opcode
|
||
1 23 lbx opcode
|
||
2 6 request length
|
||
4 WINDOW window
|
||
4 ATOM property
|
||
4 ATOM type
|
||
1 CARD8 format
|
||
1 mode
|
||
0 Replace
|
||
1 Preprend
|
||
2 Append
|
||
2 unused
|
||
4 CARD32 length of data in format units
|
||
(= n for format = 8)
|
||
(= n/2 for format = 16)
|
||
(= n/4 for format = 32)
|
||
=>
|
||
1 1 Reply
|
||
1 unused
|
||
2 CARD16 sequence number
|
||
4 0 reply length
|
||
4 CARD32 tag
|
||
20 unused
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#40098">See
|
||
LbxChangeProperty</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxGetProperty</emphasis>
|
||
1 CARD8 opcode
|
||
1 24 lbx opcode
|
||
2 7 request length
|
||
4 WINDOW window
|
||
4 ATOM property
|
||
4 ATOM type
|
||
0 AnyPropertyType
|
||
1 CARD8 delete
|
||
3 unused
|
||
4 CARD32 long-offset
|
||
4 CARD32 long-length
|
||
=>
|
||
1 1 Reply
|
||
1 CARD8 format
|
||
2 CARD16 sequence number
|
||
4 CARD32 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)
|
||
4 CARD32 tag
|
||
8 unused
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#31397">See
|
||
LbxGetProperty</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxTagData</emphasis>
|
||
1 CARD8 opcode
|
||
1 25 lbx opcode
|
||
2 3+(n+p)/4 request length
|
||
4 CARD32 tag
|
||
4 CARD32 length of data in bytes
|
||
n LISTofBYTE data
|
||
p unused, p=pad(n)
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#17987">See
|
||
LbxTagData</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxCopyArea</emphasis>
|
||
1 CARD8 opcode
|
||
1 26 lbx opcode
|
||
2 L request length
|
||
1 CARD8 source drawable cache entry
|
||
1 LBXGCANDDRAWENT cache entries
|
||
4 or 0 DRAWABLE optional source drawable
|
||
b LBXGCANDDRAWUPDATE optional gc and dest drawable
|
||
c LBXPINT16 src-x
|
||
d LBXPINT16 src-y
|
||
e LBXPINT16 dst-x
|
||
f LBXPINT16 dst-y
|
||
g LBXCARD16 width
|
||
h LBXCARD16 height
|
||
p unused, p=Lpad
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#11409">See
|
||
LbxCopyArea</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxCopyPlane</emphasis>
|
||
1 CARD8 opcode
|
||
1 27 lbx opcode
|
||
2 L request length
|
||
4 CARD32 bit plane
|
||
1 CARD8 source drawable cache entry
|
||
1 LBXGCANDDRAWENT cache entries
|
||
4 or 0 DRAWABLE optional source drawable
|
||
b LBXGCANDDRAWUPDATE optional gc and dest drawable
|
||
c LBXPINT16 src-x
|
||
d LBXPINT16 src-y
|
||
e LBXPINT16 dst-x
|
||
f LBXPINT16 dst-y
|
||
g LBXCARD16 width
|
||
h LBXCARD16 height
|
||
p unused, p=Lpad
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#36772">See
|
||
LbxCopyPlane</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxPolyText8</emphasis>
|
||
1 CARD8 opcode
|
||
1 28 lbx opcode
|
||
2 L request length
|
||
1 LBXGCANDDRAWENT cache entries
|
||
a LBXGCANDDRAWUPDATE optional gc and drawable
|
||
b LBXPINT16 x
|
||
c LBXPINT16 y
|
||
n LISTofTEXTITEM8 items
|
||
p unused, p=Lpad
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#23201">See
|
||
LbxPolyText8</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxPolyText16</emphasis>
|
||
1 CARD8 opcode
|
||
1 29 lbx opcode
|
||
2 L request length
|
||
1 LBXGCANDDRAWENT cache entries
|
||
a LBXGCANDDRAWUPDATE optional gc and drawable
|
||
b LBXPINT16 x
|
||
c LBXPINT16 y
|
||
2n LISTofTEXTITEM16 items
|
||
p unused, p=Lpad
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#13228">See
|
||
LbxPolyText16</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxImageText8</emphasis>
|
||
1 CARD8 opcode
|
||
1 30 lbx opcode
|
||
2 L request length
|
||
1 LBXGCANDDRAWENT cache entries
|
||
a LBXGCANDDRAWUPDATE optional gc and drawable
|
||
b LBXPINT16 x
|
||
c LBXPINT16 y
|
||
n STRING8 string
|
||
p unused, p=Lpad
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#10990">See
|
||
LbxImageText8</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxImageText16</emphasis>
|
||
1 CARD8 opcode
|
||
1 31 lbx opcode
|
||
2 L request length
|
||
1 LBXGCANDDRAWENT cache entries
|
||
a LBXGCANDDRAWUPDATE optional gc and drawable
|
||
b LBXPINT16 x
|
||
c LBXPINT16 y
|
||
2n STRING16 string
|
||
p unused, p=Lpad
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#39584">See
|
||
LbxImageText16</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxQueryExtension</emphasis>
|
||
1 CARD8 opcode
|
||
1 32 lbx opcode
|
||
2 2+(n+p)/4 request length
|
||
4 n length of extension name
|
||
n STRING8 extension name
|
||
p unused, p=pad(n)
|
||
=>
|
||
1 1 Reply
|
||
1 n number of requests in the extension
|
||
2 CARD16 sequence number
|
||
4 0 or 2*(m + p) reply length, m = (n+7)/8
|
||
1 BOOL present
|
||
1 CARD8 major opcode
|
||
1 CARD8 first event
|
||
1 CARD8 first error
|
||
20 unused
|
||
m LISTofMASK optional reply-mask
|
||
p unused, p=pad(m)
|
||
m LISTofMASK optional event-mask
|
||
p unused, p=pad(m)
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#36662">See
|
||
LbxQueryExtension</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxPutImage</emphasis>
|
||
1 CARD8 opcode
|
||
1 33 lbx opcode
|
||
2 L request length
|
||
1 CARD8 compression method
|
||
1 LBXGCANDDRAWENT cache entries
|
||
a PIPACKED bit-packed
|
||
b LBXGCANDDRAWUPDATE optional gc and drawable
|
||
c LBXCARD16 width
|
||
d LBXCARD16 height
|
||
e LBXPINT16 x
|
||
f LBXPINT16 y
|
||
n LISTofBYTE compressed image data
|
||
p unused, p=Lpad
|
||
</literallayout>
|
||
|
||
<para>
|
||
If there is no left padding and the depth is less than or equal to nine,
|
||
PIPPACKED is encoded as follows:
|
||
</para>
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>PIPACKED</emphasis>
|
||
1 #x80 | (format << 5) | ((depth -1) << 2)
|
||
</literallayout>
|
||
|
||
<para>
|
||
Otherwise PIPACKED is defined as:
|
||
</para>
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>PIPACKED</emphasis>
|
||
1 (depth -1) << 2)
|
||
1 (format << 5) | left-pad
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#21218">See
|
||
LbxPutImage</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxGetImage</emphasis>
|
||
1 CARD8 opcode
|
||
1 34 lbx opcode
|
||
2 6 request length
|
||
4 DRAWABLE drawable
|
||
2 INT16 x
|
||
2 INT16 y
|
||
2 CARD16 width
|
||
2 CARD16 height
|
||
4 CARD32 plane mask
|
||
1 CARD8 format
|
||
3 unused
|
||
=>
|
||
1 1 Reply
|
||
1 CARD8 depth
|
||
2 CARD16 sequence number
|
||
4 (n+p)/4 reply length
|
||
4 (m+p)/4 X reply length; if uncompressed, m=n
|
||
4 VISUALID visual
|
||
0 None
|
||
1 compression method
|
||
15 unused
|
||
n LISTofBYTE data
|
||
p unused, p=pad(n)
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#26896">See
|
||
LbxGetImage</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxBeginLargeRequest</emphasis>
|
||
1 CARD8 opcode
|
||
1 35 lbx opcode
|
||
2 2 request length
|
||
4 CARD32 large request length
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#31209">See
|
||
LbxBeginLargeRequest</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxLargeRequestData</emphasis>
|
||
1 CARD8 opcode
|
||
1 36 lbx opcode
|
||
2 1+n request length
|
||
4n LISTofBYTE data
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#36982">See
|
||
LbxLargeRequestData</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxEndLargeRequest</emphasis>
|
||
1 CARD8 opcode
|
||
1 37 lbx opcode
|
||
2 1 request length
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#31841">See
|
||
LbxEndLargeRequest</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxInternAtoms</emphasis>
|
||
1 CARD8 opcode
|
||
1 38 lbx opcode
|
||
2 1+(2+m+n+p)/4 request length
|
||
2 m num-atoms
|
||
n LISTofLONGSTR names
|
||
p pad p=Lpad
|
||
=>
|
||
1 1 Reply
|
||
1 unused
|
||
2 CARD16 sequence number
|
||
4 a reply length, a = MAX(m - 6, 0)
|
||
4*m LISTofATOM atoms
|
||
p pad p = MAX(0, 4*(6 - m))
|
||
|
||
LONGSTR
|
||
2 c string length
|
||
c STRING8 string
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#21636">See
|
||
LbxInternAtoms</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxGetWinAttrAndGeom</emphasis>
|
||
1 CARD8 opcode
|
||
1 39 lbx opcode
|
||
2 2 request length
|
||
4 CARD32 window id
|
||
=>
|
||
1 1 Reply
|
||
1 backing store
|
||
0 NotUseful
|
||
1 WhenMapped
|
||
2 Always
|
||
2 CARD16 sequence number
|
||
4 7 reply length
|
||
4 VISUALID visual id
|
||
2 class
|
||
1 InputOutput
|
||
2 InputOnly
|
||
1 BITGRAVITY bit gravity
|
||
1 WINGRAVITY window gravity
|
||
4 CARD32 backing bit planes
|
||
4 CARD32 backing pixel
|
||
1 BOOL save under
|
||
1 BOOL map installed
|
||
1 map state
|
||
0 Unmapped
|
||
1 Unviewable
|
||
2 Viewable
|
||
1 BOOL override
|
||
4 COLORMAP colormap
|
||
4 SETofEVENT all events mask
|
||
4 SETofEVENT your event mask
|
||
2 SETofDEVICEEVENT do not propagate mask
|
||
2 unused
|
||
4 WINDOW root
|
||
2 INT16 x
|
||
2 INT16 y
|
||
2 CARD16 width
|
||
2 CARD16 height
|
||
2 CARD16 border width
|
||
1 CARD8 depth
|
||
1 unused
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#39382">See
|
||
LbxGetWinAttrAndGeom</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxGrabCmap</emphasis>
|
||
1 CARD8 opcode
|
||
1 40 lbx opcode
|
||
2 2 request length
|
||
4 COLORMAP colormap
|
||
=>
|
||
</literallayout>
|
||
|
||
<para>
|
||
If smart-grab is true, the reply is as follows:
|
||
</para>
|
||
|
||
<literallayout class='monospaced'>
|
||
1 1 Reply
|
||
1 #x80 flags
|
||
2 CARD16 sequence number
|
||
4 0 reply length
|
||
24 unused
|
||
|
||
If smart-grab is false, the reply is as follows:
|
||
|
||
1 1 Reply
|
||
1 flags (set of)
|
||
#x40 auto-release
|
||
#x20 three-channels
|
||
#x10 two-byte-pixels
|
||
lower four bits specifies bits-per-pixel
|
||
2 CARD16 sequence number
|
||
4 L reply length
|
||
m CHAN or CHANNELS cells (CHAN if !three-channels)
|
||
p 0 pad(m)
|
||
|
||
<emphasis role='bold'>CHANNELS</emphasis>
|
||
a CHAN red
|
||
1 5 next channel
|
||
b CHAN green
|
||
1 5 next channel
|
||
c CHAN blue
|
||
1 0 list end
|
||
|
||
<emphasis role='bold'>CHAN</emphasis>
|
||
d LISTofLBXPIXEL
|
||
|
||
<emphasis role='bold'>LBXPIXEL</emphasis>
|
||
e PIXELPRIVATE or
|
||
PIXELPRIVATERANGE or
|
||
PIXELALLOC or
|
||
PIXELALLOCRANGE
|
||
|
||
<emphasis role='bold'>PIXELPRIVATE</emphasis>
|
||
1 1 pixel-private
|
||
f PIXEL pixel
|
||
|
||
<emphasis role='bold'>PIXEL</emphasis>
|
||
f CARD8 or CARD16 (CARD8 if !two-byte-pixels)
|
||
|
||
<emphasis role='bold'>PIXELPRIVATERANGE</emphasis>
|
||
1 2 pixel-private-range
|
||
f PIXEL fist-pixel
|
||
f PIXEL last-pixel
|
||
|
||
<emphasis role='bold'>PIXELALLOC</emphasis>
|
||
1 3 pixel-private
|
||
f PIXEL pixel
|
||
g COLORSINGLE or COLORTRIPLE color (COLORSINGLE if
|
||
three-channels)
|
||
|
||
<emphasis role='bold'>COLORSINGLE</emphasis>
|
||
h CARD8 or CARD16 value (CARD8 if bits-per-rgb =< 7)
|
||
|
||
<emphasis role='bold'>COLORTRIPLE</emphasis>
|
||
h COLORSINGLE red
|
||
h COLORSINGLE green
|
||
h COLORSINGLE blue
|
||
|
||
<emphasis role='bold'>PIXELALLOCRANGE</emphasis>
|
||
1 4 pixel-private
|
||
f PIXEL first-pixel
|
||
f PIXEL last-pixel
|
||
j LISTofCOLORSINGLE or color (COLORSINGLE if three-channels)
|
||
LISTofCOLORTRIPLE
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#10922">See
|
||
LbxGrabCmap</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxReleaseCmap</emphasis>
|
||
1 CARD8 opcode
|
||
1 41 lbx opcode
|
||
2 2 request length
|
||
4 COLORMAP cmap
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#34675">See
|
||
LbxReleaseCmap</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxAllocColor</emphasis>
|
||
1 CARD8 opcode
|
||
1 42 lbx opcode
|
||
2 5 request length
|
||
4 COLORMAP colormap
|
||
4 CARD32 pixel
|
||
2 CARD16 red
|
||
2 CARD16 green
|
||
2 CARD16 blue
|
||
2 unused
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#10446">See
|
||
LbxAllocColor</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxSync</emphasis>
|
||
1 CARD8 opcode
|
||
1 43 lbx opcode
|
||
2 1 request length
|
||
=>
|
||
1 1 Reply
|
||
1 n unused
|
||
2 CARD16 sequence number
|
||
4 0 reply length
|
||
24 unused
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this request is on <ulink url="lbx.htm#30719">See
|
||
LbxSync</ulink>.
|
||
</para>
|
||
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='events2'>
|
||
<title>Events</title>
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxSwitchEvent</emphasis>
|
||
1 base + 0 code
|
||
1 0 lbx type
|
||
2 CARD16 sequence number
|
||
4 CARD32 client
|
||
24 unused
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this event is on <ulink url="lbx.htm#33748">See
|
||
LbxSwitchEvent</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxCloseEvent</emphasis>
|
||
1 base + 0 code
|
||
1 1 lbx type
|
||
2 CARD16 sequence number
|
||
4 CARD32 client
|
||
24 unused
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this event is on <ulink url="lbx.htm#17292">See
|
||
LbxCloseEvent</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxInvalidateTagEvent</emphasis>
|
||
1 base + 0 code
|
||
1 3 lbx type
|
||
2 CARD16 sequence number
|
||
4 CARD32 tag
|
||
4 tag-type
|
||
1 <emphasis>LbxTagTypeModmap</emphasis>
|
||
2 <emphasis>LbxTagTypeKeymap</emphasis>
|
||
3 <emphasis>LbxTagTypeProperty</emphasis>
|
||
4 <emphasis>LbxTagTypeFont</emphasis>
|
||
5 <emphasis>LbxTagTypeConnInfo</emphasis>
|
||
20 unused
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this event is on <ulink url="lbx.htm#23016">See
|
||
LbxInvalidateTagEvent</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxSendTagDataEvent</emphasis>
|
||
1 base + 0 code
|
||
1 4 lbx type
|
||
2 CARD16 sequence number
|
||
4 CARD32 tag
|
||
4 tag-type
|
||
3 <emphasis>LbxTagTypeProperty</emphasis>
|
||
20 unused
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this event is on <ulink url="lbx.htm#20373">See
|
||
LbxSendTagDataEvent</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxListenToOne</emphasis>
|
||
1 base + 0 code
|
||
1 5 lbx type
|
||
2 CARD16 sequence number
|
||
4 CARD32 client
|
||
<emphasis>#xFFFFFFFF</emphasis>
|
||
a client not managed by the proxy
|
||
24 unused
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this event is on <ulink url="lbx.htm#25209">See
|
||
LbxListenToOne</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxListenToAll</emphasis>
|
||
1 base + 0 code
|
||
1 6 lbx type
|
||
2 CARD16 sequence number
|
||
28 unused
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this event is on <ulink url="lbx.htm#11095">See
|
||
LbxListenToAll</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxQuickMotionDeltaEvent</emphasis>
|
||
1 base + 1 code
|
||
1 CARD8 delta-time
|
||
1 INT8 delta-x
|
||
1 INT8 delta-y
|
||
</literallayout>
|
||
|
||
<para>
|
||
This event is not padded to 32 bytes.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The description of this event is on <ulink url="lbx.htm#40268">See
|
||
LbxQuickMotionDeltaEvent</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxMotionDeltaEvent</emphasis>
|
||
1 base + 0 code
|
||
1 7 lbx type
|
||
1 INT8 delta-x
|
||
1 INT8 delta-y
|
||
2 CARD16 delta-time
|
||
2 CARD16 delta-sequence
|
||
</literallayout>
|
||
|
||
<para>
|
||
This event is not padded to 32 bytes.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The description of this event is on <ulink url="lbx.htm#30033">See
|
||
LbxMotionDeltaEvent</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxReleaseCmapEvent</emphasis>
|
||
1 base + 0 code
|
||
1 8 lbx type
|
||
2 CARD16 sequence number
|
||
4 COLORMAP colormap
|
||
24 unused
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this event is on <ulink url="lbx.htm#19129">See
|
||
LbxReleaseCmapEvent</ulink>.
|
||
</para>
|
||
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxFreeCellsEvent</emphasis>
|
||
1 base + 0 code
|
||
1 9 lbx type
|
||
2 CARD16 sequence number
|
||
4 COLORMAP colormap
|
||
4 PIXEL pixel start
|
||
4 PIXEL pixel end
|
||
16 unused
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this event is on <ulink url="lbx.htm#38041">See
|
||
LbxFreeCellsEvent</ulink>.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='re_encoding_of_x_events'>
|
||
<title>Re-encoding of X Events</title>
|
||
|
||
<para>
|
||
The X protocol requires all X events to be 32 bytes. The LBX server reduces the
|
||
number of bytes sent between the server and the proxy for some X events by not
|
||
appending unused pad bytes to the event data. The offsets of X event data are
|
||
unchanged. The proxy will pad the events to 32 bytes before passing them on to
|
||
the client.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
LBX reencodes X event representations into the following sizes, if squishing is
|
||
enabled:
|
||
</para>
|
||
|
||
<para><programlisting>
|
||
KeyOrButton 32
|
||
EnterOrLeave 32
|
||
Keymap 32
|
||
Expose 20
|
||
GraphicsExposure 24
|
||
NoExposure 12
|
||
VisibilityNotify 12
|
||
CreateNotify 24
|
||
DestroyNotify 12
|
||
UnmapNotify 16
|
||
MapNotify 16
|
||
MapRequest 12
|
||
Reparent 24
|
||
ConfigureNotify 28
|
||
ConfigureRequest 28
|
||
GravityNotify 16
|
||
ResizeRequest 12
|
||
Circulate 20
|
||
Property Notify 20
|
||
SelectionClear 20
|
||
SelectionRequest 28
|
||
SelectionNotify 24
|
||
Colormap Notify 16
|
||
MappingNotify 8
|
||
ClientMessage 32
|
||
Unknown 32
|
||
</programlisting></para>
|
||
|
||
</sect2>
|
||
<sect2 id='responses2'>
|
||
<title>Responses</title>
|
||
|
||
<literallayout class='monospaced'>
|
||
<emphasis role='bold'>LbxDeltaResponse</emphasis>
|
||
1 event_base + 0 event code
|
||
1 2 lbx type
|
||
2 1+(2+2n+p)/4 request length
|
||
1 n count of diffs
|
||
1 CARD8 cache index
|
||
2n LISTofDIFFITEM offsets and differences
|
||
p unused, p=pad(2n)
|
||
</literallayout>
|
||
|
||
<para>
|
||
The description of this response is on <ulink url="lbx.htm#34042">See
|
||
LbxDeltaResponse</ulink>.
|
||
</para>
|
||
|
||
</sect2>
|
||
</sect1>
|
||
</article>
|