1<?xml version="1.0" encoding="UTF-8" ?>
2<!DOCTYPE article
3          PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
4          "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
5[
6<!ENTITY % defs SYSTEM "defs.ent"> %defs;
7]>
8
9<article id="lbx">
10
11<articleinfo>
12   <title>Low Bandwidth X Extension</title>
13   <subtitle>X Consortium Standard</subtitle>
14   <authorgroup>
15     <author>
16       <firstname>Donna</firstname>
17       <surname>Converse</surname>
18     </author>
19     <author>
20       <firstname>Jim</firstname>
21       <surname>Fulton</surname>
22     </author>
23     <author>
24       <firstname>David</firstname>
25       <surname>Lemke</surname>
26     </author>
27     <author>
28       <firstname>Ralph</firstname>
29       <surname>Mor</surname>
30     </author>
31     <author>
32       <firstname>Keith</firstname>
33       <surname>Packard</surname>
34     </author>
35     <author>
36       <firstname>Ray</firstname>
37       <surname>Tice</surname>
38     </author>
39     <author>
40       <firstname>Dale</firstname>
41       <surname>Tonogai</surname>
42     </author>
43   </authorgroup>
44   <releaseinfo>X Version 11, Release &fullrelvers;</releaseinfo>
45   <releaseinfo>Version 1.0</releaseinfo>
46   <copyright><year>1996</year><holder>X Consortium</holder></copyright>
47
48<legalnotice>
49<para>
50Permission is hereby granted, free of charge, to any person obtaining a copy of
51this software and associated
52documentation files (the "Software"), to deal in the Software without
53restriction, including without limitation
54the rights to use, copy, modify, merge, publish, distribute, sublicense, and
55sell copies of the Software,
56and to permit persons to whom the Software is furnished to do so, subject to
57the following conditions:
58</para>
59<para>
60The above copyright notice and this permission notice shall be included in all
61copies or substantial portions
62of the Software.
63</para>
64<para>
65THE SOFTWARE IS PROVIDED &ldquo;AS IS&rdquo;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
66IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
67FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X
68CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
69AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
70WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
71</para>
72<para>
73Except as contained in this notice, the name of the X Consortium shall not be
74used in advertising or otherwise
75to promote the sale, use or other dealings in this Software without prior
76written authorization from the
77X Consortium.
78</para>
79<para>X Window System is a trademark of The OpenGroup.</para>
80</legalnotice>
81</articleinfo>
82
83<sect1 id='introduction'>
84<title>Introduction</title>
85
86<para>
87Low Bandwidth X (LBX) is a network-transparent protocol for running X Window
88System applications over transport channels whose bandwidth and latency are
89significantly worse than that used in local area networks. It combines a
90variety of caching and reencoding techniques to reduce the volume of data that
91must be sent over the wire. It can be used with existing clients by placing a
92proxy between the clients and server, so that the low bandwidth/high latency
93communication occurs between the proxy and server.
94</para>
95
96
97<para>
98This extension was designed and implemented by Jim Fulton, David Lemke, Keith
99Packard, and Dale Tonogai, all of Network Computing Devices (NCD). Chris Kent
100Kantarjiev (Xerox PARC) participated in early design discussions. Ralph Mor (X
101Consortium) designed and implemented additional sections. Donna Converse (X
102Consortium) authored the protocol description and encoding from design notes
103and the implementation. Ray Tice (X Consortium) resolved the open issues in the
104design and specification. Bob Scheifler (X Consortium) helped out in many areas.
105</para>
106
107
108<para>
109The extension name is &quot;LBX&quot;.
110</para>
111
112
113</sect1>
114<sect1 id='description'>
115<title>Description</title>
116
117<para>
118The design center for LBX is to use a proxy as an intermediary between the
119client and server. The proxy reencodes and compresses requests, events, replies
120and errors, as well as the resulting data stream. Additionally, the proxy can
121cache information from the server to provide low-latency replies to clients.
122This reply generation by the proxy is known as short-circuiting. A proxy can
123handle multiple clients for a given server, but does not prevent clients from
124connecting directly to the server. The design allows the proxy to multiplex
125multiple clients into a single data stream to the server.
126</para>
127
128
129<para>
130Much of LBX is implemented as an extension. The compression and reencoding
131changes can be isolated to the transport and dispatch portions of the server,
132while short-circuiting requires minor changes to the server’s colormap and
133property code.
134</para>
135
136
137<para>
138LBX employs several different compression and short-circuiting methods. Use of
139these methods is negotiable, and in some cases, the algorithm used by a given
140method is negotiable as well. LBX also provides for negotiation of extensions
141to LBX.
142</para>
143
144
145<sect2 id='data_flow'>
146<title>Data Flow</title>
147
148<para>
149The LBX data stream goes through a number of layers:
150</para>
151
152
153<orderedlist>
154  <listitem>
155<para>Client requests</para>
156  </listitem>
157  <listitem>
158<para>Read by LBX and potential byte-swapping</para>
159  </listitem>
160  <listitem>
161<para>Request-specific compression</para>
162  </listitem>
163  <listitem>
164<para>Potential byte swapping</para>
165  </listitem>
166  <listitem>
167<para>Multiplexing of client request streams</para>
168  </listitem>
169  <listitem>
170<para>Delta replacement</para>
171  </listitem>
172  <listitem>
173<para>Stream compression</para>
174  </listitem>
175</orderedlist>
176
177<para>
178Transport
179</para>
180
181<!-- FIXME:  descending -->
182<orderedlist>
183  <listitem>
184<para>Stream decompression</para>
185  </listitem>
186  <listitem>
187<para>Delta substitution</para>
188  </listitem>
189  <listitem>
190<para>Demultiplexing of client request streams</para>
191  </listitem>
192  <listitem>
193<para>Potential byte swapping</para>
194  </listitem>
195  <listitem>
196<para>Reencoding</para>
197  </listitem>
198  <listitem>
199<para>Request processing</para>
200  </listitem>
201</orderedlist>
202
203<para>
204The reverse process occurs with X server replies, events, and errors.
205</para>
206
207
208</sect2>
209<sect2 id='tags'>
210<title>Tags</title>
211
212<para>
213Tags are used to support caching of large data items that are expected to be
214queried multiple times. Such things as the keyboard map and font metrics are
215often requested by multiple clients. Rather than send the data each time, the
216first time the data is sent it includes a tag. The proxy saves this data, so
217that subsequent requests can send only the tag to refer to that same data. The
218different types of tags are used for connection information, keyboard maps,
219modifier maps, fonts information and properties.
220</para>
221
222
223<para>
224Tag usage is negotiated as a boolean in the <emphasis>
225LbxStartProxy</emphasis>
226 message. The proxy controls how many tags are stored in the proxy. The server
227may wish to observe the proxy’s InvalidateTag behavior to limit how many tags
228are cached at any one time. Tagged data is not shared across types of tags, but
229the number space used for the tag ids is. The tag ids are generated by the
230server.
231</para>
232
233
234<para>
235The X server keeps track of what tags are known to the proxy. The proxy can
236invalidate a tag if no tag bearing replies of that type are pending. The proxy
237sends an <emphasis>
238LbxInvalidateTag</emphasis>
239 message to release the tagged data. The proxy must not invalidate connection
240tags unless instructed to do so by the server.
241</para>
242
243
244<para>
245If the server wishes to discard tagged data, it must either have received an
246<emphasis>
247LbxInvalidateTag</emphasis>
248 request from the proxy or send an <emphasis>
249LbxInvalidateTag</emphasis>
250 event to the proxy for that tag.
251</para>
252
253
254<sect3 id='tag_substitution_in_requests'>
255<title>Tag Substitution in Requests</title>
256
257<para>
258Many substitution requests have a tag field, followed by fields marked
259optional. For these requests, if the optional fields are present, the
260data in them is stored in the indicated tag, unless the tag is 0. If
261the optional fields are absent, the tag field indicates the tag that
262contains the data for the &quot;optional&quot; fields.
263</para>
264
265
266</sect3>
267<sect3 id='property_tags'>
268<title>Property Tags</title>
269
270<para>
271Property data makes special use of tags. A common use of properties is for
272inter-client communication. If both clients use the proxy, it is wasteful to
273send the data to the server and then back, when the server may never need it.
274<emphasis>
275LbxChangeProperty</emphasis>
276 request does the same work as the core <emphasis>
277ChangeProperty</emphasis>
278 request, but it does not send the data. The reply to this request contains a
279tag id corresponding to the data. If the property information is used locally,
280the server responds to <emphasis>
281LbxGetProperty</emphasis>
282 with the tag, and the property data need never be sent to the server. If the
283server does require the data, it can issue an <emphasis>
284LbxQueryTag</emphasis>
285 message. The proxy can also send the data on at any time if it judges it
286appropriate (i.e., when the wire goes idle). Since the proxy owns the property
287data, it must not invalidate the tag before sending the data back to the server
288via an <emphasis>
289LbxTagData</emphasis>
290 request.
291</para>
292
293
294</sect3>
295</sect2>
296<sect2 id='short_circuiting'>
297<title>Short-circuiting</title>
298
299<para>
300Short-circuiting is used to handle constant data. This includes atoms, color
301name/RGB mappings, and <emphasis>
302AllocColor</emphasis>
303 calls. Atoms and color name/RGB mappings stay constant for the life of the
304server. <emphasis>
305AllocColor</emphasis>
306<emphasis>
307 </emphasis>
308replies are constant for each colormap. Short-circuiting replaces round-trip
309requests with one-way requests, and can sometimes use one in place of many.
310</para>
311
312
313<para>
314Atoms are used heavily for ICCCM communication. Once the proxy knows the string
315to atom mapping, it has no need to send subsequent requests for this atom to
316the server.
317</para>
318
319
320<para>
321Colorname/RGB mappings are constant, so once the proxy sees the response from
322<emphasis>
323LookupColor</emphasis>
324, it need not forward any subsequent requests.
325</para>
326
327
328<para>
329Clients often use the same color cells, so once a read-only color allocation
330has occurred, the proxy knows what RGB values should be returned to the client.
331The proxy doesn't need to forward any <emphasis>
332AllocColor</emphasis>
333 requests it can resolve, but it must tell the server to modify the color
334cell's reference count. <emphasis>
335LbxIncrementPixel</emphasis>
336 is used to support this.
337</para>
338
339
340<para>
341For all three classes of short-circuiting, the proxy must still tell the server
342a request has occurred, so that the request sequence numbers stay in sync. This
343is done with <emphasis>
344LbxModifySequence</emphasis>
345.
346</para>
347
348
349<para>
350Sequence numbers cause the major complication with short-circuiting. X
351guarantees that any replies, events or errors generated by a previous request
352will be sent before those of a later request. This means that any requests that
353can be handled by the proxy must have their reply sent after any previous
354events or errors.
355</para>
356
357
358<para>
359If a proxy’s applications do not require strict adherence to the X protocol
360ordering of errors or events, a proxy might provide further optimization by
361avoiding the overhead of maintaining this ordering, however, the resulting
362protocol is not strictly X11 compliant.
363</para>
364
365
366</sect2>
367<sect2 id='graphics_re_encoding'>
368<title>Graphics Re-encoding</title>
369
370<para>
371The LBX proxy attempts to reencode <emphasis>PolyPoint</emphasis>,
372<emphasis>PolyLine</emphasis>, <emphasis>PolySegment</emphasis>,
373<emphasis>PolyRectangle</emphasis>, <emphasis>PolyArc</emphasis>,
374<emphasis>FillPoly</emphasis>, <emphasis>PolyFillRectangle</emphasis>,
375<emphasis>PolyFillArc</emphasis>, <emphasis>CopyArea</emphasis>,
376<emphasis>CopyPlane</emphasis>, <emphasis>PolyText8</emphasis>,
377<emphasis>PolyText16</emphasis>, <emphasis>ImageText8</emphasis>,
378and <emphasis>ImageText16</emphasis> requests. If the request can be
379reencoded, it may be replaced by an equivalent LBX form of the request.
380The requests are reencoded by attempting to reduce 2-byte coordinate,
381length, width and angle fields to 1 byte. Where applicable, the
382coordinate mode is also converted to <emphasis>Previous</emphasis>
383 to improve the compressibility of the resulting data. In image requests,
384the image data may also be compressed.
385</para>
386
387</sect2>
388<sect2 id='motion_events'>
389<title>Motion events</title>
390
391<para>
392To prevent clogging the wire with <emphasis>MotionNotify</emphasis>
393 events, the server and proxy work together to control the number
394of events on the wire. This is done with the
395<emphasis>LbxAllowMotion</emphasis>
396 request. The request adds an amount to an allowed motion count in
397the server, which is kept on a per-proxy basis. Every motion notify
398event sent to the proxy decrements the allowed motion counter. If
399the allowed motion count is less than or equal to zero, motion
400events not required by the X protocol definition are not sent to the
401proxy. The allowed motion counter has a minimum value of -2^31.
402</para>
403
404</sect2>
405<sect2 id='event_squishing'>
406<title>Event Squishing</title>
407
408<para>
409In the core protocol, all events are padded as needed to be 32 bytes long. The
410LBX extension reduces traffic by removing padding at the end of events, and
411implying the event length from its type. This is known as squishing.
412</para>
413
414</sect2>
415<sect2 id='master_client_'>
416<title>Master Client </title>
417
418<para>
419When the initial X connection between the proxy and the server is converted to
420LBX mode, the proxy itself becomes the master client. New client requests and
421some tag messages are sent in the context of the master client.
422</para>
423
424
425</sect2>
426<sect2 id='multiplexing_of_clients'>
427<title>Multiplexing of Clients</title>
428
429<para>
430The LBX proxy multiplexes the data streams of all its clients into one stream,
431and then splits them apart again when they are received. The <emphasis>
432LbxSwitch</emphasis>
433 message is used to tell each end which client is using the wire at the time.
434</para>
435
436
437<para>
438The server should process delta requests in the order that they appear on the
439LBX connection. If the server does not maintain the interclient request order
440for requests sent by the proxy, it must still obey the semantics implied by the
441interclient request order so that the delta cache functions correctly.
442</para>
443
444
445<para>
446The server can affect the multiplexing of clients by the proxy using the
447<emphasis>
448LbxListenToOne</emphasis>
449 and <emphasis>
450LbxListenToAll</emphasis>
451 messages. This is useful during grabs, since the master connection can not be
452blocked during grabs like other clients. The proxy is responsible for tracking
453server grabs issued by its clients so that the proxy can multiplex the client
454streams in an order executable by the server.
455</para>
456
457
458<para>
459Replies must be ordered in the multiplexed data stream from the server to the
460proxy such that the reply carrying tagged data precedes replies that refer to
461that tagged data.
462</para>
463
464
465</sect2>
466<sect2 id='swapping'>
467<title>Swapping</title>
468
469<para>
470Swapping is handled as with any X extension, with one caveat. Since a proxy can
471be supporting clients with different byte orders, and they all share the same
472wire, the length fields of all messages between the server and proxy are
473expressed in the proxy byte order. This prevents any problems with length
474computation that may occur when clients are switched.
475</para>
476
477
478</sect2>
479<sect2 id='delta_cache'>
480<title>Delta cache</title>
481
482<para>
483LBX takes advantage of the fact that an X message may be very similar to one
484that has been previously sent. For example, a <emphasis>
485KeyPress</emphasis>
486 event may differ from a previous <emphasis>
487KeyPress</emphasis>
488 event in just a few bytes. By sending just the bytes that differ (or
489"deltas"), the number of bytes sent over the wire can be substantially reduced.
490Delta compaction is used on requests being sent by the proxy as well as on
491replies and events being sent by the server.
492</para>
493
494
495<para>
496The server and the proxy each keep per-proxy request and response caches. The
497response cache contains events, errors and replies. All messages are saved in
498the appropriate delta cache if they are of an appropriate type and more than 8
499bytes long but fit within the delta cache. The number of entries in the delta
500cache and the maximum saved message size are negotiated in the <emphasis>
501LbxStartProxy</emphasis>
502 request.
503</para>
504
505
506<para>
507The LBX requests that are never stored in the request delta cache are the
508<emphasis>
509LbxQueryVersion</emphasis>
510, <emphasis>
511LbxStartProxy</emphasis>
512, <emphasis>
513LbxSwitch</emphasis>
514, <emphasis>
515LbxNewClient</emphasis>
516, <emphasis>
517LbxAllowMotion</emphasis>
518, <emphasis>
519LbxDelta</emphasis>
520, <emphasis>
521LbxQueryExtension</emphasis>
522, <emphasis>
523LbxPutImage</emphasis>
524, <emphasis>
525LbxGetImage</emphasis>
526, <emphasis>
527LbxBeginLargeRequest</emphasis>
528, <emphasis>
529LbxLargeRequestData</emphasis>
530, <emphasis>
531LbxEndLargeRequest</emphasis>
532 and <emphasis>
533LbxInternAtoms</emphasis>
534 requests. The responses that are never stored in the response cache are
535<emphasis>
536LbxSwitchEvent</emphasis>
537 and <emphasis>
538LbxDeltaResponse</emphasis>
539. The message carried by a <emphasis>
540delta </emphasis>
541message is also cached, if it meets the other requirements. Messages after the
542<emphasis>
543LbxStartProxy</emphasis>
544 request are cached starting at index 0, and incrementing the index, modulo the
545number of entries, thereafter. The request and response caches are
546independently indexed.
547</para>
548
549
550<para>
551If the current message is cachable and the same length as a message in the
552corresponding delta cache, a delta message may be substituted in place of the
553original message in the protocol stream.
554</para>
555
556
557</sect2>
558<sect2 id='stream_compression'>
559<title>Stream Compression</title>
560
561<para>
562Before being passed down to the transport layer messages can be passed through
563a general purpose data compressor. The choice of compression algorithm is
564negotiated with <ulink url="lbx.htm#20870">See LbxStartProxy</ulink>. The proxy
565and server are not required to support any specific stream compressor. As an
566example, however, the X Consortium implementation of a ZLIB based compressor is
567described below.
568</para>
569
570<note><para>
571The XC-ZLIB compressor is presented with a simple byte stream - the X and LBX
572message boundaries are not apparent. The data is broken up into fixed sized
573blocks. Each block is compressed using zlib 1.0 (by Gailly &amp; Adler), then a
574two byte header is prepended, and then the entire packet is transmitted. The
575header has the following information:
576</para></note>
577<para><programlisting>
578      out[0] = (length &amp; 0xfff) &gt;&gt; 8 | ((compflag) ? 0x80 : 0);
579      out[1] = length &amp; 0xff;
580</programlisting></para>
581
582</sect2>
583<sect2 id='authentication_protocols'>
584<title>Authentication Protocols</title>
585
586<para>
587The current version of LBX does not support multipass authentication protocols
588for clients of the proxy. These authentication protocols return an <emphasis>
589Authenticate</emphasis>
590 message in response to a connection setup request, and require additional
591authentication data from the client after the <emphasis>
592LbxNewClient</emphasis>
593 request, and before the reply to <emphasis>
594LbxNewClient</emphasis>
595. One example of such a protocol is XC-QUERY-SECURITY-1.
596</para>
597
598
599</sect2>
600</sect1>
601<sect1 id='c_library_interfaces_'>
602<title>C Library Interfaces </title>
603
604<para>
605The C Library routines for LBX are in the Xext library. The prototypes are
606located in a file named &quot;XLbx.h&quot;.
607</para>
608
609
610<sect2 id='application_library_interfaces'>
611<title>Application Library Interfaces</title>
612
613<para>
614In a proxy environment, applications do not need to call these routines to take
615advantage of LBX. Clients can, however, obtain information about the LBX
616extension to the server using this interface. Use of this routine may be
617altered when connected through a proxy, as described in <ulink
618url="lbx.htm#33319">See C Library Interfaces</ulink>.
619</para>
620
621
622<sect3 id='xlbxqueryversion'>
623<title>XLbxQueryVersion</title>
624
625<para>
626To determine the version of LBX supported by the X server, call <emphasis>
627XLbxQueryVersion</emphasis>
628.
629</para>
630
631<funcsynopsis>
632<funcprototype>
633<funcdef>Bool <function>XLbxQueryVersion</function></funcdef>
634      <paramdef>Display * <parameter>display</parameter></paramdef>
635      <paramdef>int * <parameter>major_version_return</parameter></paramdef>
636      <paramdef>int * <parameter>minor_version_return</parameter></paramdef>
637</funcprototype>
638</funcsynopsis>
639
640<variablelist>
641  <varlistentry>
642    <term>display</term>
643    <listitem><para>Specifies the connection to the X server.</para></listitem>
644  </varlistentry>
645  <varlistentry>
646    <term>major_version_return</term>
647    <listitem><para>Returns the extension major version number.</para></listitem>
648  </varlistentry>
649  <varlistentry>
650    <term>minor_version_return</term>
651    <listitem><para>Returns the extension minor version number.</para></listitem>
652  </varlistentry>
653</variablelist>
654
655<para>
656The <emphasis>
657XLbxQueryVersion</emphasis>
658 function determines if the LBX extension is present. If the extension is not
659present, <emphasis>
660XLbxQueryVersion</emphasis>
661 returns <emphasis>
662False</emphasis>
663; otherwise, it returns <emphasis>
664True</emphasis>
665. If the extension is present, <emphasis>
666XLbxQueryVersion</emphasis>
667 returns the major and minor version numbers of the extension as supported by
668the X server.
669</para>
670
671
672</sect3>
673</sect2>
674<sect2 id='proxy_library_interfaces'>
675<title>Proxy Library Interfaces</title>
676
677<para>
678The following interfaces are intended for use by the proxy.
679</para>
680
681<sect3 id='xlbxqueryextension'>
682<title>XLbxQueryExtension</title>
683
684<para>
685To determine the dynamically assigned codes for the extension, use the Xlib
686function <emphasis>
687XQueryExtension</emphasis>
688 or the LBX function <emphasis>
689XLbxQueryExtension</emphasis>
690.</para>
691
692
693<funcsynopsis>
694<funcprototype>
695<funcdef>Bool <function>XLbxQueryExtension</function></funcdef>
696      <paramdef>Display * <parameter>display</parameter></paramdef>
697      <paramdef>int * <parameter>major_opcode_return</parameter></paramdef>
698      <paramdef>int * <parameter>first_event_return</parameter></paramdef>
699      <paramdef>int * <parameter>first_error_return</parameter></paramdef>
700</funcprototype>
701</funcsynopsis>
702
703<variablelist>
704  <varlistentry>
705    <term>display</term>
706    <listitem><para>Specifies the connection to the X server.</para></listitem>
707  </varlistentry>
708  <varlistentry>
709    <term>major_opcode_return</term>
710    <listitem><para>Returns the major opcode.</para></listitem>
711  </varlistentry>
712  <varlistentry>
713    <term>first_event_return</term>
714    <listitem><para>Returns the first event code.</para></listitem>
715  </varlistentry>
716  <varlistentry>
717    <term>first_error_return</term>
718    <listitem><para>Returns the first error code.</para></listitem>
719  </varlistentry>
720</variablelist>
721
722<para>
723The <emphasis>
724XLbxQueryExtension</emphasis>
725 function determines if the LBX extension is present. If the extension is not
726present, <emphasis>
727XLbxQueryExtension</emphasis>
728 returns <emphasis>
729False</emphasis>
730; otherwise, it returns <emphasis>
731True</emphasis>
732. If the extension is present, <emphasis>
733XLbxQueryExtension</emphasis>
734 returns the major opcode for the extension to major_opcode_return, the base
735event type code to first_event_return, and the base error code to
736first_error_return; otherwise, the return values are undefined.
737</para>
738
739</sect3>
740
741<sect3 id='xlbxgeteventbase'>
742<title>XLbxGetEventBase</title>
743<para>
744To determine the base event type code, use the Xlib function <emphasis>
745XQueryExtension</emphasis>
746 or the LBX function <emphasis>
747XLbxGetEventBase</emphasis>.
748</para>
749
750
751<funcsynopsis>
752<funcprototype>
753<funcdef>int <function>XLbxGetEventBase</function></funcdef>
754      <paramdef>Display * <parameter>display</parameter></paramdef>
755</funcprototype>
756</funcsynopsis>
757
758<variablelist>
759  <varlistentry>
760    <term>display</term>
761    <listitem><para>Specifies the connection to the X server.</para></listitem>
762  </varlistentry>
763</variablelist>
764
765<para>
766The <emphasis>XLbxGetEventBase</emphasis>
767function returns the base event type code if the extension is
768present; otherwise, it returns -1.
769</para>
770
771</sect3>
772</sect2>
773</sect1>
774
775
776<sect1 id='protocol'>
777<title>Protocol</title>
778
779<sect2 id='syntactic_conventions_and_common_types'>
780<title>Syntactic Conventions and Common Types</title>
781
782<para>
783Please refer to the X Window System Protocol specification,
784as this document uses the syntactic conventions established
785there and references types defined there.
786</para>
787
788
789<para>
790The following additional types are defined by this extension:
791</para>
792
793<literallayout>
794<emphasis role='bold'>DIFFITEM</emphasis>
7951      CARD8      offset
7961      CARD8      diff
797</literallayout>
798
799<literallayout>
800<emphasis role='bold'>LBXANGLE: CARD8 or 2 BYTE</emphasis>
801      where (in order of precedence):
802      (0 &lt;= in &lt;= A(95)) &amp;&amp; !(in % A(5))       out = 0x5a + (in /
803A(5))
804      A(105) &lt;= in &lt;= A(360) &amp;&amp; !(in % A(15))      out = 0x67 +
805(in / A(15))
806      -A(100) &lt;= in &lt;= -A(5) &amp;&amp; !(in % A(5))      out = 0xa6 +
807(in / A(5))
808      -A(360) &lt; in &lt;= -A(105) &amp;&amp; !(in % A(15))      out = 0x98 +
809(in / A(15))
810      -A(360) &lt; in &lt;= A(360)      out[0] = in &gt;&gt; 8; out[1] = in
811</literallayout>
812
813<literallayout>
814<emphasis role='bold'>LBXARC:</emphasis>
815      [x, y: LBXINT16,
816      width, height: LBXCARD16,
817      angle1, angle2: LBXANGLE]
818</literallayout>
819
820<para>
821Within a list of arcs, after the first arc, x and y are
822relative to the corresponding fields of the prior arc.
823</para>
824
825<literallayout>
826<emphasis role='bold'>LBXCARD16: CARD8 or 2 BYTE</emphasis>
827      where:
828      0x0000 &lt;= in &lt; 0x00F0      CARD8
829      0x00F0 &lt;= in &lt; 0x10F0      out[0] = 0xF0 | ((in - 0xF0) &gt;&gt;
8308)
831            out[1] = in - 0xF0
832</literallayout>
833
834<literallayout>
835<emphasis role='bold'>LBXGCANDDRAWENT</emphasis>
836[ gc-cache-index, drawable-cache-index: CARD4 ]
837</literallayout>
838
839<literallayout>
840<emphasis role='bold'>LBXGCANDDRAWUPDATE</emphasis>
841      drawable: DRAWABLE      /* present only if
842<emphasis>drawable-cache-index</emphasis>
843 == 0 */
844gc: GC]      /* present only if <emphasis>gc-cache-index</emphasis> == 0 */
845</literallayout>
846
847<literallayout>
848<emphasis role='bold'>LBXGCANDDRAWABLE</emphasis>
849      cache-entries: LBXGCANDDRAWENT
850      updates: LBXGCANDDRAWUPDATE
851</literallayout>
852
853<literallayout>
854<emphasis role='bold'>LBXINT16</emphasis>: INT8 or 2 BYTE
855      where:
856      0xF790 &lt;= in &lt; 0xFF90      out[0] = 0x80 | (((in + 0x70) &gt;&gt;
8578) &amp; 0x0F)
858            out[1] = in + 0x70
859      0xFF90 &lt;= in &lt; 0x0080      CARD8
860      0x0080 &lt;= in &lt; 0x0880      out[0] = 0x80 | (((in - 0x80) &gt;&gt;
8618) &amp; 0x0F)
862            out[1] = in - 0x80
863</literallayout>
864
865<literallayout>
866<emphasis role='bold'>LBXPINT16</emphasis>: CARD8 or 2 BYTE       /* for
867usually positive numbers */
868      where:
869      0xFE00 &lt;= in &lt; 0x0000      out[0] = 0xF0 | (((in + 0x1000)
870&gt;&gt; 8) &amp; 0x0F)
871            out[1] = in + 0x1000
872      0x0000 &lt;= in &lt; 0x00F0       CARD8
873      0x00F0 &lt;= in &lt; 0x0EF0      out[0] = 0xF0 | ((in - 0xF0) &gt;&gt;8)
874            out[1] = in - 0xF0
875</literallayout>
876
877<literallayout>
878<emphasis role='bold'>LBXPOINT</emphasis>: [x, y: LBXINT16]
879      Within a list of points, after the first rectangle, x and y are
880relative to the corresponding fields of the prior point.
881</literallayout>
882
883<literallayout>
884<emphasis role='bold'>LBXRECTANGLE</emphasis>:
885      [x, y: LBXINT16,
886      width, height: LBXCARD16]
887</literallayout>
888
889<para>
890Within a list of rectangles, after the first rectangle, x and
891y are relative to the corresponding fields of the prior rectangle.
892</para>
893
894<para>
895MASK: CARD8
896</para>
897
898
899</sect2>
900<sect2 id='errors'>
901<title>Errors</title>
902
903<para>
904As with the X11 protocol, when a request terminates with an error,
905the request has no side effects (that is, there is no partial execution).
906</para>
907
908
909<para>
910There is one error, <emphasis>
911LbxClient</emphasis>
912. This error indicates that the client field of an LBX request was invalid, or
913that the proxy’s connection was in an invalid state for a start or stop proxy
914request.
915</para>
916
917
918</sect2>
919<sect2 id='requests'>
920<title>Requests</title>
921
922<para>
923There is one request that is expected to be used only by the client: <emphasis>
924LbxQueryVersion</emphasis>
925</para>
926
927
928<para>
929There is one request that is expected to be used by the client or the proxy:
930<emphasis>
931LbxQueryExtension</emphasis>
932.
933</para>
934
935
936<para>
937The following requests are expected to be used only by the proxy, and are
938instigated by the proxy: <emphasis>
939LbxStartProxy</emphasis>
940, <emphasis>
941LbxStopProxy</emphasis>
942, <emphasis>
943LbxNewClient</emphasis>
944, <emphasis>
945LbxSwitch</emphasis>
946, <emphasis>
947LbxCloseClient</emphasis>
948, <emphasis>
949LbxModifySequence</emphasis>
950, <emphasis>
951LbxAllowMotion</emphasis>
952, <emphasis>
953LbxInvalidateTag</emphasis>
954, <emphasis>
955LbxTagData</emphasis>
956 and <emphasis>
957LbxQueryTag</emphasis>
958.
959</para>
960
961
962<para>
963All other requests are sent by the proxy to the LBX server and are instigated
964by reception of an X request from the client. They replace the X request.
965</para>
966
967
968<sect3 id='requests_initiated_by_the_proxy_or_by_the_client'>
969<title>Requests Initiated by the Proxy or by the Client</title>
970
971<informaltable frame='none' tabstyle='proto'>
972  <?dbfo keep-together="always" ?>
973  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
974  <colspec colname='c1' colwidth="1.0*"/>
975  <thead>
976    <row>
977      <entry role='protoname'>LbxQueryVersion</entry>
978    </row>
979  </thead>
980  <tbody>
981    <row>
982     <entry>=&gt;;</entry>
983    </row>
984    <row>
985      <entry role='protoargs'>majorVersion: CARD16</entry>
986    </row>
987    <row>
988      <entry role='protoargs'>minorVersion: CARD16</entry>
989    </row>
990  </tbody>
991  </tgroup>
992</informaltable>
993
994<para>
995This request returns the major and minor version numbers of the LBX protocol.
996</para>
997
998
999<para>
1000The encoding of this request is on <ulink url="lbx.htm#34166">See
1001LbxQueryVersion</ulink>.
1002</para>
1003
1004
1005
1006</sect3>
1007<sect3 id='requests_initiated_or_substituted_by_the_proxy'>
1008<title>Requests Initiated or Substituted by the Proxy</title>
1009
1010<informaltable frame='none' tabstyle='proto'>
1011  <?dbfo keep-together="always" ?>
1012  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
1013  <colspec colname='c1' colwidth="1.0*"/>
1014  <thead>
1015    <row>
1016      <entry role='protoname'>LbxQueryExtension</entry>
1017    </row>
1018  </thead>
1019  <tbody>
1020    <row>
1021      <entry role='protoargs'><emphasis>
1022nbytes</emphasis>
1023: CARD32</entry>
1024    </row>
1025    <row>
1026      <entry role='protoargs'><emphasis>
1027name</emphasis>
1028: STRING8</entry>
1029    </row>
1030    <row>
1031      <entry>=&gt;</entry>
1032    </row>
1033    <row>
1034      <entry role='protoargs'>num-requests: CARD8</entry>
1035    </row>
1036    <row>
1037      <entry role='protoargs'>present: BOOL</entry>
1038    </row>
1039    <row>
1040      <entry role='protoargs'>major-opcode: CARD8</entry>
1041    </row>
1042    <row>
1043      <entry role='protoargs'>first-event: CARD8</entry>
1044    </row>
1045    <row>
1046      <entry role='protoargs'>first-error: CARD8</entry>
1047    </row>
1048    <row>
1049      <entry role='protoargs'>reply-mask: LISTofMASK      /* optional */</entry>
1050    </row>
1051    <row>
1052      <entry role='protoargs'>event-mask:LISTofMASK      /* optional */</entry>
1053    </row>
1054    <row>
1055      <entry role='protoerror'>Errors: <emphasis>
1056Alloc</emphasis>
1057</entry>
1058    </row>
1059  </tbody>
1060  </tgroup>
1061</informaltable>
1062
1063<para>
1064This request is identical to the <emphasis>
1065QueryExtension</emphasis>
1066 request, with an additional field, and two optional additional fields. When
1067the client issues an <emphasis>
1068QueryExtension</emphasis>
1069 request, the proxy will substitute an <emphasis>
1070LbxQueryExtension</emphasis>
1071 request.
1072</para>
1073
1074
1075<para>
1076This request determines if the named extension is present. If so, the major
1077opcode for the extension is returned, if it has one. Otherwise, zero is
1078returned. Any minor opcode and the request formats are specific to the
1079extension. If the extension involves additional event types, the base event
1080type code is returned. Otherwise, zero is returned. The format of events is
1081specific to the extension. If the extension involves additional error codes,
1082the base error code is returned. Otherwise, zero is returned. The format of
1083additional data in the errors is specific to the extension.
1084</para>
1085
1086
1087<para>
1088In addition, the number of requests defined by the named extension is returned.
1089If the number of requests is nonzero, and if the information is available,
1090reply-mask and event-mask will be included in the reply. The reply-mask
1091represents a bit-wise one-to-one correspondence with the extension requests.
1092The least significant bit corresponds to the first request, and the next bit
1093corresponds to the next request, and so on. Each element in the list contains
1094eight meaningful bits, except for the last element, which contains eight or
1095fewer meaningful bits. Unused bits are not guaranteed to be zero. The bit
1096corresponding to a request is set if the request could generate a reply,
1097otherwise it is zero. In the same way, the event-mask represents a bit-wise
1098one-to-one correspondence with the extension requests. A bit is set if the
1099corresponding request could result in the generation of one or more extension
1100or X11 events. If reply-mask is present in the reply, event-mask will also be
1101present.
1102</para>
1103
1104
1105<para>
1106The encoding of this request is on <ulink url="lbx.htm#37117">See
1107LbxQueryExtension</ulink>.
1108</para>
1109
1110
1111
1112</sect3>
1113<sect3 id='control_requests_initiated_by_the_proxy'>
1114<title>Control Requests Initiated by the Proxy</title>
1115
1116<informaltable frame='none' tabstyle='proto'>
1117  <?dbfo keep-together="always" ?>
1118  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
1119  <colspec colname='c1' colwidth="1.0*"/>
1120  <thead>
1121    <row>
1122      <entry role='protoname'>LbxStartProxy</entry>
1123    </row>
1124  </thead>
1125  <tbody>
1126    <row>
1127      <entry role='protoargs'><emphasis>
1128options</emphasis>
1129: LISTofOPTION</entry>
1130    </row>
1131    <row>
1132      <entry>=&gt;</entry>
1133    </row>
1134    <row>
1135      <entry role='protoargs'>choices: LISTofCHOICE</entry>
1136    </row>
1137    <row>
1138      <entry role='protoerror'>Errors: <emphasis>
1139LbxClient</emphasis>
1140, <emphasis>
1141Alloc</emphasis>
1142</entry>
1143    </row>
1144    <row>
1145      <entry>where:</entry>
1146    </row>
1147    <row>
1148      <entry role='protoargs'>OPTION       [optcode: CARD8,</entry>
1149    </row>
1150    <row>
1151      <entry role='protoargs'>      len: OPTLEN,</entry>
1152    </row>
1153    <row>
1154      <entry role='protoargs'>      option:       (See <ulink
1155url="lbx.htm#35444">See StartProxy Options</ulink>) ]</entry>
1156    </row>
1157    <row>
1158      <entry role='protoargs'>CHOICE      [optcode: CARD8,</entry>
1159    </row>
1160    <row>
1161      <entry role='protoargs'>      len: OPTLEN,</entry>
1162    </row>
1163    <row>
1164      <entry role='protoargs'>      choice:        (See <ulink
1165url="lbx.htm#35444">See StartProxy Options</ulink>) ]</entry>
1166    </row>
1167  </tbody>
1168  </tgroup>
1169</informaltable>
1170<!--
1171    <row>
1172      <entry role='protoargs'> -->
1173
1174
1175<table frame='topbot'>
1176 <title>StartProxy Options</title>
1177 <?dbfo keep-together="always" ?>
1178 <tgroup cols='4' align='left' colsep='0' rowsep='0'>
1179 <colspec colname='c1' colwidth='1.0*'/>
1180 <colspec colname='c2' colwidth='1.5*'/>
1181 <colspec colname='c3' colwidth='1.5*'/>
1182 <colspec colname='c4' colwidth='1.5*'/>
1183<thead>
1184<row rowsep='1'>
1185  <entry>optcode</entry>
1186  <entry>option</entry>
1187  <entry>choice</entry>
1188  <entry>default</entry>
1189</row>
1190</thead>
1191<tbody>
1192<row>
1193    <entry>delta-proxy</entry>
1194    <entry>DELTAOPT</entry>
1195    <entry>DELTACHOICE</entry>
1196    <entry>entries=16, maxlen=64</entry>
1197</row>
1198<row>
1199    <entry>delta-server</entry>
1200    <entry>DELTAOPT</entry>
1201    <entry>DELTACHOICE</entry>
1202    <entry>entries=16, maxlen=64</entry>
1203</row>
1204<row>
1205    <entry>stream-comp</entry>
1206    <entry>LISTofNAMEDOPT</entry>
1207    <entry>INDEXEDCHOICE</entry>
1208    <entry>No Compression</entry>
1209</row>
1210<row>
1211    <entry>bitmap-comp</entry>
1212    <entry>LISTofSTRING8</entry>
1213    <entry>LISTofINDEXEDOPT</entry>
1214    <entry>No Compression</entry>
1215</row>
1216<row>
1217    <entry>pixmap-comp</entry>
1218    <entry>LISTofPIXMAPMETHOD</entry>
1219    <entry>LISTofPIXMAPCHOICE</entry>
1220    <entry>No Compression</entry>
1221</row>
1222<row>
1223    <entry>use-squish</entry>
1224    <entry>BOOL</entry>
1225    <entry>BOOL</entry>
1226    <entry>True</entry>
1227</row>
1228<row>
1229    <entry>use-tags</entry>
1230    <entry>BOOL</entry>
1231    <entry>BOOL</entry>
1232    <entry>True</entry>
1233</row>
1234<row>
1235    <entry>colormap</entry>
1236    <entry>LISTofSTRING8</entry>
1237    <entry>INDEXEDCHOICE</entry>
1238    <entry>No Colormap Grabbing</entry>
1239</row>
1240<row>
1241    <entry>extension</entry>
1242    <entry>NAMEDOPT</entry>
1243    <entry>INDEXEDCHOICE</entry>
1244    <entry>Extension Disabled</entry>
1245  </row>
1246</tbody>
1247</tgroup>
1248</table>
1249<!--      </entry>
1250    </row>
1251-->
1252<informaltable frame='none' tabstyle='proto'>
1253  <?dbfo keep-together="always" ?>
1254  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
1255  <colspec colname='c1' colwidth="1.0*"/>
1256  <tbody>
1257    <row>
1258      <entry role='protoargs'>&nbsp;</entry>
1259    </row>
1260    <row>
1261      <entry role='protoargs'>DELTAOPT       [minN, maxN, prefN: CARD8</entry>
1262    </row>
1263    <row>
1264      <entry role='protoargs'>      minMaxMsgLen, maxMaxMsgLen, prefMaxMsgLen:
1265CARD8]</entry>
1266    </row>
1267    <row>
1268      <entry role='protoargs'>DELTACHOICE      [entries, maxlen:
1269CARD8]</entry>
1270    </row>
1271    <row>
1272      <entry role='protoargs'>INDEXEDCHOICE      [index: CARD8,</entry>
1273    </row>
1274    <row>
1275      <entry role='protoargs'>      data: LISTofBYTE]</entry>
1276    </row>
1277    <row>
1278      <entry role='protoargs'>INDEXEDOPT      [index, opcode: CARD8]</entry>
1279    </row>
1280    <row>
1281      <entry role='protoargs'>NAMEDOPT      [name: STRING8,</entry>
1282    </row>
1283    <row>
1284      <entry role='protoargs'>      detail: LISTofBYTE]</entry>
1285    </row>
1286    <row>
1287      <entry role='protoargs'>OPTLEN      1 or 3 CARD8</entry>
1288    </row>
1289    <row>
1290      <entry role='protoargs'>      where:</entry>
1291    </row>
1292    <row>
1293      <entry role='protoargs'>      (0 &lt; in &lt;= 0xFF):       out =
1294in</entry>
1295    </row>
1296    <row>
1297      <entry role='protoargs'>      (0 &lt;= in&lt;= 0xFFFF):       out[0] =
12980; out[1] = in &gt;&gt; 8; out[2] = in&amp; 0xFF;</entry>
1299    </row>
1300    <row>
1301      <entry role='protoargs'>PIXMAPMETHOD      [name: STRING8,</entry>
1302    </row>
1303    <row>
1304      <entry role='protoargs'>      format-mask: BITMASK,</entry>
1305    </row>
1306    <row>
1307      <entry role='protoargs'>      depths: LISTofCARD8]</entry>
1308    </row>
1309    <row>
1310      <entry role='protoargs'>PIXMAPCHOICE      [index, opcode: CARD8,</entry>
1311    </row>
1312    <row>
1313      <entry role='protoargs'>      format-mask: BITMASK,</entry>
1314    </row>
1315    <row>
1316      <entry role='protoargs'>      depths: LISTofCARD8]</entry>
1317    </row>
1318    <row>
1319      <entry role='protoargs'></entry>
1320    </row>
1321  </tbody>
1322  </tgroup>
1323</informaltable>
1324
1325<para>
1326This request negotiates LBX protocol options, and switches the proxy-server
1327connection from X11 protocol to LBX protocol.
1328</para>
1329
1330
1331<para>
1332The proxy gives the preferred protocol options in the request. The server
1333chooses from the given options and informs the proxy which to use. The options
1334may be listed in any order, and the proxy may choose which options to
1335negotiate. If an option is not successfully negotiated, the default is used.
1336</para>
1337
1338
1339<para>
1340The server delta cache and proxy delta caches can be configured for number of
1341entries, and the length of entries. (See <ulink url="lbx.htm#22595">See Delta
1342cache</ulink> for details.) The delta caches are configured using the <emphasis>
1343delta-server</emphasis>
1344 and <emphasis>
1345delta-proxy</emphasis>
1346 options. To configure a cache, the proxy sends the minimum, maximum and
1347preferred values for the number of cache entries, (<emphasis>
1348minN, maxN, prefN</emphasis>
1349), and the length of the cache entries, (<emphasis>
1350minMaxMsgLen, maxMaxMsgLen, prefMaxMsgLen</emphasis>
1351). The server’s reply fields, <emphasis>
1352entries</emphasis>
1353 and <emphasis>
1354maxlen</emphasis>
1355, contains the values to use. These values must be within the ranges specified
1356by the proxy. The server may also specify an <emphasis>
1357entries</emphasis>
1358 value of 0 to disable delta caching. The cache entry lengths are specified in
1359units of 4 bytes.
1360</para>
1361
1362
1363<para>
1364The stream compression algorithm is selected using the <emphasis>
1365stream-comp </emphasis>
1366option. (Stream compression is described in <ulink url="lbx.htm#11596">See
1367Stream Compression</ulink>.) Each algorithm has a name that follows the naming
1368conventions in <ulink url="lbx.htm#13570">See Algorithm Naming</ulink>. To
1369negotiate using the stream-comp option, the proxy lists its available
1370compressors. For each candidate algorithm, the proxy sends the name in the
1371<emphasis>
1372name</emphasis>
1373 field, and uses the <emphasis>
1374detail</emphasis>
1375 field to send any additional data specific to each compression algorithm. The
1376reply contains a 0-based index into the list of algorithms to indicate which
1377algorithm to use, followed by data specific to that algorithm.
1378</para>
1379
1380
1381<para>
1382Bitmap compression is negotiated using the <emphasis>
1383bitmap-comp</emphasis>
1384 option. The proxy sends a list of names of available algorithms, and the
1385server reply lists the algorithms to use. For each bitmap algorithm in the
1386reply, a 0-based index into the list of algorithms indicates the algorithm, and
1387the <emphasis>
1388opcode</emphasis>
1389 field gives the value for use in requests. The algorithm names follow the
1390conventions in <ulink url="lbx.htm#13570">See Algorithm Naming</ulink>.
1391</para>
1392
1393
1394<para>
1395Pixmap compression is negotiated using the <emphasis>
1396pixmap-comp</emphasis>
1397 option. The proxy sends a list of available algorithms. For each algorithm,
1398the list includes, the name, a bitmask of supported formats, and a list of
1399depths that the format supports. The server reply lists the algorithms to use.
1400For each pixmap algorithm in the reply, the reply contains a 0-based index into
1401the list of proxy algorithms, the opcode to use in requests when referring to
1402this algorithm, a mask of valid formats, and a list of valid depths. Algorithm
1403names follow the conventions in <ulink url="lbx.htm#13570">See Algorithm
1404Naming</ulink>.
1405</para>
1406
1407
1408<para>
1409Squishing is negotiated using the use-squish option. If the proxy desires
1410squishing, it sends a true value. The reply from the server indicates whether
1411to do squishing, and will indicate squishing only if <emphasis>
1412use-squish</emphasis>
1413 is set to true in the request.
1414</para>
1415
1416
1417<para>
1418Tag caching, described in <ulink url="lbx.htm#11018">See Tags</ulink>, is
1419negotiated using the use-tag option. If the proxy desires tag caching, it sends
1420a true value. The reply from the server indicates whether to do tag caching,
1421and will demand caching only if <emphasis>
1422use-tag</emphasis>
1423 is set to true in the request.
1424</para>
1425
1426
1427<para>
1428The colormap option is used to negotiate what color matching algorithm will be
1429used by the proxy when the proxy uses the <emphasis>
1430LbxAllocColor</emphasis>
1431 request to allocate pixels in a grabbed colormap. To negotiate using the
1432colormap option, the proxy lists the names of available colormap algorithms.
1433The choice in the reply contains a 0-based index into the list of algorithms to
1434indicate which algorithm to use, followed by data specific to that algorithm.
1435If no colormap algorithm is successfully negotiated, then the <emphasis>
1436LbxAllocColor</emphasis>
1437, <emphasis>
1438LbxGrabCmap</emphasis>
1439, and <emphasis>
1440LbxReleaseCmap</emphasis>
1441 requests will not be used.
1442</para>
1443
1444
1445<para>
1446The extension option is used to control extensions to LBX. These extensions
1447may, for example, enable other types of compression. To negotiate an extension,
1448the name of the extension is sent, followed by any data specific to that
1449extension. The extension name follows the conventions in <ulink
1450url="lbx.htm#13570">See Algorithm Naming</ulink>. The extension option may
1451occur multiple times in the start proxy message, since multiple extensions can
1452be negotiated. The reply to an extension option contains the zero-based index
1453of the extension option, as counted in the <emphasis>
1454LbxStartProxy</emphasis>
1455 message. This index is followed by extension-specific information. The server
1456does not respond to extensions it does not recognize.
1457</para>
1458
1459
1460<para>
1461An <emphasis>
1462LbxClient</emphasis>
1463 error is returned when a client which is already communicating through an LBX
1464proxy to the X server sends a <emphasis>
1465LbxStartProxy</emphasis>
1466 request.
1467</para>
1468
1469
1470<para>
1471The encoding for this request is on <ulink url="lbx.htm#27452">See
1472LbxStartProxy</ulink>.
1473</para>
1474
1475
1476<informaltable frame='none' tabstyle='proto'>
1477  <?dbfo keep-together="always" ?>
1478  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
1479  <colspec colname='c1' colwidth="1.0*"/>
1480  <thead>
1481    <row>
1482      <entry role='protoname'>LbxStopProxy</entry>
1483    </row>
1484  </thead>
1485  <tbody>
1486    <row>
1487      <entry role='protoerror'>Errors: <emphasis>
1488LbxClient</emphasis>
1489</entry>
1490    </row>
1491  </tbody>
1492  </tgroup>
1493</informaltable>
1494
1495<para>
1496This request terminates the connection between the proxy and X server, and
1497terminates any clients connected through the proxy.
1498</para>
1499
1500
1501<para>
1502The encoding for this request is on <ulink url="lbx.htm#23471">See
1503LbxStopProxy</ulink>.
1504</para>
1505
1506
1507<para>
1508An <emphasis>
1509LbxClient</emphasis>
1510 error is returned if the requesting client is not an LBX proxy.
1511</para>
1512
1513
1514<informaltable frame='none' tabstyle='proto'>
1515  <?dbfo keep-together="always" ?>
1516  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
1517  <colspec colname='c1' colwidth="1.0*"/>
1518  <thead>
1519    <row>
1520      <entry role='protoname'>LbxNewClient</entry>
1521    </row>
1522  </thead>
1523  <tbody>
1524    <row>
1525      <entry role='protoargs'><emphasis>
1526byte-order</emphasis>
1527: CARD8</entry>
1528    </row>
1529    <row>
1530      <entry role='protoargs'><emphasis>
1531client-id</emphasis>
1532: CARD32</entry>
1533    </row>
1534    <row>
1535      <entry role='protoargs'><emphasis>
1536protocol-major-version</emphasis>
1537: CARD16</entry>
1538    </row>
1539    <row>
1540      <entry role='protoargs'><emphasis>
1541protocol-minor-version:</emphasis>
1542 CARD16</entry>
1543    </row>
1544    <row>
1545      <entry role='protoargs'><emphasis>
1546authorization-protocol-name</emphasis>
1547: STRING8</entry>
1548    </row>
1549    <row>
1550      <entry role='protoargs'><emphasis>
1551authorization-protocol-data</emphasis>
1552: STRING8</entry>
1553    </row>
1554    <row>
1555      <entry>=&gt;</entry>
1556    </row>
1557    <row>
1558      <entry role='protoargs'>Core X reply (if connection is rejected)</entry>
1559    </row>
1560    <row>
1561      <entry role='protoargs'>&nbsp;</entry>
1562    </row>
1563    <row>
1564      <entry role='protoargs'>OR</entry>
1565    </row>
1566    <row>
1567      <entry role='protoargs'>&nbsp;</entry>
1568    </row>
1569    <row>
1570      <entry role='protoargs'>success: BOOL</entry>
1571    </row>
1572    <row>
1573      <entry role='protoargs'>change-type: {NoDeltas, NormalClientDeltas,
1574AppGroupDeltas}</entry>
1575    </row>
1576    <row>
1577      <entry role='protoargs'>protocol-major-version: CARD16</entry>
1578    </row>
1579    <row>
1580      <entry role='protoargs'>protocol-minor-version: CARD16</entry>
1581    </row>
1582    <row>
1583      <entry role='protoargs'>tag-id: CARD32</entry>
1584    </row>
1585    <row>
1586      <entry role='protoargs'>length: CARD16</entry>
1587    </row>
1588    <row>
1589      <entry role='protoargs'>connection-data: CONINFO or CONDIF or
1590CONDIFROOT</entry>
1591    </row>
1592    <row>
1593      <entry role='protoargs'>&nbsp;</entry>
1594    </row>
1595    <row>
1596      <entry role='protoargs'>where:</entry>
1597    </row>
1598    <row>
1599      <entry role='protoargs'>CONINFO:       (the &quot;additional data&quot;
1600portion of the core connection reply for successes)</entry>
1601    </row>
1602    <row>
1603      <entry role='protoargs'>CONDIF:      [resource-id-base: CARD32,</entry>
1604    </row>
1605    <row>
1606      <entry role='protoargs'>      root-input-masks: LISTofSETofEVENT]</entry>
1607    </row>
1608    <row>
1609      <entry role='protoargs'>CONDIFROOT:      [resource-id-base:
1610CARD32,</entry>
1611    </row>
1612    <row>
1613      <entry role='protoargs'>      root: WINDOW</entry>
1614    </row>
1615    <row>
1616      <entry role='protoargs'>      root-visual: VISUALID</entry>
1617    </row>
1618    <row>
1619      <entry role='protoargs'>      default-colormap: COLORMAP</entry>
1620    </row>
1621    <row>
1622      <entry role='protoargs'>      white-pixel, black-pixel: CARD32</entry>
1623    </row>
1624    <row>
1625      <entry role='protoargs'>      root-input-masks: LISTofSETofEVENT]</entry>
1626    </row>
1627  </tbody>
1628  </tgroup>
1629</informaltable>
1630
1631<para>
1632Errors: LbxClient, Alloc
1633</para>
1634
1635
1636<para>
1637This request, which is sent by the proxy over the control connection, creates a
1638new virtual connection to the server.
1639</para>
1640
1641
1642<para>
1643Much of the information in the <emphasis>
1644LbxNewClient</emphasis>
1645 request and reply is identical to the connection setup and reply information
1646in the core X protocol.
1647</para>
1648
1649
1650<para>
1651For the <emphasis>
1652LbxNewClient</emphasis>
1653 request, the field unique to LBX is client-id. For the <emphasis>
1654LbxNewClient</emphasis>
1655 reply, <emphasis>
1656tag-id</emphasis>
1657 and <emphasis>
1658change-type</emphasis>
1659 are fields unique to LBX, and the contents of connection-data may be different
1660in LBX from the core X protocol (see below).
1661</para>
1662
1663
1664<para>
1665The proxy assigns each virtual connection a unique identifier using the
1666<emphasis>
1667client-id</emphasis>
1668 field in the <emphasis>
1669LbxNewClient</emphasis>
1670 request. This client-id is used in the LBX protocol to specify the current
1671client (see the <emphasis>
1672LbxSwitch</emphasis>
1673 request and the <emphasis>
1674LbxSwitchEvent</emphasis>
1675). client-id 0 is reserved for the proxy control connection. An <emphasis>
1676LbxClient</emphasis>
1677 error will result if the <emphasis>
1678LbxNewClient</emphasis>
1679 request contains a client-id of 0 or an already in use client-id.
1680</para>
1681
1682
1683<para>
1684If the server rejects this new virtual connection, the server sends a core X
1685connection failure reply to the proxy. The current version of LBX does not
1686support the return of an <emphasis>
1687Authenticate</emphasis>
1688 reply.
1689</para>
1690
1691
1692<para>
1693If the <emphasis>
1694change-type</emphasis>
1695 field is set to <emphasis>
1696NoDeltas</emphasis>
1697, then <emphasis>
1698connection-data</emphasis>
1699 is sent using the CONINFO structure, which is identical to the additional data
1700of the core connection reply. If the <emphasis>
1701tag-id</emphasis>
1702 is non-zero, then the connection-data is stored by the proxy using this tag
1703value. Tagged connection data must be stored by the proxy, and can not be
1704invalidated by the proxy until an <emphasis>
1705LbxInvalidateTag</emphasis>
1706 event is received for that tag.
1707</para>
1708
1709
1710<para>
1711When the <emphasis>
1712change-type</emphasis>
1713 field is not set to <emphasis>
1714NoDeltas</emphasis>
1715, then connection data is sent as changes against connection information
1716previously sent to the proxy. The <emphasis>
1717tag-id</emphasis>
1718 field, if non-zero, has the tag of the previously sent data to apply the
1719changes to. A zero tag-id indicates that the changes are with respect to the
1720connection information sent when the proxy connected to the server.
1721</para>
1722
1723
1724<para>
1725If the <emphasis>
1726change-type</emphasis>
1727 field is set to <emphasis>
1728NormalClientDeltas</emphasis>
1729, then <emphasis>
1730connection-data</emphasis>
1731 is sent using the CONDIF structure. The values in the CONDIF structure are
1732substituted for the identically named fields of the connection information for
1733the new connection.
1734</para>
1735
1736
1737<para>
1738If the <emphasis>
1739change-type</emphasis>
1740 field is set to <emphasis>
1741AppGroupDeltas</emphasis>
1742, then <emphasis>
1743connection-data</emphasis>
1744 is sent using the CONDIFROOT structure. The <emphasis>
1745root</emphasis>
1746, <emphasis>
1747root-visual</emphasis>
1748, and <emphasis>
1749default-colormap</emphasis>
1750 fields, when nonzero, are substituted for the corresponding fields in the
1751reference connection information. The <emphasis>
1752white-pixel</emphasis>
1753 and <emphasis>
1754black-pixel</emphasis>
1755 fields are substituted only when the <emphasis>
1756default-colormap</emphasis>
1757 field of the reply is non-zero. When <emphasis>
1758default-colormap</emphasis>
1759 field of the reply is zero, so are <emphasis>
1760white-pixel</emphasis>
1761 and <emphasis>
1762black-pixel</emphasis>
1763. The first entry in the <emphasis>
1764root-input-masks</emphasis>
1765 field is the current-input-mask for the default root window. The remaining
1766entries in <emphasis>
1767root-input-masks</emphasis>
1768 are input masks for non-video screens, as defined by the X Print Extension.
1769The number of non-video screens is one less than the number of entries in
1770<emphasis>
1771root-input-masks</emphasis>
1772. These screens are at the end of screen list in the reference connection
1773information.
1774</para>
1775
1776
1777<para>
1778The encoding for this request is on <ulink url="lbx.htm#15166">See The
1779description of this request is on page 13.</ulink>.
1780</para>
1781
1782
1783<informaltable frame='none' tabstyle='proto'>
1784  <?dbfo keep-together="always" ?>
1785  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
1786  <colspec colname='c1' colwidth="1.0*"/>
1787  <thead>
1788    <row>
1789      <entry role='protoname'>LbxCloseClient</entry>
1790    </row>
1791  </thead>
1792  <tbody>
1793    <row>
1794      <entry role='protoargs'><emphasis>
1795client</emphasis>
1796: CARD32</entry>
1797    </row>
1798
1799    <row>
1800      <entry role='protoerror'>Errors: <emphasis>
1801LbxClient</emphasis>
1802</entry>
1803    </row>
1804  </tbody>
1805  </tgroup>
1806</informaltable>
1807
1808<para>
1809This requests the server to close down the connection represented by the
1810specified proxy’s client identifier. If the specified client wasn’t
1811previously registered with the server by a <emphasis>
1812LbxNewClient</emphasis>
1813 request, the server will send the <emphasis>
1814LbxClient</emphasis>
1815 error.
1816</para>
1817
1818
1819<para>
1820The encoding for this request is on <ulink url="lbx.htm#21121">See The
1821description of this request is on page 12.</ulink>.
1822</para>
1823
1824
1825<informaltable frame='none' tabstyle='proto'>
1826  <?dbfo keep-together="always" ?>
1827  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
1828  <colspec colname='c1' colwidth="1.0*"/>
1829  <thead>
1830    <row>
1831      <entry role='protoname'>LbxSwitch</entry>
1832    </row>
1833  </thead>
1834  <tbody>
1835    <row>
1836      <entry role='protoargs'><emphasis>
1837client</emphasis>
1838: CARD32</entry>
1839    </row>
1840
1841    <row>
1842      <entry role='protoerror'>Errors: <emphasis>
1843LbxClient</emphasis>
1844</entry>
1845    </row>
1846  </tbody>
1847  </tgroup>
1848</informaltable>
1849
1850<para>
1851This request causes the X server to treat subsequent requests as being from a
1852connection to the X server represented by the specified client identifier.
1853</para>
1854
1855
1856<para>
1857If the client making the request is not the proxy, or if the client identifier
1858sent in the request was not previously sent in a <emphasis>
1859LbxNewClient</emphasis>
1860 request, an <emphasis>
1861LbxClient</emphasis>
1862 error is returned.
1863</para>
1864
1865
1866<para>
1867The encoding for this request is on <ulink url="lbx.htm#36790">See
1868LbxSwitch</ulink>.
1869</para>
1870
1871
1872<informaltable frame='none' tabstyle='proto'>
1873  <?dbfo keep-together="always" ?>
1874  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
1875  <colspec colname='c1' colwidth="1.0*"/>
1876  <thead>
1877    <row>
1878      <entry role='protoname'>LbxSync</entry>
1879    </row>
1880  </thead>
1881  <tbody>
1882    <row>
1883      <entry>=&gt;</entry>
1884    </row>
1885  </tbody>
1886  </tgroup>
1887</informaltable>
1888
1889<para>
1890The sync request causes the server to send a reply when all requests before the
1891sync request have been processed.
1892</para>
1893
1894
1895<para>
1896The encoding for this client is on <ulink url="lbx.htm#21186">See
1897LbxSync</ulink>.
1898</para>
1899
1900
1901<informaltable frame='none' tabstyle='proto'>
1902  <?dbfo keep-together="always" ?>
1903  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
1904  <colspec colname='c1' colwidth="1.0*"/>
1905  <thead>
1906    <row>
1907      <entry role='protoname'>LbxModifySequence</entry>
1908    </row>
1909  </thead>
1910  <tbody>
1911    <row>
1912      <entry role='protoargs'><emphasis>
1913adjust</emphasis>
1914: CARD32</entry>
1915    </row>
1916
1917    <row>
1918      <entry role='protoerror'>Errors: None</entry>
1919    </row>
1920  </tbody>
1921  </tgroup>
1922</informaltable>
1923
1924<para>
1925This request advances the sequence number of the virtual client connection by
1926the specified amount. The proxy sends the <emphasis>
1927LbxModifySequence</emphasis>
1928 request to the server when it replies to a client request without forwarding
1929the client request on to the X server.
1930</para>
1931
1932
1933<para>
1934The encoding for this client is on <ulink url="lbx.htm#10940">See The
1935description of this request is on page 13.</ulink>.
1936</para>
1937
1938
1939<informaltable frame='none' tabstyle='proto'>
1940  <?dbfo keep-together="always" ?>
1941  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
1942  <colspec colname='c1' colwidth="1.0*"/>
1943  <thead>
1944    <row>
1945      <entry role='protoname'>LbxAllowMotion</entry>
1946    </row>
1947  </thead>
1948  <tbody>
1949    <row>
1950      <entry role='protoargs'><emphasis>
1951num</emphasis>
1952: CARD32</entry>
1953    </row>
1954
1955    <row>
1956      <entry role='protoerror'>Errors: None</entry>
1957    </row>
1958  </tbody>
1959  </tgroup>
1960</informaltable>
1961
1962<para>
1963This request controls the delivery of optional motion notify events, as
1964described in <ulink url="lbx.htm#15503">See Motion events</ulink>. The num
1965field specifies an increase in the allowed number of motion notify events sent.
1966</para>
1967
1968
1969<para>
1970The encoding for this request is on <ulink url="lbx.htm#11897">See The
1971description of this request is on page 14.</ulink>.
1972</para>
1973
1974
1975<informaltable frame='none' tabstyle='proto'>
1976  <?dbfo keep-together="always" ?>
1977  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
1978  <colspec colname='c1' colwidth="1.0*"/>
1979  <thead>
1980    <row>
1981      <entry role='protoname'>LbxInvalidateTag</entry>
1982    </row>
1983  </thead>
1984  <tbody>
1985    <row>
1986      <entry role='protoargs'><emphasis>
1987tag</emphasis>
1988: CARD32</entry>
1989    </row>
1990  </tbody>
1991  </tgroup>
1992</informaltable>
1993
1994<para>
1995The LBX proxy sends this notification to the X server when it refuses to store
1996tagged data, or when it releases tagged data which was previously stored and
1997which was not invalidated by a notification from the X server.
1998</para>
1999
2000
2001<para>
2002The encoding for this request is on <ulink url="lbx.htm#37545">See
2003LbxInvalidateTag</ulink>.
2004</para>
2005
2006
2007<informaltable frame='none' tabstyle='proto'>
2008  <?dbfo keep-together="always" ?>
2009  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
2010  <colspec colname='c1' colwidth="1.0*"/>
2011  <thead>
2012    <row>
2013      <entry role='protoname'>LbxTagData</entry>
2014    </row>
2015  </thead>
2016  <tbody>
2017    <row>
2018      <entry role='protoargs'><emphasis>
2019tag</emphasis>
2020: CARD32</entry>
2021    </row>
2022    <row>
2023      <entry role='protoargs'><emphasis>
2024real-length</emphasis>
2025: CARD32</entry>
2026    </row>
2027    <row>
2028      <entry role='protoargs'><emphasis>
2029data</emphasis>
2030: LISTofBYTE</entry>
2031    </row>
2032  </tbody>
2033  </tgroup>
2034</informaltable>
2035
2036<para>
2037This request specifies the data associated with a previously assigned tag. It
2038is sent in two circumstances: in response to receiving a <emphasis>
2039SendTagDataEvent</emphasis>
2040, and spontaneously, when the proxy must rely on the server to store data which
2041was not previously received from the server. The data is carried in the byte
2042order and structure as would have originally been sent in the core protocol
2043request.
2044</para>
2045
2046
2047<para>
2048The encoding for this request is on <ulink url="lbx.htm#37174">See
2049LbxTagData</ulink>.
2050</para>
2051
2052
2053<informaltable frame='none' tabstyle='proto'>
2054  <?dbfo keep-together="always" ?>
2055  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
2056  <colspec colname='c1' colwidth="1.0*"/>
2057  <thead>
2058    <row>
2059      <entry role='protoname'>LbxGrabCmap</entry>
2060    </row>
2061  </thead>
2062  <tbody>
2063    <row>
2064      <entry role='protoargs'><emphasis>
2065cmap</emphasis>
2066: Colormap </entry>
2067    </row>
2068    <row>
2069      <entry>=&gt;</entry>
2070    </row>
2071
2072    <row>
2073      <entry role='protoargs'><emphasis>
2074smart-grab</emphasis>
2075: BOOL</entry>
2076    </row>
2077    <row>
2078      <entry role='protoargs'><emphasis>
2079large-pixel: </emphasis>
2080BOOL      /* optional */</entry>
2081    </row>
2082    <row>
2083      <entry role='protoargs'><emphasis>
2084auto-release: </emphasis>
2085BOOL      /* optional */</entry>
2086    </row>
2087    <row>
2088      <entry role='protoargs'><emphasis>
2089three-channels</emphasis>
2090: BOOL      /* optional */</entry>
2091    </row>
2092    <row>
2093      <entry role='protoargs'><emphasis>
2094bits-per-rgb: </emphasis>
2095CARD4      /* optional */</entry>
2096    </row>
2097    <row>
2098      <entry role='protoargs'><emphasis>
2099cells</emphasis>
2100: LISTofCHAN      /* optional */</entry>
2101    </row>
2102    <row>
2103      <entry role='protoargs'>&nbsp;</entry>
2104    </row>
2105    <row>
2106      <entry role='protoargs'>where:</entry>
2107    </row>
2108    <row>
2109      <entry role='protoargs'>CHAN:      LISTofLBXPIXEL</entry>
2110    </row>
2111    <row>
2112      <entry role='protoargs'>LBXPIXEL:       PIXELPRIVATE or PIXELPRIVATERANGE
2113or </entry>
2114    </row>
2115    <row>
2116      <entry role='protoargs'>      PIXELALLOC or PIXELALLOCRANGE </entry>
2117    </row>
2118    <row>
2119      <entry role='protoargs'>PIXEL:      CARD8 or CARD16</entry>
2120    </row>
2121    <row>
2122      <entry role='protoargs'>PIXELPRIVATE:       [ pixel: PIXEL ]</entry>
2123    </row>
2124    <row>
2125      <entry role='protoargs'>PIXELPRIVATERANGE:       [ first-pixel,
2126last-pixel: PIXEL]</entry>
2127    </row>
2128    <row>
2129      <entry role='protoargs'>PIXELALLOC:       [ pixel: PIXEL,</entry>
2130    </row>
2131    <row>
2132      <entry role='protoargs'>      color: COLORSINGLE or COLORTRIPLE]</entry>
2133    </row>
2134    <row>
2135      <entry role='protoargs'>PIXELALLOCRANGE:       [ first-pixel,
2136last-pixel: PIXEL,</entry>
2137    </row>
2138    <row>
2139      <entry role='protoargs'>      colors: LISTofCOLORSINGLE or
2140LISTofCOLORTRIPLE]</entry>
2141    </row>
2142    <row>
2143      <entry role='protoargs'>COLORSINGLE:      [ value: CARD8 or CARD16
2144]</entry>
2145    </row>
2146    <row>
2147      <entry role='protoargs'>COLORTRIPLE:      [ r, g, b:
2148COLORSINGLE]</entry>
2149    </row>
2150
2151    <row>
2152      <entry role='protoerror'>Errors: <emphasis>
2153Colormap</emphasis>
2154</entry>
2155    </row>
2156  </tbody>
2157  </tgroup>
2158</informaltable>
2159
2160<para>
2161This request asks the server for control of allocating new colormap cells in
2162the specified colormap. The server grants control by replying to this request.
2163If no changes have occurred since the last time this proxy grabbed this
2164colormap, then the <emphasis>
2165smart-grab</emphasis>
2166 field of the reply is set to true, and the optional fields are not sent.
2167Otherwise, the current contents of the colormap are placed in the reply, as
2168described later in this section.
2169</para>
2170
2171
2172<para>
2173Once the proxy has received the reply, it can use the <emphasis>
2174LbxAllocColor</emphasis>
2175 request to allocate new colormap cells without the performance penalty of
2176round trips. The proxy is still permitted to use the normal colormap and
2177<emphasis>
2178LbxIncrementPixel</emphasis>
2179 requests while the colormap is grabbed. The grab is valid across all virtual
2180connections of the proxy.
2181</para>
2182
2183
2184<para>
2185The <emphasis>
2186LbxGrabCmap</emphasis>
2187 request is limited to colormaps for the visual types negotiated as part of the
2188colormap algorithm negotiation in the start proxy request at connection setup.
2189</para>
2190
2191
2192<para>
2193The server and other proxies may not allocate new colormap cells in the
2194colormap while the colormap is grabbed by this proxy. If the server or another
2195proxy needs to allocate new colormap cells, the server sends a Lbx<emphasis>
2196ReleaseCmap</emphasis>
2197 event to the proxy holding the grab, which then issues an <emphasis>
2198LbxReleaseCmap</emphasis>
2199 request.
2200</para>
2201
2202
2203<para>
2204The server and other proxies may free colormap cells in a colormap grabbed by a
2205proxy. The server will send an <emphasis>
2206LbxFreeCells</emphasis>
2207 event to the proxy that currently has the colormap grabbed when the cell
2208reference count reaches 0.
2209</para>
2210
2211
2212<para>
2213If the colormap is a of a static visual type, such as <emphasis>
2214StaticGray</emphasis>
2215, <emphasis>
2216StaticColor</emphasis>
2217, <emphasis>
2218GrayScale</emphasis>
2219, or <emphasis>
2220TrueColor</emphasis>
2221, then the proxy’s grab is immediately released by the server, and the proxy
2222must use <emphasis>
2223LbxIncrementPixel</emphasis>
2224 requests in place of <emphasis>
2225LbxAllocColor</emphasis>
2226 requests for this colormap.
2227</para>
2228
2229
2230<para>
2231If the cmap field does not refer to a valid colormap or the colormap is already
2232grabbed by this proxy then a <emphasis>
2233Colormap</emphasis>
2234 error is generated.
2235</para>
2236
2237
2238<para>
2239The reply describes the contents of the colormap via several arguments and a
2240descriptive list containing one or three channels, with each channel describing
2241allocations in the colormap.
2242</para>
2243
2244
2245<para>
2246The <emphasis>
2247large-pixel</emphasis>
2248 argument, if True, specifies that PIXEL indices will be listed as CARD16
2249quantities instead of CARD8. The<emphasis>
2250 auto-release</emphasis>
2251 field, if True, indicates that this colormap is of a static visual type and
2252the proxy’s grab is immediately released by the server.
2253</para>
2254
2255
2256<para>
2257If <emphasis>
2258three-channels</emphasis>
2259 is False, a single channel is enclosed and color values are described using
2260COLORTRIPLE, which has fields for red, green and blue. A single channel is used
2261when the visual type is not <emphasis>
2262DirectColor</emphasis>
2263 or <emphasis>
2264TrueColor</emphasis>
2265.
2266</para>
2267
2268
2269<para>
2270If <emphasis>
2271three-channels</emphasis>
2272 is True, separate red, green and blue channel lists are enclosed, for
2273describing a <emphasis>
2274DirectColor</emphasis>
2275 or <emphasis>
2276TrueColor</emphasis>
2277 colormap. Color values for entries in each channel are sent using COLORSINGLE
2278and the corresponding PIXEL value refers to the RGB subfield of the current
2279channel, as defined by the corresponding red-mask, green-mask and blue-mask of
2280the visual.
2281</para>
2282
2283
2284<para>
2285The <emphasis>
2286bits-per-rgb</emphasis>
2287 value is one less than the bits-per-rgb-value field of the visual that the
2288colormap belongs to. If the value is 7 or less, then COLORSINGLE values in the
2289descriptive list are sent using CARD8 fields. Otherwise these values are sent
2290using CARD16 fields.
2291</para>
2292
2293
2294<para>
2295The list describing current colormap allocations contains entries of the
2296following types:
2297</para>
2298
2299
2300<para>
2301An LBXPIXELPRIVATE entry indicates that the pixel in the <emphasis>
2302pixel </emphasis>
2303field is unavailable for allocation.
2304</para>
2305
2306
2307<para>
2308An LBXPIXELPRIVATERANGE entry indicates that a contiguous range of pixels are
2309unavailable for allocation. The range is <emphasis>
2310first-pixel</emphasis>
2311 to <emphasis>
2312last-pixel</emphasis>
2313, and includes <emphasis>
2314last-pixel</emphasis>
2315.
2316</para>
2317
2318
2319<para>
2320An LBXPIXELALLOC entry indicates that the pixel in the <emphasis>
2321pixel </emphasis>
2322field is allocated as a read-only pixel. The <emphasis>
2323color</emphasis>
2324 field carries the color information of the pixel.
2325</para>
2326
2327
2328<para>
2329An LBXPIXELALLOCRANGE entry indicates that a contiguous range of pixels are
2330allocated as read-only. The range starts <emphasis>
2331first-pixel</emphasis>
2332 to <emphasis>
2333last-pixel</emphasis>
2334, and includes <emphasis>
2335last-pixel</emphasis>
2336. These fields are followed by a list of COLORSINGLE or COLORTRIPLE, depending
2337on the value of <emphasis>
2338three-channels</emphasis>
2339.
2340</para>
2341
2342
2343<para>
2344A NEXTCHANNEL entry indicates that the next channel of the colormap will be
2345described.
2346</para>
2347
2348
2349<para>
2350A LISTEND entry indicates the end of the colormap description.
2351</para>
2352
2353
2354<para>
2355All pixels not described in the reply are unallocated.
2356</para>
2357
2358
2359<para>
2360The encoding for this request is on <ulink url="lbx.htm#17198">See
2361LbxGrabCmap</ulink>.
2362</para>
2363
2364
2365
2366<informaltable frame='none' tabstyle='proto'>
2367  <?dbfo keep-together="always" ?>
2368  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
2369  <colspec colname='c1' colwidth="1.0*"/>
2370  <thead>
2371    <row>
2372      <entry role='protoname'>LbxReleaseCmap</entry>
2373    </row>
2374  </thead>
2375  <tbody>
2376    <row>
2377      <entry role='protoargs'><emphasis>
2378cmap</emphasis>
2379: Colormap</entry>
2380    </row>
2381  </tbody>
2382  </tgroup>
2383</informaltable>
2384
2385<para>
2386This request releases the specified grabbed colormap. If the <emphasis>
2387cmap</emphasis>
2388 field does not refer to a colormap, a <emphasis>
2389BadColormap</emphasis>
2390 error is produced.
2391</para>
2392
2393
2394<para>
2395The proxy must remember the state of the colormap when the <emphasis>
2396LbxReleaseCmap</emphasis>
2397 request is issued if this proxy may at some future time issue another
2398<emphasis>
2399LbxGrabCmap</emphasis>
2400 request on this colormap before the state of the colormap changes.
2401</para>
2402
2403
2404<para>
2405The encoding for this request is on <ulink url="lbx.htm#14796">See
2406LbxReleaseCmap</ulink>.
2407</para>
2408
2409
2410<informaltable frame='none' tabstyle='proto'>
2411  <?dbfo keep-together="always" ?>
2412  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
2413  <colspec colname='c1' colwidth="1.0*"/>
2414  <thead>
2415    <row>
2416      <entry role='protoname'>LbxInternAtoms</entry>
2417    </row>
2418  </thead>
2419  <tbody>
2420    <row>
2421      <entry role='protoargs'><emphasis>
2422count</emphasis>
2423: CARD16</entry>
2424    </row>
2425    <row>
2426      <entry role='protoargs'><emphasis>
2427names: LISTofSTRING8</emphasis>
2428</entry>
2429    </row>
2430    <row>
2431      <entry>=&gt;</entry>
2432    </row>
2433
2434    <row>
2435      <entry role='protoargs'><emphasis>
2436atoms</emphasis>
2437: LISTofATOM</entry>
2438    </row>
2439
2440    <row>
2441      <entry role='protoerror'>Errors: <emphasis>
2442Alloc</emphasis>
2443</entry>
2444    </row>
2445  </tbody>
2446  </tgroup>
2447</informaltable>
2448
2449<para>
2450This request allows the proxy to intern a group of atoms in a single round
2451trip. The server will create any atoms that do not exist.
2452</para>
2453
2454
2455<para>
2456The encoding for this request is on <ulink url="lbx.htm#34140">See
2457LbxInternAtoms</ulink>.
2458</para>
2459
2460
2461
2462</sect3>
2463<sect3 id='substitution_requests'>
2464<title>Substitution Requests</title>
2465
2466<informaltable frame='none' tabstyle='proto'>
2467  <?dbfo keep-together="always" ?>
2468  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
2469  <colspec colname='c1' colwidth="1.0*"/>
2470  <thead>
2471    <row>
2472      <entry role='protoname'>LbxAllocColor</entry>
2473    </row>
2474  </thead>
2475  <tbody>
2476    <row>
2477      <entry role='protoargs'><emphasis>
2478cmap</emphasis>
2479: Colormap</entry>
2480    </row>
2481    <row>
2482      <entry role='protoargs'><emphasis>
2483pixel</emphasis>
2484: CARD32</entry>
2485    </row>
2486    <row>
2487      <entry role='protoargs'><emphasis>
2488red</emphasis>
2489, <emphasis>
2490green</emphasis>
2491, <emphasis>
2492blue</emphasis>
2493: CARD16</entry>
2494    </row>
2495  </tbody>
2496  </tgroup>
2497</informaltable>
2498
2499<para>
2500This request is sent by a proxy that has given colormap grabbed to allocate a
2501new read-only cell in the colormap. The proxy may substitute this request for
2502the core <emphasis>
2503AllocColor</emphasis>
2504 and <emphasis>
2505AllocNamedColor</emphasis>
2506 requests.
2507</para>
2508
2509
2510<para>
2511The <emphasis>
2512pixel</emphasis>
2513 field identifies the colormap cell to allocate. The <emphasis>
2514red</emphasis>
2515, <emphasis>
2516green</emphasis>
2517, and <emphasis>
2518blue</emphasis>
2519 fields are the hardware specific color values of the corresponding fields of
2520the core <emphasis>
2521AllocColor</emphasis>
2522 request. The mapping to hardware specific colormap values by the proxy is
2523performed using the color algorithm negotiated by <emphasis>
2524LbxStartProxy</emphasis>
2525.
2526</para>
2527
2528
2529<para>
2530For colormaps of static visual types, the <emphasis>
2531LbxIncrementPixel</emphasis>
2532 request is used instead of LBX <emphasis>
2533AllocColor</emphasis>
2534.
2535</para>
2536
2537
2538<para>
2539If the <emphasis>
2540cmap</emphasis>
2541 field does not identify a grabbed colormap then a <emphasis>
2542BadAccess</emphasis>
2543 error is produced. If the <emphasis>
2544pixel</emphasis>
2545 field refers to a read-write entry, or the pixel field refers to a pixel
2546outside of the range of this colormap, a <emphasis>
2547BadAlloc</emphasis>
2548 error is produced.
2549</para>
2550
2551
2552<para>
2553The encoding for this request is on <ulink url="lbx.htm#28429">See
2554LbxAllocColor</ulink>.
2555</para>
2556
2557
2558<informaltable frame='none' tabstyle='proto'>
2559  <?dbfo keep-together="always" ?>
2560  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
2561  <colspec colname='c1' colwidth="1.0*"/>
2562  <thead>
2563    <row>
2564      <entry role='protoname'>LbxIncrementPixel</entry>
2565    </row>
2566  </thead>
2567  <tbody>
2568    <row>
2569      <entry role='protoargs'><emphasis>
2570cmap</emphasis>
2571: COLORMAP</entry>
2572    </row>
2573    <row>
2574      <entry role='protoargs'><emphasis>
2575pixel</emphasis>
2576: CARD32</entry>
2577    </row>
2578
2579    <row>
2580      <entry role='protoerror'>Errors: None</entry>
2581    </row>
2582  </tbody>
2583  </tgroup>
2584</informaltable>
2585
2586<para>
2587This request replaces the <emphasis>
2588AllocColor</emphasis>
2589 request for read-only pixels currently allocated for the current client. If
2590the visual type of the colormap is of a static type, this request may be used
2591on currently unallocated pixels. The colormap is not required to be grabbed to
2592use this request.
2593</para>
2594
2595
2596<para>
2597The encoding for this request is on <ulink url="lbx.htm#38053">See The
2598description of this request is on page 14.</ulink>.
2599</para>
2600
2601
2602<informaltable frame='none' tabstyle='proto'>
2603  <?dbfo keep-together="always" ?>
2604  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
2605  <colspec colname='c1' colwidth="1.0*"/>
2606  <thead>
2607    <row>
2608      <entry role='protoname'>LbxDelta</entry>
2609    </row>
2610  </thead>
2611  <tbody>
2612    <row>
2613      <entry role='protoargs'><emphasis>
2614count</emphasis>
2615: CARD8</entry>
2616    </row>
2617    <row>
2618      <entry role='protoargs'><emphasis>
2619cache-index</emphasis>
2620: CARD8</entry>
2621    </row>
2622    <row>
2623      <entry role='protoargs'><emphasis>
2624diffs</emphasis>
2625: LISTofDIFFITEM</entry>
2626    </row>
2627  </tbody>
2628  </tgroup>
2629</informaltable>
2630
2631<para>
2632This request contains a minimal amount of information relative to a similar
2633prior request. The information is in the form of a difference comparison to a
2634prior request. The prior request is specified by an index to a cache,
2635independently maintained by both the proxy and the server.
2636</para>
2637
2638
2639<para>
2640The encoding for this request is on <ulink url="lbx.htm#39838">See The
2641description of this request is on page 18.</ulink>.
2642</para>
2643
2644
2645<informaltable frame='none' tabstyle='proto'>
2646  <?dbfo keep-together="always" ?>
2647  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
2648  <colspec colname='c1' colwidth="1.0*"/>
2649  <thead>
2650    <row>
2651      <entry role='protoname'>LbxGetModifierMapping</entry>
2652    </row>
2653  </thead>
2654  <tbody>
2655    <row>
2656      <entry>=&gt;</entry>
2657    </row>
2658
2659    <row>
2660      <entry role='protoargs'><emphasis>
2661keyspermod</emphasis>
2662: CARD8</entry>
2663    </row>
2664    <row>
2665      <entry role='protoargs'><emphasis>
2666tag</emphasis>
2667: CARD32</entry>
2668    </row>
2669    <row>
2670      <entry role='protoargs'><emphasis>
2671keycodes</emphasis>
2672: LISTofKEYCODE             /* optional */</entry>
2673    </row>
2674  </tbody>
2675  </tgroup>
2676</informaltable>
2677
2678<para>
2679This request is identical to the core <emphasis>
2680GetModifierMapping</emphasis>
2681 request, with the addition of a tag being returned in the reply. See <ulink
2682url="lbx.htm#26534">See Tag Substitution in Requests</ulink> for a description
2683of the <emphasis>
2684tag</emphasis>
2685 field and optional fields.
2686</para>
2687
2688
2689<para>
2690The encoding for this request is on <ulink url="lbx.htm#40057">See
2691LbxGetModifierMapping</ulink>.
2692</para>
2693
2694
2695<informaltable frame='none' tabstyle='proto'>
2696  <?dbfo keep-together="always" ?>
2697  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
2698  <colspec colname='c1' colwidth="1.0*"/>
2699  <thead>
2700    <row>
2701      <entry role='protoname'>LbxGetKeyboardMapping</entry>
2702    </row>
2703  </thead>
2704  <tbody>
2705    <row>
2706      <entry role='protoargs'><emphasis>
2707firstKeyCode</emphasis>
2708: KEYCODE</entry>
2709    </row>
2710    <row>
2711      <entry role='protoargs'><emphasis>
2712count</emphasis>
2713: CARD8</entry>
2714    </row>
2715    <row>
2716      <entry>=&gt;</entry>
2717    </row>
2718
2719    <row>
2720      <entry role='protoargs'><emphasis>
2721keysperkeycode</emphasis>
2722: CARD8</entry>
2723    </row>
2724    <row>
2725      <entry role='protoargs'><emphasis>
2726tag</emphasis>
2727: CARD32</entry>
2728    </row>
2729    <row>
2730      <entry role='protoargs'><emphasis>
2731keysyms</emphasis>
2732: LISTofKEYSYM      /* optional */</entry>
2733    </row>
2734
2735    <row>
2736      <entry role='protoerror'>Errors: <emphasis>
2737Value</emphasis>
2738</entry>
2739    </row>
2740  </tbody>
2741  </tgroup>
2742</informaltable>
2743
2744<para>
2745This request is identical to the X <emphasis>
2746GetKeyboardMapping</emphasis>
2747 protocol request, with the addition that a tag is returned in the reply. See
2748<ulink url="lbx.htm#26534">See Tag Substitution in Requests</ulink> for a
2749description of the <emphasis>
2750tag</emphasis>
2751 field and optional fields.
2752</para>
2753
2754
2755<para>
2756The encoding for this request is on <ulink url="lbx.htm#21702">See
2757LbxGetKeyboardMapping</ulink>.
2758</para>
2759
2760
2761
2762<informaltable frame='none' tabstyle='proto'>
2763  <?dbfo keep-together="always" ?>
2764  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
2765  <colspec colname='c1' colwidth="1.0*"/>
2766  <thead>
2767    <row>
2768      <entry role='protoname'>LbxGetWinAttrAndGeom</entry>
2769    </row>
2770  </thead>
2771  <tbody>
2772    <row>
2773      <entry role='protoargs'><emphasis>
2774window</emphasis>
2775: WINDOW</entry>
2776    </row>
2777    <row>
2778      <entry>=&gt;</entry>
2779    </row>
2780
2781    <row>
2782      <entry role='protoargs'>visual: VISUALID</entry>
2783    </row>
2784    <row>
2785      <entry role='protoargs'>class: {InputOutput, InputOnly}</entry>
2786    </row>
2787    <row>
2788      <entry role='protoargs'>bit-gravity: BITGRAVITY</entry>
2789    </row>
2790    <row>
2791      <entry role='protoargs'>win-gravity: WINGRAVITY</entry>
2792    </row>
2793    <row>
2794      <entry role='protoargs'>backing-store: {NotUseful, WhenMapped,
2795Always}</entry>
2796    </row>
2797    <row>
2798      <entry role='protoargs'>backing-planes: CARD32</entry>
2799    </row>
2800    <row>
2801      <entry role='protoargs'>backing-pixel: CARD32</entry>
2802    </row>
2803    <row>
2804      <entry role='protoargs'>save-under: BOOL</entry>
2805    </row>
2806    <row>
2807      <entry role='protoargs'>colormap: COLORMAP or None</entry>
2808    </row>
2809    <row>
2810      <entry role='protoargs'>map-is-installed: BOOL</entry>
2811    </row>
2812    <row>
2813      <entry role='protoargs'>map-state: {Unmapped, Unviewable,
2814Viewable}</entry>
2815    </row>
2816    <row>
2817      <entry role='protoargs'>all-event-masks, your-event-mask:
2818SETofEVENT</entry>
2819    </row>
2820    <row>
2821      <entry role='protoargs'>do-not-propagate-mask: SETofDEVICEEVENT</entry>
2822    </row>
2823    <row>
2824      <entry role='protoargs'>override-redirect: BOOL</entry>
2825    </row>
2826    <row>
2827      <entry role='protoargs'>root: WINDOW</entry>
2828    </row>
2829    <row>
2830      <entry role='protoargs'>depth: CARD8</entry>
2831    </row>
2832    <row>
2833      <entry role='protoargs'>x, y: INT16</entry>
2834    </row>
2835    <row>
2836      <entry role='protoargs'>width, height, border-width: CARD16</entry>
2837    </row>
2838
2839    <row>
2840      <entry role='protoerror'>Errors: <emphasis>
2841Window</emphasis>
2842</entry>
2843    </row>
2844  </tbody>
2845  </tgroup>
2846</informaltable>
2847
2848<para>
2849<emphasis>
2850GetWindowAttributes</emphasis>
2851 and <emphasis>
2852GetGeometry</emphasis>
2853 are frequently used together in the X protocol. <emphasis>
2854LbxGetWinAttrAndGeom</emphasis>
2855 allows the proxy to request the same information in one round trip.
2856</para>
2857
2858
2859<para>
2860The encoding for this request is on <ulink url="lbx.htm#41440">See
2861LbxGetWinAttrAndGeom</ulink>.
2862</para>
2863
2864
2865
2866<informaltable frame='none' tabstyle='proto'>
2867  <?dbfo keep-together="always" ?>
2868  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
2869  <colspec colname='c1' colwidth="1.0*"/>
2870  <thead>
2871    <row>
2872      <entry role='protoname'>LbxQueryFont</entry>
2873    </row>
2874  </thead>
2875  <tbody>
2876    <row>
2877      <entry role='protoargs'><emphasis>
2878font</emphasis>
2879: FONTABLE</entry>
2880    </row>
2881    <row>
2882      <entry>=&gt;</entry>
2883    </row>
2884    <row>
2885      <entry role='protoargs'>compression: BOOL</entry>
2886    </row>
2887    <row>
2888      <entry role='protoargs'>tag: CARD32</entry>
2889    </row>
2890    <row>
2891      <entry role='protoargs'>font-info: FONTINFO                  /* optional
2892*/</entry>
2893    </row>
2894    <row>
2895      <entry role='protoargs'>char-infos: LISTofCHARINFO or LISTofLBXCHARINFO
2896               /* optional */</entry>
2897    </row>
2898    <row>
2899      <entry role='protoargs'>where:</entry>
2900    </row>
2901    <row>
2902      <entry role='protoargs'>LBXCHARINFO:       [left-side-bearing:
2903INT6</entry>
2904    </row>
2905    <row>
2906      <entry role='protoargs'>      right-side-bearing: INT7</entry>
2907    </row>
2908    <row>
2909      <entry role='protoargs'>      character-width: INT6</entry>
2910    </row>
2911    <row>
2912      <entry role='protoargs'>      ascent: INT6</entry>
2913    </row>
2914    <row>
2915      <entry role='protoargs'>      descent: INT7]</entry>
2916    </row>
2917
2918    <row>
2919      <entry role='protoerror'>Errors: <emphasis>
2920Font,Alloc</emphasis>
2921      </entry>
2922    </row>
2923  </tbody>
2924  </tgroup>
2925</informaltable>
2926
2927<para>
2928This request is used to replace the core <emphasis>
2929QueryFont</emphasis>
2930 request and has identical semantics.
2931</para>
2932
2933
2934<para>
2935See <ulink url="lbx.htm#26534">See Tag Substitution in Requests</ulink> for a
2936description of the <emphasis>
2937tag</emphasis>
2938 field and optional fields.
2939</para>
2940
2941
2942<para>
2943The <emphasis>
2944compression</emphasis>
2945 field is True if the <emphasis>
2946char-infos</emphasis>
2947 field is represented using LBXCHARINFO.
2948</para>
2949
2950
2951<para>
2952The per-character information will be encoded in an LBXCHARINFO when, for every
2953character, the character-width, left-side-bearing, and ascent can each be
2954represented in not more than 6 bits, and the right-side-bearing and descent can
2955each be represented in not more than 7 bits, and the attributes field is
2956identical the attributes field of the max_bounds of the <emphasis>
2957font_info</emphasis>
2958 field of the font.
2959</para>
2960
2961
2962<para>
2963The encoding for this request is on <ulink url="lbx.htm#24597">See
2964LbxQueryFont</ulink>.
2965</para>
2966
2967
2968
2969<informaltable frame='none' tabstyle='proto'>
2970  <?dbfo keep-together="always" ?>
2971  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
2972  <colspec colname='c1' colwidth="1.0*"/>
2973  <thead>
2974    <row>
2975      <entry role='protoname'>LbxChangeProperty</entry>
2976    </row>
2977  </thead>
2978  <tbody>
2979    <row>
2980      <entry role='protoargs'><emphasis>
2981window</emphasis>
2982: WINDOW</entry>
2983    </row>
2984    <row>
2985      <entry role='protoargs'><emphasis>
2986property</emphasis>
2987: ATOM</entry>
2988    </row>
2989    <row>
2990      <entry role='protoargs'><emphasis>
2991type</emphasis>
2992: ATOM</entry>
2993    </row>
2994    <row>
2995      <entry role='protoargs'><emphasis>
2996format</emphasis>
2997: {0,8,16,32}</entry>
2998    </row>
2999    <row>
3000      <entry role='protoargs'><emphasis>
3001mode</emphasis>
3002: {Replace, Prepend, Append}</entry>
3003    </row>
3004    <row>
3005      <entry role='protoargs'><emphasis>
3006nUnits</emphasis>
3007: CARD32</entry>
3008    </row>
3009    <row>
3010      <entry>=&gt;</entry>
3011    </row>
3012    <row>
3013      <entry role='protoargs'>tag: CARD32</entry>
3014    </row>
3015  </tbody>
3016  </tgroup>
3017</informaltable>
3018
3019<para>
3020This request is sent to the server when the client sends an X <emphasis>
3021ChangeProperty </emphasis>
3022request through the proxy. The size of the data is sent with this request, but
3023not the property data itself. The server reply contains a tag identifier for
3024the data, which is stored in the proxy. The proxy must not discard this data
3025before it is sent to the server, or invalidated by the server. This means that
3026before issuing an <emphasis>
3027LbxStopProxy</emphasis>
3028 request, or exiting, the proxy must send Lbx<emphasis>
3029TagData</emphasis>
3030 requests for these items. If the server loses the connection before the
3031information is sent back, the server should revert the property value to its
3032last known value, if possible.
3033</para>
3034
3035
3036<para>
3037If the <emphasis>
3038mode</emphasis>
3039 field is <emphasis>
3040Prepend</emphasis>
3041 or <emphasis>
3042Append</emphasis>
3043, the tag refers only to the prepended or appended data.
3044</para>
3045
3046
3047<para>
3048If the tag in the reply is zero, then the change was ignored by the server, as
3049defined in the security extension. The proxy should dump the associated data,
3050since the server will never ask for it.
3051</para>
3052
3053
3054<para>
3055The encoding for this request is on <ulink url="lbx.htm#18013">See
3056LbxChangeProperty</ulink>.
3057</para>
3058
3059
3060<informaltable frame='none' tabstyle='proto'>
3061  <?dbfo keep-together="always" ?>
3062  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
3063  <colspec colname='c1' colwidth="1.0*"/>
3064  <thead>
3065    <row>
3066      <entry role='protoname'>LbxGetProperty</entry>
3067    </row>
3068  </thead>
3069  <tbody>
3070    <row>
3071      <entry role='protoargs'><emphasis>
3072window</emphasis>
3073: WINDOW</entry>
3074    </row>
3075    <row>
3076      <entry role='protoargs'><emphasis>
3077property</emphasis>
3078: ATOM</entry>
3079    </row>
3080    <row>
3081      <entry role='protoargs'><emphasis>
3082type</emphasis>
3083: ATOM or AnyPropertyType</entry>
3084    </row>
3085    <row>
3086      <entry role='protoargs'><emphasis>
3087long-offset</emphasis>
3088: CARD32</entry>
3089    </row>
3090    <row>
3091      <entry role='protoargs'><emphasis>
3092long-length</emphasis>
3093: CARD32</entry>
3094    </row>
3095    <row>
3096      <entry role='protoargs'><emphasis>
3097delete</emphasis>
3098: CARD8</entry>
3099    </row>
3100    <row>
3101      <entry>=&gt;</entry>
3102    </row>
3103
3104    <row>
3105      <entry role='protoargs'>type: ATOM or None</entry>
3106    </row>
3107    <row>
3108      <entry role='protoargs'>format: {0, 8, 16, 32}</entry>
3109    </row>
3110    <row>
3111      <entry role='protoargs'>bytes-after: CARD32</entry>
3112    </row>
3113    <row>
3114      <entry role='protoargs'>nItems: CARD32</entry>
3115    </row>
3116    <row>
3117      <entry role='protoargs'>tag: CARD32</entry>
3118    </row>
3119    <row>
3120      <entry role='protoargs'>value: LISTofINT8 or LISTofINT16 or
3121LISTofINT32</entry>
3122    </row>
3123  </tbody>
3124  </tgroup>
3125</informaltable>
3126
3127<para>
3128This request may be used by the proxy as a substitution for a core <emphasis>
3129GetProperty</emphasis>
3130 request. It allows tags to be used for property data that is unlikely to
3131change often in value, but is likely to be fetched by multiple clients.
3132</para>
3133
3134
3135<para>
3136The <emphasis>
3137LbxGetProperty</emphasis>
3138 request has the same arguments as the core <emphasis>
3139GetProperty</emphasis>
3140 request. The reply for <emphasis>
3141LbxGetProperty</emphasis>
3142 has all of the fields from the core <emphasis>
3143GetProperty</emphasis>
3144 reply, but has the additional fields of <emphasis>
3145nItems</emphasis>
3146 and <emphasis>
3147tag</emphasis>
3148.
3149</para>
3150
3151
3152<para>
3153In order to utilize tags in <emphasis>
3154LbxGetProperty</emphasis>
3155 for a specific property, the server must first send the complete property data
3156to the proxy and associate this data with a tag. More precisely, the server
3157sends an <emphasis>
3158LbxGetProperty</emphasis>
3159 reply with a new <emphasis>
3160tag</emphasis>
3161, <emphasis>
3162nItems</emphasis>
3163 set to the number of items in the property, the size of the property data in
3164the reply length field, and the complete property data in value. The proxy
3165stores the property data in its tag cache and associates it with the specified
3166tag.
3167</para>
3168
3169
3170<para>
3171In response to future <emphasis>
3172LbxGetProperty</emphasis>
3173 requests for the same property, if the server thinks that the proxy has the
3174actual property data in its tag cache, it may choose to send an <emphasis>
3175LbxGetProperty</emphasis>
3176 reply without the actual property data. In this case, the reply would include
3177a non-zero <emphasis>
3178tag</emphasis>
3179, a zero reply length, and no data for value.
3180</para>
3181
3182
3183<para>
3184If the server chooses not to generate a tagged reply to <emphasis>
3185LbxGetProperty</emphasis>
3186, or for some reason is unable to do so, it would send a reply with a <emphasis>
3187tag</emphasis>
3188 of zero, the size of the property data in the reply length field, and the
3189complete property data in value.
3190</para>
3191
3192
3193<para>
3194The encoding for this request is on <ulink url="lbx.htm#13863">See
3195LbxGetProperty</ulink>.
3196</para>
3197
3198
3199<informaltable frame='none' tabstyle='proto'>
3200  <?dbfo keep-together="always" ?>
3201  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
3202  <colspec colname='c1' colwidth="1.0*"/>
3203  <thead>
3204    <row>
3205      <entry role='protoname'>LbxPolyPoint</entry>
3206    </row>
3207  </thead>
3208  <tbody>
3209    <row>
3210      <entry role='protoargs'><emphasis>
3211gc-and-drawable: </emphasis>
3212LBXGCANDDRAWABLE</entry>
3213    </row>
3214    <row>
3215      <entry role='protoargs'><emphasis>
3216points</emphasis>
3217: LISTofLBXPOINT</entry>
3218    </row>
3219
3220    <row>
3221      <entry role='protoerror'>Errors: <emphasis>
3222Alloc</emphasis>
3223 and those given for the corresponding X request.</entry>
3224    </row>
3225  </tbody>
3226  </tgroup>
3227</informaltable>
3228
3229<para>
3230This request replaces the <emphasis>
3231PolyPoint</emphasis>
3232 request. Not all <emphasis>
3233PolyPoint</emphasis>
3234 requests can be represented as <emphasis>
3235LbxPolyPoint</emphasis>
3236 requests.
3237</para>
3238
3239
3240<para>
3241The proxy will convert the representation of the points to be relative to the
3242previous point, as described by previous coordinate mode in the X protocol.
3243</para>
3244
3245
3246<para>
3247The encoding for this request is on <ulink url="lbx.htm#29719">See
3248LbxPolyPoint</ulink>.
3249</para>
3250
3251
3252<informaltable frame='none' tabstyle='proto'>
3253  <?dbfo keep-together="always" ?>
3254  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
3255  <colspec colname='c1' colwidth="1.0*"/>
3256  <thead>
3257    <row>
3258      <entry role='protoname'>LbxPolyLine</entry>
3259    </row>
3260  </thead>
3261  <tbody>
3262    <row>
3263      <entry role='protoargs'><emphasis>
3264gc-and-drawable: </emphasis>
3265LBXGCANDDRAWABLE</entry>
3266    </row>
3267    <row>
3268      <entry role='protoargs'><emphasis>
3269points</emphasis>
3270: LISTofLBXPOINT</entry>
3271    </row>
3272
3273    <row>
3274      <entry role='protoerror'>Errors: <emphasis>
3275Alloc</emphasis>
3276 and those given for the corresponding X request.</entry>
3277    </row>
3278  </tbody>
3279  </tgroup>
3280</informaltable>
3281
3282<para>
3283This request replaces the <emphasis>
3284PolyLine</emphasis>
3285 request. Not all <emphasis>
3286PolyLine</emphasis>
3287 requests can be represented as <emphasis>
3288LbxPolyline</emphasis>
3289 requests.
3290</para>
3291
3292
3293<para>
3294The proxy will convert the representation of the points to be relative to the
3295previous point, as described by previous coordinate mode in the X protocol.
3296</para>
3297
3298
3299<para>
3300The encoding for this request is on <ulink url="lbx.htm#31086">See The
3301description of this request is on page 21.</ulink>.
3302</para>
3303
3304
3305<informaltable frame='none' tabstyle='proto'>
3306  <?dbfo keep-together="always" ?>
3307  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
3308  <colspec colname='c1' colwidth="1.0*"/>
3309  <thead>
3310    <row>
3311      <entry role='protoname'>LbxPolySegment</entry>
3312    </row>
3313  </thead>
3314  <tbody>
3315    <row>
3316      <entry role='protoargs'><emphasis>
3317gc-and-drawable: </emphasis>
3318LBXGCANDDRAWABLE</entry>
3319    </row>
3320    <row>
3321      <entry role='protoargs'><emphasis>
3322segments</emphasis>
3323: LISTofLBXSEGMENT</entry>
3324    </row>
3325    <row>
3326      <entry role='protoargs'>&nbsp;</entry>
3327    </row>
3328    <row>
3329      <entry role='protoargs'>where:</entry>
3330    </row>
3331    <row>
3332      <entry role='protoargs'>LBXSEGEMENT; [x1, y1, x2, y2: LBXINT16]</entry>
3333    </row>
3334
3335    <row>
3336      <entry role='protoerror'>Errors: <emphasis>
3337Alloc</emphasis>
3338 and those given for the corresponding X request.</entry>
3339    </row>
3340  </tbody>
3341  </tgroup>
3342</informaltable>
3343
3344<para>
3345This request replaces the <emphasis>
3346PolySegment</emphasis>
3347 request. Not all <emphasis>
3348PolySegment</emphasis>
3349 requests can be represented as <emphasis>
3350LbxPolySegment</emphasis>
3351 requests.
3352</para>
3353
3354
3355<para>
3356For segments other than the first segment of the request, [x1, y1] is
3357relative to [x1, y1] of the previous segment. For all segments, [x2, y2] is
3358relative to that segment’s [x1, y1].
3359</para>
3360
3361
3362<para>
3363The encoding for this request is on <ulink url="lbx.htm#27528">See
3364LbxPolySegment</ulink>.
3365</para>
3366
3367
3368<informaltable frame='none' tabstyle='proto'>
3369  <?dbfo keep-together="always" ?>
3370  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
3371  <colspec colname='c1' colwidth="1.0*"/>
3372  <thead>
3373    <row>
3374      <entry role='protoname'>LbxPolyRectangle</entry>
3375    </row>
3376  </thead>
3377  <tbody>
3378    <row>
3379      <entry role='protoargs'><emphasis>
3380gc-and-drawable: </emphasis>
3381LBXGCANDDRAWABLE</entry>
3382    </row>
3383    <row>
3384      <entry role='protoargs'><emphasis>
3385rectangles</emphasis>
3386: LISTofLBXRECTANGLE</entry>
3387    </row>
3388
3389    <row>
3390      <entry role='protoerror'>Errors: <emphasis>
3391Alloc</emphasis>
3392 and those given for the corresponding X request.</entry>
3393    </row>
3394  </tbody>
3395  </tgroup>
3396</informaltable>
3397
3398<para>
3399This request replaces the <emphasis>
3400PolyRectangle</emphasis>
3401 request. Not all <emphasis>
3402PolyRectangle</emphasis>
3403 requests can be represented as <emphasis>
3404LbxPolyRectangle</emphasis>
3405 requests.
3406</para>
3407
3408
3409<para>
3410The encoding for this request is on <ulink url="lbx.htm#33628">See The
3411description of this request is on page 22.</ulink>.
3412</para>
3413
3414
3415<informaltable frame='none' tabstyle='proto'>
3416  <?dbfo keep-together="always" ?>
3417  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
3418  <colspec colname='c1' colwidth="1.0*"/>
3419  <thead>
3420    <row>
3421      <entry role='protoname'>LbxPolyArc</entry>
3422    </row>
3423  </thead>
3424  <tbody>
3425    <row>
3426      <entry role='protoargs'><emphasis>
3427gc-and-drawable: </emphasis>
3428LBXGCANDDRAWABLE</entry>
3429    </row>
3430    <row>
3431      <entry role='protoargs'><emphasis>
3432arcs</emphasis>
3433: LISTofLBXARC</entry>
3434    </row>
3435
3436    <row>
3437      <entry role='protoerror'>Errors: <emphasis>
3438Alloc</emphasis>
3439 and those given for the corresponding X request.</entry>
3440    </row>
3441  </tbody>
3442  </tgroup>
3443</informaltable>
3444
3445<para>
3446This request replaces the <emphasis>
3447PolyArc</emphasis>
3448 request. Not all <emphasis>
3449PolyArc</emphasis>
3450 requests can be represented as <emphasis>
3451LbxPolyArc</emphasis>
3452 requests.
3453</para>
3454
3455
3456<para>
3457The encoding for this request is on <ulink url="lbx.htm#25855">See
3458LbxPolyArc</ulink>.
3459</para>
3460
3461
3462<informaltable frame='none' tabstyle='proto'>
3463  <?dbfo keep-together="always" ?>
3464  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
3465  <colspec colname='c1' colwidth="1.0*"/>
3466  <thead>
3467    <row>
3468      <entry role='protoname'>LbxPolyFillRectangle</entry>
3469    </row>
3470  </thead>
3471  <tbody>
3472    <row>
3473      <entry role='protoargs'><emphasis>
3474gc-and-drawable: </emphasis>
3475LBXGCANDDRAWABLE</entry>
3476    </row>
3477    <row>
3478      <entry role='protoargs'><emphasis>
3479rectangles</emphasis>
3480: LISTofLBXRECTANGLE</entry>
3481    </row>
3482
3483    <row>
3484      <entry role='protoerror'>Errors: <emphasis>
3485Alloc</emphasis>
3486 and those given for the corresponding X request.</entry>
3487    </row>
3488  </tbody>
3489  </tgroup>
3490</informaltable>
3491
3492<para>
3493This request replaces the <emphasis>
3494PolyFillRectangle</emphasis>
3495 request. Not all <emphasis>
3496PolyFillRectangle</emphasis>
3497 requests can be represented as <emphasis>
3498LbxPolyFillRectangle</emphasis>
3499 requests.
3500</para>
3501
3502
3503<para>
3504The encoding for this request is on <ulink url="lbx.htm#26399">See
3505LbxPolyFillRectangle</ulink>.
3506</para>
3507
3508
3509<informaltable frame='none' tabstyle='proto'>
3510  <?dbfo keep-together="always" ?>
3511  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
3512  <colspec colname='c1' colwidth="1.0*"/>
3513  <thead>
3514    <row>
3515      <entry role='protoname'>LbxPolyFillArc</entry>
3516    </row>
3517  </thead>
3518  <tbody>
3519    <row>
3520      <entry role='protoargs'><emphasis>
3521gc-and-drawable: </emphasis>
3522LBXGCANDDRAWABLE</entry>
3523    </row>
3524    <row>
3525      <entry role='protoargs'><emphasis>
3526arcs</emphasis>
3527: LISTofLBXARC</entry>
3528    </row>
3529
3530    <row>
3531      <entry role='protoerror'>Errors: <emphasis>
3532Alloc</emphasis>
3533 and those given for the corresponding X request.</entry>
3534    </row>
3535  </tbody>
3536  </tgroup>
3537</informaltable>
3538
3539<para>
3540This request replaces the <emphasis>
3541PolyFillArc</emphasis>
3542 request. Not all <emphasis>
3543PolyFillArc</emphasis>
3544 requests can be represented as <emphasis>
3545LbxPolyFillArc</emphasis>
3546 requests.
3547</para>
3548
3549
3550<para>
3551The encoding for this request is on <ulink url="lbx.htm#19081">See The
3552description of this request is on page 22.</ulink>.
3553</para>
3554
3555
3556<informaltable frame='none' tabstyle='proto'>
3557  <?dbfo keep-together="always" ?>
3558  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
3559  <colspec colname='c1' colwidth="1.0*"/>
3560  <thead>
3561    <row>
3562      <entry role='protoname'>LbxFillPoly</entry>
3563    </row>
3564  </thead>
3565  <tbody>
3566    <row>
3567      <entry role='protoargs'><emphasis>
3568gc-and-drawable: </emphasis>
3569LBXGCANDDRAWABLE</entry>
3570    </row>
3571    <row>
3572      <entry role='protoargs'><emphasis>
3573shape</emphasis>
3574: BYTE</entry>
3575    </row>
3576    <row>
3577      <entry role='protoargs'><emphasis>
3578points</emphasis>
3579: LISTofLBXPOINT</entry>
3580    </row>
3581
3582    <row>
3583      <entry role='protoerror'>Errors: <emphasis>
3584Alloc</emphasis>
3585 and those given for the corresponding X request.</entry>
3586    </row>
3587  </tbody>
3588  </tgroup>
3589</informaltable>
3590
3591<para>
3592This request replaces the <emphasis>
3593FillPoly</emphasis>
3594 request. Not all <emphasis>
3595FillPoly</emphasis>
3596 requests can be represented as <emphasis>
3597LbxFillPoly</emphasis>
3598 requests.
3599</para>
3600
3601
3602<para>
3603The proxy will convert the representation of the points to be relative to the
3604previous point, as described by previous coordinate mode in the X protocol.
3605</para>
3606
3607
3608<para>
3609The encoding for this request is on <ulink url="lbx.htm#24998">See
3610LbxFillPoly</ulink>.
3611</para>
3612
3613
3614<informaltable frame='none' tabstyle='proto'>
3615  <?dbfo keep-together="always" ?>
3616  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
3617  <colspec colname='c1' colwidth="1.0*"/>
3618  <thead>
3619    <row>
3620      <entry role='protoname'>LbxCopyArea</entry>
3621    </row>
3622  </thead>
3623  <tbody>
3624    <row>
3625      <entry role='protoargs'><emphasis>
3626srcCache</emphasis>
3627: CARD8      /* source drawable */</entry>
3628    </row>
3629    <row>
3630      <entry role='protoargs'><emphasis>
3631gc-and-drawable: </emphasis>
3632LBXGCANDDRAWABLE</entry>
3633    </row>
3634    <row>
3635      <entry role='protoargs'><emphasis>
3636src-Drawable</emphasis>
3637: CARD32</entry>
3638    </row>
3639    <row>
3640      <entry role='protoargs'><emphasis>
3641src-x</emphasis>
3642: LBXPINT16</entry>
3643    </row>
3644    <row>
3645      <entry role='protoargs'><emphasis>
3646src-y</emphasis>
3647: LBXPINT16</entry>
3648    </row>
3649    <row>
3650      <entry role='protoargs'><emphasis>
3651width</emphasis>
3652: LBXCARD16</entry>
3653    </row>
3654    <row>
3655      <entry role='protoargs'><emphasis>
3656height</emphasis>
3657: LBXCARD16</entry>
3658    </row>
3659    <row>
3660      <entry role='protoargs'><emphasis>
3661dst-x</emphasis>
3662: LBXPINT16 </entry>
3663    </row>
3664    <row>
3665      <entry role='protoargs'><emphasis>
3666dst-y</emphasis>
3667: LBXPINT16</entry>
3668    </row>
3669
3670    <row>
3671      <entry role='protoerror'>Errors: Those given for the corresponding X
3672request.</entry>
3673    </row>
3674  </tbody>
3675  </tgroup>
3676</informaltable>
3677
3678<para>
3679This request replaces the <emphasis>
3680CopyArea</emphasis>
3681 request for requests within its encoding range.
3682</para>
3683
3684
3685<para>
3686The encoding for this request is on <ulink url="lbx.htm#10231">See
3687LbxCopyArea</ulink>.
3688</para>
3689
3690
3691<informaltable frame='none' tabstyle='proto'>
3692  <?dbfo keep-together="always" ?>
3693  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
3694  <colspec colname='c1' colwidth="1.0*"/>
3695  <thead>
3696    <row>
3697      <entry role='protoname'>LbxCopyPlane</entry>
3698    </row>
3699  </thead>
3700  <tbody>
3701    <row>
3702      <entry role='protoargs'><emphasis>
3703bit-plane</emphasis>
3704: CARD32</entry>
3705    </row>
3706    <row>
3707      <entry role='protoargs'><emphasis>
3708src-cache</emphasis>
3709: CARD8      /* cache reference for source drawable */</entry>
3710    </row>
3711    <row>
3712      <entry role='protoargs'><emphasis>
3713gc-and-drawable: </emphasis>
3714LBXGCANDDRAWABLE</entry>
3715    </row>
3716    <row>
3717      <entry role='protoargs'><emphasis>
3718src-drawable</emphasis>
3719: CARD32</entry>
3720    </row>
3721    <row>
3722      <entry role='protoargs'><emphasis>
3723src-x</emphasis>
3724: LBXPINT16</entry>
3725    </row>
3726    <row>
3727      <entry role='protoargs'><emphasis>
3728src-y</emphasis>
3729: LBXPINT16</entry>
3730    </row>
3731    <row>
3732      <entry role='protoargs'><emphasis>
3733width</emphasis>
3734: LBXCARD16</entry>
3735    </row>
3736    <row>
3737      <entry role='protoargs'><emphasis>
3738height</emphasis>
3739: LBXCARD16</entry>
3740    </row>
3741    <row>
3742      <entry role='protoargs'><emphasis>
3743dst-x</emphasis>
3744: LBXPINT16</entry>
3745    </row>
3746    <row>
3747      <entry role='protoargs'><emphasis>
3748dst-y</emphasis>
3749: LBXPINT16</entry>
3750    </row>
3751
3752    <row>
3753      <entry role='protoerror'>Errors: Those given for the corresponding X
3754request.</entry>
3755    </row>
3756  </tbody>
3757  </tgroup>
3758</informaltable>
3759
3760<para>
3761This request replaces the <emphasis>
3762CopyPlane</emphasis>
3763 request for requests within its coding range.
3764</para>
3765
3766
3767<para>
3768The encoding for this request is on <ulink url="lbx.htm#18847">See
3769LbxCopyPlane</ulink>.
3770</para>
3771
3772
3773<informaltable frame='none' tabstyle='proto'>
3774  <?dbfo keep-together="always" ?>
3775  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
3776  <colspec colname='c1' colwidth="1.0*"/>
3777  <thead>
3778    <row>
3779      <entry role='protoname'>LbxPolyText8</entry>
3780    </row>
3781  </thead>
3782  <tbody>
3783    <row>
3784      <entry role='protoargs'><emphasis>
3785gc-and-drawable: </emphasis>
3786LBXGCANDDRAWABLE</entry>
3787    </row>
3788    <row>
3789      <entry role='protoargs'><emphasis>
3790x</emphasis>
3791: LBXPINT16</entry>
3792    </row>
3793    <row>
3794      <entry role='protoargs'><emphasis>
3795y</emphasis>
3796: LBXPINT16</entry>
3797    </row>
3798    <row>
3799      <entry role='protoargs'><emphasis>
3800items</emphasis>
3801: LISTofTEXTITEM8</entry>
3802    </row>
3803
3804    <row>
3805      <entry role='protoerror'>Errors: <emphasis>
3806Alloc</emphasis>
3807, and those given for the corresponding X request.</entry>
3808    </row>
3809  </tbody>
3810  </tgroup>
3811</informaltable>
3812
3813<para>
3814This request replaces the <emphasis>
3815PolyText8</emphasis>
3816 request for requests within its encoding range.
3817</para>
3818
3819
3820<para>
3821The encoding for this request is on <ulink url="lbx.htm#39640">See The
3822description of this request is on page 23.</ulink>.
3823</para>
3824
3825
3826<informaltable frame='none' tabstyle='proto'>
3827  <?dbfo keep-together="always" ?>
3828  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
3829  <colspec colname='c1' colwidth="1.0*"/>
3830  <thead>
3831    <row>
3832      <entry role='protoname'>LbxPolyText16</entry>
3833    </row>
3834  </thead>
3835  <tbody>
3836    <row>
3837      <entry role='protoargs'><emphasis>
3838gc-and-drawable: </emphasis>
3839LBXGCANDDRAWABLE</entry>
3840    </row>
3841    <row>
3842      <entry role='protoargs'><emphasis>
3843x:</emphasis>
3844 LBXPINT16</entry>
3845    </row>
3846    <row>
3847      <entry role='protoargs'><emphasis>
3848y</emphasis>
3849: LBXPINT16</entry>
3850    </row>
3851    <row>
3852      <entry role='protoargs'><emphasis>
3853items</emphasis>
3854: LISTofTEXTITEM16</entry>
3855    </row>
3856
3857    <row>
3858      <entry role='protoerror'>Errors: <emphasis>
3859Alloc</emphasis>
3860, and those given for the corresponding X request.</entry>
3861    </row>
3862  </tbody>
3863  </tgroup>
3864</informaltable>
3865
3866<para>
3867This request replaces the <emphasis>
3868PolyText16</emphasis>
3869 request for requests within its encoding range.
3870</para>
3871
3872
3873<para>
3874The encoding for this request is on <ulink url="lbx.htm#32634">See The
3875description of this request is on page 24.</ulink>.
3876</para>
3877
3878
3879<informaltable frame='none' tabstyle='proto'>
3880  <?dbfo keep-together="always" ?>
3881  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
3882  <colspec colname='c1' colwidth="1.0*"/>
3883  <thead>
3884    <row>
3885      <entry role='protoname'>LbxImageText8</entry>
3886    </row>
3887  </thead>
3888  <tbody>
3889    <row>
3890      <entry role='protoargs'><emphasis>
3891gc-and-drawable: </emphasis>
3892LBXGCANDDRAWABLE</entry>
3893    </row>
3894    <row>
3895      <entry role='protoargs'><emphasis>
3896nChars</emphasis>
3897: CARD8</entry>
3898    </row>
3899    <row>
3900      <entry role='protoargs'><emphasis>
3901x</emphasis>
3902: LBXPINT16</entry>
3903    </row>
3904    <row>
3905      <entry role='protoargs'><emphasis>
3906y</emphasis>
3907: LBXPINT16</entry>
3908    </row>
3909    <row>
3910      <entry role='protoargs'><emphasis>
3911string</emphasis>
3912: STRING8</entry>
3913    </row>
3914
3915    <row>
3916      <entry role='protoerror'>Errors: <emphasis>
3917Alloc</emphasis>
3918, and those given for the corresponding X request.</entry>
3919    </row>
3920  </tbody>
3921  </tgroup>
3922</informaltable>
3923
3924<para>
3925This request replaces the <emphasis>
3926ImageText8</emphasis>
3927 request for requests within its encoding range.
3928</para>
3929
3930
3931<para>
3932The encoding for this request is on <ulink url="lbx.htm#17018">See The
3933description of this request is on page 24.</ulink>.
3934</para>
3935
3936
3937<informaltable frame='none' tabstyle='proto'>
3938  <?dbfo keep-together="always" ?>
3939  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
3940  <colspec colname='c1' colwidth="1.0*"/>
3941  <thead>
3942    <row>
3943      <entry role='protoname'>LbxImageText16</entry>
3944    </row>
3945  </thead>
3946  <tbody>
3947    <row>
3948      <entry role='protoargs'><emphasis>
3949nChars</emphasis>
3950: CARD8</entry>
3951    </row>
3952    <row>
3953      <entry role='protoargs'><emphasis>
3954gc-and-drawable: </emphasis>
3955LBXGCANDDRAWABLE</entry>
3956    </row>
3957    <row>
3958      <entry role='protoargs'>x: LBXPINT16</entry>
3959    </row>
3960    <row>
3961      <entry role='protoargs'><emphasis>
3962y</emphasis>
3963: LBXPINT16</entry>
3964    </row>
3965    <row>
3966      <entry role='protoargs'><emphasis>
3967string</emphasis>
3968: STRING16</entry>
3969    </row>
3970
3971    <row>
3972      <entry role='protoerror'>Errors: <emphasis>
3973Alloc</emphasis>
3974, and those given for the corresponding X request.</entry>
3975    </row>
3976  </tbody>
3977  </tgroup>
3978</informaltable>
3979
3980<para>
3981This request replaces the <emphasis>
3982ImageText16</emphasis>
3983 request for requests within its encoding range.
3984</para>
3985
3986
3987<para>
3988The encoding for this request is on <ulink url="lbx.htm#23910">See The
3989description of this request is on page 24.</ulink>.
3990</para>
3991
3992
3993<informaltable frame='none' tabstyle='proto'>
3994  <?dbfo keep-together="always" ?>
3995  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
3996  <colspec colname='c1' colwidth="1.0*"/>
3997  <thead>
3998    <row>
3999      <entry role='protoname'>LbxPutImage</entry>
4000    </row>
4001  </thead>
4002  <tbody>
4003    <row>
4004      <entry role='protoargs'><emphasis>
4005compression-method</emphasis>
4006: CARD8</entry>
4007    </row>
4008    <row>
4009      <entry role='protoargs'><emphasis>
4010format</emphasis>
4011: {<emphasis>
4012Bitmap</emphasis>
4013, <emphasis>
4014XYPixmap</emphasis>
4015, <emphasis>
4016ZPixmap</emphasis>
4017}                  /* packed */</entry>
4018    </row>
4019    <row>
4020      <entry role='protoargs'><emphasis>
4021gc-and-drawable: </emphasis>
4022LBXGCANDDRAWABLE</entry>
4023    </row>
4024    <row>
4025      <entry role='protoargs'><emphasis>
4026width</emphasis>
4027, <emphasis>
4028height</emphasis>
4029: LBXCARD16</entry>
4030    </row>
4031    <row>
4032      <entry role='protoargs'><emphasis>
4033dst-x</emphasis>
4034, <emphasis>
4035dst-y</emphasis>
4036: LBXPINT16</entry>
4037    </row>
4038    <row>
4039      <entry role='protoargs'><emphasis>
4040depth</emphasis>
4041: CARD8                  /* packed */</entry>
4042    </row>
4043    <row>
4044      <entry role='protoargs'><emphasis>
4045left-pad</emphasis>
4046: CARD8                  /* packed */</entry>
4047    </row>
4048    <row>
4049      <entry role='protoargs'><emphasis>
4050pad-bytes</emphasis>
4051: CARD8                  /* packed */</entry>
4052    </row>
4053    <row>
4054      <entry role='protoargs'><emphasis>
4055data</emphasis>
4056:LISTofBYTE</entry>
4057    </row>
4058
4059    <row>
4060      <entry role='protoerror'>Errors: <emphasis>
4061Alloc</emphasis>
4062, <emphasis>
4063Value</emphasis>
4064</entry>
4065    </row>
4066  </tbody>
4067  </tgroup>
4068</informaltable>
4069
4070<para>
4071When the request can be usefully compressed, this request replaces the
4072<emphasis>
4073PutImage</emphasis>
4074 request. The <emphasis>
4075compression-method</emphasis>
4076 parameter contains the opcode of a compression method returned in the
4077<emphasis>
4078LbxStartProxy</emphasis>
4079 reply. The <emphasis>
4080pad-bytes</emphasis>
4081 parameter gives the number of unused pad bytes that follow the compressed
4082image data. All other parameters are as in the X request. If the specified
4083compression method is not recognized, the server returns a <emphasis>
4084Value</emphasis>
4085 error.
4086</para>
4087
4088
4089<para>
4090The encoding for this request is on <ulink url="lbx.htm#12268">See
4091LbxPutImage</ulink>.
4092</para>
4093
4094
4095<informaltable frame='none' tabstyle='proto'>
4096  <?dbfo keep-together="always" ?>
4097  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
4098  <colspec colname='c1' colwidth="1.0*"/>
4099  <thead>
4100    <row>
4101      <entry role='protoname'>LbxGetImage</entry>
4102    </row>
4103  </thead>
4104  <tbody>
4105    <row>
4106      <entry role='protoargs'><emphasis>
4107drawable</emphasis>
4108: DRAWABLE</entry>
4109    </row>
4110    <row>
4111      <entry role='protoargs'><emphasis>
4112x</emphasis>
4113, <emphasis>
4114y</emphasis>
4115: INT16</entry>
4116    </row>
4117    <row>
4118      <entry role='protoargs'><emphasis>
4119width</emphasis>
4120, <emphasis>
4121height</emphasis>
4122: CARD16</entry>
4123    </row>
4124    <row>
4125      <entry role='protoargs'><emphasis>
4126plane-mask</emphasis>
4127: CARD32</entry>
4128    </row>
4129    <row>
4130      <entry role='protoargs'><emphasis>
4131format</emphasis>
4132: {XYPixmap, ZPixmap}</entry>
4133    </row>
4134    <row>
4135      <entry>=&gt;</entry>
4136    </row>
4137    <row>
4138      <entry role='protoargs'>depth: CARD8</entry>
4139    </row>
4140    <row>
4141      <entry role='protoargs'>x-length: CARD32</entry>
4142    </row>
4143    <row>
4144      <entry role='protoargs'>visual: VISUALID or None</entry>
4145    </row>
4146    <row>
4147      <entry role='protoargs'>compression-method: CARD8</entry>
4148    </row>
4149    <row>
4150      <entry role='protoargs'>data: LISTofBYTE</entry>
4151    </row>
4152
4153    <row>
4154      <entry role='protoerror'>Errors: <emphasis>
4155Alloc,Match,Value</emphasis>
4156</entry>
4157    </row>
4158  </tbody>
4159  </tgroup>
4160</informaltable>
4161
4162<para>
4163This request can replace the <emphasis>
4164GetImage</emphasis>
4165 request. The same semantics apply, with the following exceptions.
4166</para>
4167
4168
4169<para>
4170The <emphasis>
4171compression-method</emphasis>
4172 field contains the opcode of the compression method used in the reply. The
4173compression opcodes are supplied in the <emphasis>
4174LbxStartProxy</emphasis>
4175 reply. The <emphasis>
4176x-length </emphasis>
4177field<emphasis>
4178 </emphasis>
4179contains the length of the uncompressed version of the reply in 4 byte units.
4180</para>
4181
4182
4183<para>
4184A <emphasis>
4185Value</emphasis>
4186 error is returned if the format is not recognized by the X server. A <emphasis>
4187Match</emphasis>
4188 error is returned under the same circumstances as described by the <emphasis>
4189GetImage</emphasis>
4190 request.
4191</para>
4192
4193
4194<para>
4195The encoding for this request is on <ulink url="lbx.htm#10066">See
4196LbxGetImage</ulink>.
4197</para>
4198
4199
4200
4201<informaltable frame='none' tabstyle='proto'>
4202  <?dbfo keep-together="always" ?>
4203  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
4204  <colspec colname='c1' colwidth="1.0*"/>
4205  <thead>
4206    <row>
4207      <entry role='protoname'>LbxBeginLargeRequest</entry>
4208    </row>
4209  </thead>
4210  <tbody>
4211    <row>
4212      <entry role='protoargs'><emphasis>
4213large-request-length</emphasis>
4214: CARD32</entry>
4215    </row>
4216
4217    <row>
4218      <entry role='protoerror'>Errors: <emphasis>
4219Alloc</emphasis>
4220</entry>
4221    </row>
4222  </tbody>
4223  </tgroup>
4224</informaltable>
4225
4226<para>
4227This request, along with the Lbx<emphasis>
4228LargeRequestData</emphasis>
4229 and Lbx<emphasis>
4230EndLargeRequest</emphasis>
4231 requests, is used to transport a large request in pieces. The smaller size of
4232the resulting requests allows smoother multiplexing of clients on a single low
4233bandwidth connection to the server. The resulting finer-grained multiplexing
4234improves responsiveness for the other clients.
4235</para>
4236
4237
4238<para>
4239After a <emphasis>
4240LbxBeginLargeRequest</emphasis>
4241 request is sent, multiple <emphasis>
4242LbxLargeRequestData</emphasis>
4243 requests are sent to transport all of the data in the large request, and
4244finally an <emphasis>
4245LbxEndLargeRequest</emphasis>
4246 request is sent. The large-request-length field expresses the total length of
4247the transported large request, expressed as the number of bytes in the
4248transported request divided by four.
4249</para>
4250
4251
4252<para>
4253The encoding for this request is on <ulink url="lbx.htm#22013">See The
4254description of this request is on page 25.</ulink>.
4255</para>
4256
4257
4258<informaltable frame='none' tabstyle='proto'>
4259  <?dbfo keep-together="always" ?>
4260  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
4261  <colspec colname='c1' colwidth="1.0*"/>
4262  <thead>
4263    <row>
4264      <entry role='protoname'>LbxLargeRequestData</entry>
4265    </row>
4266  </thead>
4267  <tbody>
4268    <row>
4269      <entry role='protoargs'><emphasis>
4270data</emphasis>
4271: LISTofBYTE</entry>
4272    </row>
4273
4274    <row>
4275      <entry role='protoerror'>Errors: <emphasis>
4276Alloc</emphasis>
4277</entry>
4278    </row>
4279  </tbody>
4280  </tgroup>
4281</informaltable>
4282
4283<para>
4284This request is used to carry the segments of a larger request, as described in
4285the definition of <emphasis>
4286LbxBeginLargeRequest</emphasis>
4287. The data must be carried in order, starting with the request header, and each
4288segment must be multiples of 4 bytes long. If the <emphasis>
4289LbxLargeRequestData</emphasis>
4290 is not preceded by a corresponding <emphasis>
4291LbxBeginLargeRequest</emphasis>
4292, a <emphasis>
4293BadAlloc</emphasis>
4294 error is generated.
4295</para>
4296
4297
4298<para>
4299The encoding for this request is on <ulink url="lbx.htm#31469">See The
4300description of this request is on page 26.</ulink>.
4301</para>
4302
4303
4304<informaltable frame='none' tabstyle='proto'>
4305  <?dbfo keep-together="always" ?>
4306  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
4307  <colspec colname='c1' colwidth="1.0*"/>
4308  <thead>
4309    <row>
4310      <entry role='protoname'>LbxEndLargeRequest</entry>
4311    </row>
4312  </thead>
4313  <tbody>
4314    <row>
4315      <entry role='protoerror'>Errors: <emphasis>
4316Length, Alloc</emphasis>
4317</entry>
4318    </row>
4319  </tbody>
4320  </tgroup>
4321</informaltable>
4322
4323<para>
4324As described in the definition of <emphasis>
4325LbxBeginLargeRequest</emphasis>
4326, <emphasis>
4327LbxEndLargeRequest</emphasis>
4328 is used to signal the end of a series of <emphasis>
4329LargeRequestData</emphasis>
4330 requests. If the total length of the data transported by the <emphasis>
4331LbxLargeRequestData</emphasis>
4332 requests does not match the large-request-length field of the preceding
4333<emphasis>
4334LbxBeginLargeRequest</emphasis>
4335 request, then a <emphasis>
4336Length</emphasis>
4337 error occurs. If the <emphasis>
4338LbxEndLargeRequest</emphasis>
4339 is not preceded by a corresponding <emphasis>
4340LbxBeginLargeRequest</emphasis>
4341, a <emphasis>
4342BadAlloc</emphasis>
4343 error is generated. The request is executed in order for that client as if it
4344were the request after the request preceding <emphasis>
4345LbxEndLargeRequest</emphasis>
4346.
4347</para>
4348
4349
4350<para>
4351The encoding for this request is on <ulink url="lbx.htm#31037">See
4352LbxEndLargeRequest</ulink>.
4353</para>
4354
4355
4356
4357</sect3>
4358</sect2>
4359<sect2 id='events'>
4360<title>Events</title>
4361
4362<informaltable frame='none' tabstyle='proto'>
4363  <?dbfo keep-together="always" ?>
4364  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
4365  <colspec colname='c1' colwidth="1.0*"/>
4366  <thead>
4367    <row>
4368      <entry role='protoname'>LbxSwitchEvent</entry>
4369    </row>
4370  </thead>
4371  <tbody>
4372    <row>
4373      <entry role='protoargs'><emphasis>
4374client</emphasis>
4375: CARD32</entry>
4376    </row>
4377  </tbody>
4378  </tgroup>
4379</informaltable>
4380
4381<para>
4382Notify the proxy that the subsequent replies, events, and errors are relative
4383to the specified client.
4384</para>
4385
4386
4387<para>
4388The encoding for this event is on <ulink url="lbx.htm#17348">See
4389LbxSwitchEvent</ulink>.
4390</para>
4391
4392
4393<informaltable frame='none' tabstyle='proto'>
4394  <?dbfo keep-together="always" ?>
4395  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
4396  <colspec colname='c1' colwidth="1.0*"/>
4397  <thead>
4398    <row>
4399      <entry role='protoname'>LbxCloseEvent</entry>
4400    </row>
4401  </thead>
4402  <tbody>
4403    <row>
4404      <entry role='protoargs'><emphasis>
4405client</emphasis>
4406: CARD32</entry>
4407    </row>
4408  </tbody>
4409  </tgroup>
4410</informaltable>
4411
4412<para>
4413Notify the proxy that the specified client's connection to the server is closed.
4414</para>
4415
4416
4417<para>
4418The encoding for this event is on <ulink url="lbx.htm#41814">See The
4419description of this event is on page 27.</ulink>.
4420</para>
4421
4422
4423<informaltable frame='none' tabstyle='proto'>
4424  <?dbfo keep-together="always" ?>
4425  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
4426  <colspec colname='c1' colwidth="1.0*"/>
4427  <thead>
4428    <row>
4429      <entry role='protoname'>LbxInvalidateTagEvent</entry>
4430    </row>
4431  </thead>
4432  <tbody>
4433    <row>
4434      <entry role='protoargs'><emphasis>
4435tag</emphasis>
4436: CARD32</entry>
4437    </row>
4438    <row>
4439      <entry role='protoargs'><emphasis>
4440tag-type</emphasis>
4441: {Modmap, Keymap, Property, Font, ConnInfo}</entry>
4442    </row>
4443  </tbody>
4444  </tgroup>
4445</informaltable>
4446
4447<para>
4448This message informs the proxy that the tag and the server data referenced by
4449the tag are obsolete, and should be discarded. The tag type may be one of the
4450following values: <emphasis>
4451LbxTagTypeModmap</emphasis>
4452, <emphasis>
4453LbxTagTypeKeymap</emphasis>
4454, <emphasis>
4455LbxTagTypeProperty</emphasis>
4456, <emphasis>
4457LbxTagTypeFont</emphasis>
4458, <emphasis>
4459LbxTagTypeConnInfo</emphasis>
4460.
4461</para>
4462
4463
4464<para>
4465The encoding for this event is on <ulink url="lbx.htm#34406">See
4466LbxInvalidateTagEvent</ulink>.
4467</para>
4468
4469
4470<informaltable frame='none' tabstyle='proto'>
4471  <?dbfo keep-together="always" ?>
4472  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
4473  <colspec colname='c1' colwidth="1.0*"/>
4474  <thead>
4475    <row>
4476      <entry role='protoname'>LbxSendTagDataEvent</entry>
4477    </row>
4478  </thead>
4479  <tbody>
4480    <row>
4481      <entry role='protoargs'><emphasis>
4482tag</emphasis>
4483: CARD32</entry>
4484    </row>
4485    <row>
4486      <entry role='protoargs'><emphasis>
4487tag-type</emphasis>
4488: {Property}</entry>
4489    </row>
4490  </tbody>
4491  </tgroup>
4492</informaltable>
4493
4494<para>
4495The server sends this event to the proxy to request a copy of tagged data which
4496is being stored by the proxy. The request contains a tag which was previously
4497assigned to the data by the server. The proxy should respond to <emphasis>
4498SendTagData</emphasis>
4499 by sending a <emphasis>
4500TagData</emphasis>
4501 request to the server. The tag type may be one of the following values:
4502<emphasis>
4503LbxTagTypeProperty</emphasis>
4504.
4505</para>
4506
4507
4508<para>
4509The encoding for this event is on <ulink url="lbx.htm#22353">See
4510LbxSendTagDataEvent</ulink>.
4511</para>
4512
4513
4514<informaltable frame='none' tabstyle='proto'>
4515  <?dbfo keep-together="always" ?>
4516  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
4517  <colspec colname='c1' colwidth="1.0*"/>
4518  <thead>
4519    <row>
4520      <entry role='protoname'>LbxListenToOne</entry>
4521    </row>
4522  </thead>
4523  <tbody>
4524    <row>
4525      <entry role='protoargs'><emphasis>
4526client</emphasis>
4527: CARD32 or <emphasis>
45280xffffffff</emphasis>
4529</entry>
4530    </row>
4531  </tbody>
4532  </tgroup>
4533</informaltable>
4534
4535<para>
4536When the server is grabbed, <emphasis>
4537ListenToOne</emphasis>
4538 is sent to the proxy. As an X client, the proxy itself is unaffected by grabs,
4539in order that it may respond to requests for data from the X server.
4540</para>
4541
4542
4543<para>
4544When the client grabbing the server is managed through the proxy, the proxy
4545will permit messages from itself and the grabbing client to be sent immediately
4546to the server, and may buffer requests from other clients of the proxy. The
4547client is identified in the event.
4548</para>
4549
4550
4551<para>
4552When the client grabbing the server is not managed through the proxy, the
4553client field in the event will be <emphasis>
45540xffffffff</emphasis>
4555. The proxy will communicate with the server, and it may buffer requests from
4556other clients. The proxy will continue to handle new connections while the
4557server is grabbed.
4558</para>
4559
4560
4561<para>
4562The server will send <emphasis>
4563ListenToAll</emphasis>
4564 to the proxy when the server is ungrabbed. There is no time-out for this
4565interval in the protocol.
4566</para>
4567
4568
4569<para>
4570The encoding for this event is on <ulink url="lbx.htm#18630">See The
4571description of this event is on page 27.</ulink>.
4572</para>
4573
4574
4575<informaltable frame='none' tabstyle='proto'>
4576  <?dbfo keep-together="always" ?>
4577  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
4578  <colspec colname='c1' colwidth="1.0*"/>
4579  <tbody>
4580    <row>
4581      <entry role='protoname'>LbxListenToAll</entry>
4582    </row>
4583  </tbody>
4584  </tgroup>
4585</informaltable>
4586
4587<para>
4588Notify the proxy that the server has been ungrabbed, and that the proxy may now
4589send all buffered client requests on to the server.
4590</para>
4591
4592
4593<para>
4594The encoding for this event is on <ulink url="lbx.htm#30610">See The
4595description of this event is on page 27.</ulink>.
4596</para>
4597
4598
4599<informaltable frame='none' tabstyle='proto'>
4600  <?dbfo keep-together="always" ?>
4601  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
4602  <colspec colname='c1' colwidth="1.0*"/>
4603  <thead>
4604    <row>
4605      <entry role='protoname'>LbxQuickMotionDeltaEvent</entry>
4606    </row>
4607  </thead>
4608  <tbody>
4609    <row>
4610      <entry role='protoargs'><emphasis>
4611deltaTime</emphasis>
4612: CARD8</entry>
4613    </row>
4614    <row>
4615      <entry role='protoargs'><emphasis>
4616deltaX</emphasis>
4617: INT8</entry>
4618    </row>
4619    <row>
4620      <entry role='protoargs'><emphasis>
4621deltaY</emphasis>
4622: INT8</entry>
4623    </row>
4624  </tbody>
4625  </tgroup>
4626</informaltable>
4627
4628<para>
4629This event is used as a replacement for the <emphasis>
4630MotionNotify</emphasis>
4631 event when possible. The fields are used as deltas to the most recent
4632<emphasis>
4633MotionNotify</emphasis>
4634 event encoded as a <emphasis>
4635MotionNotify</emphasis>
4636 event, <emphasis>
4637LbxQuickMotionDeltaEvent</emphasis>
4638, or <emphasis>
4639LbxMotionDeltaEvent</emphasis>
4640. Not every <emphasis>
4641MotionNotify</emphasis>
4642 event can be encoded as a <emphasis>
4643LbxQuickMotionDeltaEvent</emphasis>
4644.
4645</para>
4646
4647
4648<para>
4649The encoding for this event is on <ulink url="lbx.htm#35213">See
4650LbxQuickMotionDeltaEvent</ulink>.
4651</para>
4652
4653
4654<informaltable frame='none' tabstyle='proto'>
4655  <?dbfo keep-together="always" ?>
4656  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
4657  <colspec colname='c1' colwidth="1.0*"/>
4658  <thead>
4659    <row>
4660      <entry role='protoname'>LbxMotionDeltaEvent</entry>
4661    </row>
4662  </thead>
4663  <tbody>
4664    <row>
4665      <entry role='protoargs'><emphasis>
4666deltaX</emphasis>
4667: INT8</entry>
4668    </row>
4669    <row>
4670      <entry role='protoargs'><emphasis>
4671deltaY</emphasis>
4672: INT8</entry>
4673    </row>
4674    <row>
4675      <entry role='protoargs'><emphasis>
4676deltaTime</emphasis>
4677: CARD16</entry>
4678    </row>
4679    <row>
4680      <entry role='protoargs'><emphasis>
4681deltaSequence</emphasis>
4682: CARD16</entry>
4683    </row>
4684  </tbody>
4685  </tgroup>
4686</informaltable>
4687
4688<para>
4689This event is used as a replacement for the <emphasis>
4690MotionNotify</emphasis>
4691 event when possible. The fields are used as deltas to the most recent
4692<emphasis>
4693MotionNotify</emphasis>
4694 event encoded as a <emphasis>
4695MotionNotify</emphasis>
4696 event, <emphasis>
4697LbxQuickMotionDeltaEvent</emphasis>
4698, or <emphasis>
4699LbxMotionDeltaEvent</emphasis>
4700. Not every <emphasis>
4701MotionNotify</emphasis>
4702 event can be encoded as <emphasis>
4703a LbxMotionDeltaEvent</emphasis>
4704.
4705</para>
4706
4707
4708<para>
4709The encoding for this event is on <ulink url="lbx.htm#35310">See
4710LbxMotionDeltaEvent</ulink>.
4711</para>
4712
4713
4714<informaltable frame='none' tabstyle='proto'>
4715  <?dbfo keep-together="always" ?>
4716  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
4717  <colspec colname='c1' colwidth="1.0*"/>
4718  <thead>
4719    <row>
4720      <entry role='protoname'>LbxReleaseCmapEvent</entry>
4721    </row>
4722  </thead>
4723  <tbody>
4724    <row>
4725      <entry role='protoargs'><emphasis>
4726colormap</emphasis>
4727: Colormap</entry>
4728    </row>
4729  </tbody>
4730  </tgroup>
4731</informaltable>
4732
4733<para>
4734This event notifies the proxy that it must release the grab on this colormap
4735via the ReleaseCmap request. <ulink url="lbx.htm#34675">See
4736LbxReleaseCmap</ulink>
4737</para>
4738
4739
4740<para>
4741The encoding for this event is on <ulink url="lbx.htm#14052">See
4742LbxReleaseCmapEvent</ulink>.
4743</para>
4744
4745
4746<informaltable frame='none' tabstyle='proto'>
4747  <?dbfo keep-together="always" ?>
4748  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
4749  <colspec colname='c1' colwidth="1.0*"/>
4750  <thead>
4751    <row>
4752      <entry role='protoname'>LbxFreeCellsEvent</entry>
4753    </row>
4754  </thead>
4755  <tbody>
4756    <row>
4757      <entry role='protoargs'><emphasis>
4758colormap</emphasis>
4759: Colormap</entry>
4760    </row>
4761    <row>
4762      <entry role='protoargs'><emphasis>
4763pixelStart, pixelEnd</emphasis>
4764: CARD32</entry>
4765    </row>
4766  </tbody>
4767  </tgroup>
4768</informaltable>
4769
4770<para>
4771The <emphasis>
4772LbxFreeCells</emphasis>
4773 event is sent to a proxy that has a colormap grabbed to notify the proxy that
4774the reference count of the described cells were decremented to zero by the
4775server or another proxy. The reference count includes those by this proxy. The
4776proxy must update its copy of the colormap state accordingly if the colormap is
4777still grabbed, or if the proxy may in the future grab the colormap using
4778smart-grab mode. <ulink url="lbx.htm#10922">See LbxGrabCmap</ulink>
4779</para>
4780
4781
4782<para>
4783The pixelStart and pixelEnd fields of the event denote a continuous range of
4784cells that were freed.
4785</para>
4786
4787
4788<para>
4789The encoding for this event is on <ulink url="lbx.htm#14731">See
4790LbxFreeCellsEvent</ulink>.
4791</para>
4792
4793</sect2>
4794<sect2 id='responses'>
4795<title>Responses</title>
4796
4797<para>
4798Responses are messages from the server to the proxy that not, strictly
4799speaking, events, replies or errors.
4800</para>
4801
4802<informaltable frame='none' tabstyle='proto'>
4803  <?dbfo keep-together="always" ?>
4804  <tgroup cols='1' align='left' colsep='0' rowsep='0'>
4805  <colspec colname='c1' colwidth="1.0*"/>
4806  <thead>
4807    <row>
4808      <entry role='protoname'>LbxDeltaResponse</entry>
4809    </row>
4810  </thead>
4811  <tbody>
4812    <row>
4813      <entry role='protoargs'><emphasis>
4814count</emphasis>
4815: CARD8</entry>
4816    </row>
4817    <row>
4818      <entry role='protoargs'><emphasis>
4819cache-index</emphasis>
4820: CARD8</entry>
4821    </row>
4822    <row>
4823      <entry role='protoargs'><emphasis>
4824diffs</emphasis>
4825: LISTofDIFFITEM</entry>
4826    </row>
4827  </tbody>
4828  </tgroup>
4829</informaltable>
4830
4831<para>
4832This response carries an event, reply, or error that has been encoded relative
4833to a message in the response delta cache. The <emphasis>
4834cache-index</emphasis>
4835 field is the index into the cache. Each entry in <emphasis>
4836diffs</emphasis>
4837 provides a byte offset and replacement value to use in reconstructing the
4838response.
4839</para>
4840
4841
4842<para>
4843The encoding for this event is on <ulink url="lbx.htm#17100">See
4844LbxDeltaResponse</ulink>.
4845</para>
4846
4847
4848</sect2>
4849</sect1>
4850<sect1 id='algorithm_naming'>
4851<title>Algorithm Naming</title>
4852
4853<para>
4854To avoid potential clashes between different but similar algorithms for stream,
4855bitmap, and pixmap compression, the following naming scheme will be adhered to:
4856</para>
4857
4858
4859<para>
4860Each algorithm has a unique name, which is a STRING8, of the following form:
4861</para>
4862
4863
4864<para>
4865   &lt;organization&gt;-&lt;some-descriptive-name&gt;
4866</para>
4867
4868
4869<para>
4870The organization field above is the organization name as registered in section
48711 of the X Registry (the registry is provided as a free service by the X
4872Consortium.) This prevents conflicts among different vendor’s extensions.
4873</para>
4874
4875
4876<para>
4877As an example, the X Consortium defines a zlib-based stream compression
4878algorithm called XC-ZLIB.
4879</para>
4880
4881
4882</sect1>
4883<sect1 id='encoding'>
4884<title>Encoding</title>
4885
4886<para>
4887The syntax and types used in the encoding are taken from the X protocol
4888encoding. Where LBX defines new types, they are defined earlier in this
4889document.
4890</para>
4891
4892
4893<para>
4894As in the X protocol, in various cases, the number of bytes occupied by a
4895component will be specified by a lowercase single-letter variable name instead
4896of a specific numeric value, and often some other component will have its value
4897specified as a simple numeric expression involving these variables. Components
4898specified with such expressions are always interpreted as unsigned integers.
4899The scope of such variables is always just the enclosing request, reply, error,
4900event, or compound type structure.
4901</para>
4902
4903
4904<para>
4905For unused bytes, the encode-form is:
4906</para>
4907
4908<literallayout>
4909N            unused
4910</literallayout>
4911
4912<para>
4913If the number of unused bytes is variable, the encode-form typically is:
4914</para>
4915
4916<literallayout>
4917p            unused, p=pad(E)
4918</literallayout>
4919
4920<para>
4921where E is some expression, and pad(E) is the number of bytes needed to round E
4922up to a multiple of four.
4923</para>
4924
4925
4926<para>
4927pad(E) = (4 - (E mod 4)) mod 4
4928</para>
4929
4930
4931<para>
4932In many of the encodings, the length depends on many variable length fields.
4933The variable L is used to indicate the number of padded 4 byte units needed to
4934carry the request. Similarly, the variable Lpad indicates the number of bytes
4935needed to pad the request to a 4 byte boundary.
4936</para>
4937
4938<literallayout>
4939For counted lists there is a common encoding of NLISTofFOO:
4940</literallayout>
4941
4942<literallayout class='monospaced'>
4943<emphasis role='bold'>NLISTofFOO</emphasis>
49441      m      num items
4945m      LISTofFOO      items
4946</literallayout>
4947
4948<para>
4949For cached GC and Drawables:
4950</para>
4951
4952<literallayout>
4953<emphasis role='bold'>LBXGCANDDRAWUPDATE</emphasis>
49544 or 0      DRAWBLE      optional drawable
49554 or 0      GC           optional GC
4956</literallayout>
4957
4958
4959
4960<literallayout>
4961<emphasis role='bold'>LBXGCANDDRAWABLE</emphasis>
49628      LBXGCANDDRAWENT      cache-entries
49638                           unused
4964m      LBXGCANDDRAWUPDATE   optional GC and Drawable
4965</literallayout>
4966
4967
4968<sect2 id='errors2'>
4969<title>Errors</title>
4970
4971<literallayout class='monospaced'>
4972<emphasis role='bold'>LbxClient</emphasis>
49731      0          Error
49741      CARD8      error-base + 0
49752      CARD16     sequence number
49764                 unused
49772      CARD16     lbx opcode
49781      CARD8      major opcode
497921                unused
4980</literallayout>
4981
4982</sect2>
4983<sect2 id='requests2'>
4984<title>Requests</title>
4985
4986<literallayout class='monospaced'>
4987<emphasis role='bold'>LbxQueryVersion</emphasis>
49881      CARD8      opcode
49891      0          lbx opcode
49902      1          request length
4991=&gt;
49921      1          Reply
49931                 unused
49942      CARD16     sequence number
49954      0          reply length
49962      CARD16     major version
49972      CARD16     minor version
499820                unused
4999</literallayout>
5000
5001<para>
5002The description of this request is on <ulink url="lbx.htm#18761">See
5003LbxQueryVersion</ulink>.
5004</para>
5005
5006
5007<literallayout class='monospaced'>
5008<emphasis role='bold'>LbxStartProxy</emphasis>
50091      CARD8                      opcode
50101      1                          lbx opcode
50112      L                          request length
5012n      NLISTofOPTION-REQUEST      options
5013p                                 unused, p=pad(n)
5014
5015<emphasis role='bold'>OPTION-REQUEST</emphasis>
50161      OPTCODE                    option-code
5017m      OPTLEN                     option-request-byte-length, (b=m+a+1)
5018a      DELTAOPT or                option
5019       NLISTofNAMEDOPT or
5020       NLISTofSTR or
5021       NLISTofPIXMAPMETHOD or
5022       BOOL
5023</literallayout>
5024
5025<para>
5026The encoding of the option field depends on the option-code.
5027See <ulink url="lbx.htm#35444">See StartProxy Options</ulink>.
5028</para>
5029
5030<literallayout class='monospaced'>
50311      OPTCODE                               option-code
50320      LbxOptionDeltaProxy
50331      LbxOptionDeltaServer
50342      LbxOptionStreamCompression
50353      LbxOptionBitmapCompression
50364      LbxOptionPixmapCompression
50375      LbxOptionMessageCompression              /* also known as squishing */
50386      LbxOptionUseTags
50397      LbxOptionColormapAllocation
5040255    LbxOptionExtension
5041</literallayout>
5042
5043<para>
5044OPTLEN has two possible encodings, depending on the size of the value carried:
5045</para>
5046
5047<literallayout class='monospaced'>
5048<emphasis role='bold'>OPTLEN</emphasis>
50491      CARD8              b (0 &lt; b &lt;= 255)
5050
5051<emphasis role='bold'>OPTLEN</emphasis>
50521      0                  long length header
50531      c                  length0, c = b &gt;&gt; 8
50541      d                  length1, d= b &amp; #xff
5055
5056<emphasis role='bold'>DELTAOPT</emphasis>
50571      CARD8      min-cache-size
50581      CARD8      max-cache-size
50591      CARD8      preferred-cache-size
50601      CARD8      min-message-length
50611      CARD8      max-message-length (in 4-byte units)
50621      CARD8      preferred-message-length
5063
5064<emphasis role='bold'>NAMEDOPT</emphasis>
5065f      STR             type-name
50661      g+1             option-data-length
5067g      LISTofBYTE      option-data (option specific)
5068
5069<emphasis role='bold'>PIXMAPMETHOD</emphasis>
5070h      STR              name
50711      BITMASK          format mask
50721      j                depth count
5073j      LISTofCARD8      depths
5074
5075=&gt;
5076=&gt;
5077
50781      1                 Reply
50791      CARD8             count
5080
50810xff      options in request cannot be decoded
50822      CARD16            sequence number
50834      (a+p-32)/4        reply length
5084a      LISTofCHOICE      options-reply
5085p            unused, if (n&lt;24) p=24-n else p=pad(n)
5086
5087<emphasis role='bold'>CHOICE</emphasis>
50881      CARD8                request-option-index
5089b      OPTLEN               reply-option-byte-length
5090c      DELTACHOICE or       choice
5091      INDEXEDCHOICE or
5092      NLISTofINDEXEDOPT or
5093      NLISTofPIXMAPCHOICE or
5094      BOOL or
5095      INDEXEDCHOICE
5096</literallayout>
5097
5098<para>
5099The encoding of the choice field depends on the option-code. See <ulink
5100url="lbx.htm#35444">See StartProxy Options</ulink>.
5101</para>
5102
5103<literallayout class='monospaced'>
5104<emphasis role='bold'>DELTACHOICE</emphasis>
51051      CARD8      preferred cache size
51061      CARD8      preferred message length in 4-byte units
5107
5108<emphasis role='bold'>INDEXEDCHOICE</emphasis>
51091      CARD8           index
5110d      LISTofBYTE      data
5111
5112<emphasis role='bold'>PIXMAPCHOICE</emphasis>
51131      CARD8           index
51141      CARD8           opcode
51151      BITMASK         format mask
5116e      NLISTofCARD8    depths
5117</literallayout>
5118
5119<para>
5120The description of this request is on <ulink url="lbx.htm#20870">See
5121LbxStartProxy</ulink>.
5122</para>
5123
5124
5125<literallayout class='monospaced'>
5126<emphasis role='bold'>LbxStopProxy</emphasis>
51271      CARD8      opcode
51281      2          lbx opcode
51292      1          request length
5130</literallayout>
5131
5132<para>
5133The description of this request is on <ulink url="lbx.htm#27455">See
5134LbxStopProxy</ulink>.
5135</para>
5136
5137
5138<literallayout class='monospaced'>
5139<emphasis role='bold'>LbxSwitch</emphasis>
51401      CARD8      opcode
51411      3          lbx opcode
51422      2          request length
51434      CARD32     client
5144</literallayout>
5145
5146<para>
5147The description of this request is on
5148<ulink url="lbx.htm#33500">See LbxSwitch</ulink>.
5149</para>
5150
5151
5152<literallayout class='monospaced'>
5153<emphasis role='bold'>LbxNewClient</emphasis>
51541      CARD8      opcode
51551      4          lbx opcode
51562      L          request length
51574      CARD32     client
5158The remaining bytes of the request are the core connection setup.
5159=&gt;
5160If the connection is rejected, a core connection reply is sent. Otherwise the
5161reply has the form:
51621      BOOL      success
51631                change type
5164      0          no-deltas
5165      1          normal-client-deltas
5166      2          app-group-deltas
51672      CARD16    major version
51682      CARD16    minor version
51692      1 + a     length
51704      CARD32    tag id
5171</literallayout>
5172
5173<para>
5174The remaining bytes depend on the value of change-type and length.
5175</para>
5176
5177<para>
5178For no-deltas, the remaining bytes are the &quot;additional data&quot;
5179bytes of the core reply. (a = length of core reply, in 4 byte quantities).
5180</para>
5181
5182<para>
5183For normal-client-deltas, the additional bytes have the form, with a length (a
5184= 1 +b):
5185</para>
5186
5187<literallayout class='monospaced'>
51884      CARD32                 resource id base
51894b      LISTofSETofEVENT      root input masks
5190</literallayout>
5191
5192<para>
5193For app-group-deltas, the additional bytes have the following form, with a
5194length of (a = 1 + 4c):
5195</para>
5196
5197<literallayout class='monospaced'>
51984      CARD32                resource id base
51994      WINDOW                root id base
52004      VISUALID              visual
52014      COLORMAP              colormap
52024      CARD32                white pixel
52034      CARD32                black pixel
52044c     LISTofSETofEVENT      root input masks
5205</literallayout>
5206
5207<para>
5208The description of this request is on
5209<ulink url="lbx.htm#17810">See LbxNewClient</ulink>.
5210</para>
5211
5212
5213<literallayout class='monospaced'>
5214<emphasis role='bold'>LbxCloseClient</emphasis>
52151      CARD8      opcode
52161      5          lbx opcode
52172      2          request length
52184      CARD32     client
5219</literallayout>
5220
5221<para>
5222The description of this request is on
5223<ulink url="lbx.htm#21625">See LbxCloseClient</ulink>.
5224</para>
5225
5226
5227<literallayout class='monospaced'>
5228<emphasis role='bold'>LbxModifySequence</emphasis>
52291      CARD8      opcode
52301      6          lbx opcode
52312      2          request length
52324      CARD32     offset to sequence number
5233</literallayout>
5234
5235<para>
5236The description of this request is on <ulink url="lbx.htm#36693">See
5237LbxModifySequence</ulink>.
5238</para>
5239
5240
5241<literallayout class='monospaced'>
5242<emphasis role='bold'>LbxAllowMotion</emphasis>
52431      CARD8      opcode
52441      7          lbx opcode
52452      2          request length
52464      CARD32     number of MotionNotify events
5247</literallayout>
5248
5249<para>
5250The description of this request is on <ulink url="lbx.htm#15895">See
5251LbxAllowMotion</ulink>.
5252</para>
5253
5254
5255<literallayout class='monospaced'>
5256<emphasis role='bold'>LbxIncrementPixel</emphasis>
52571      CARD8      opcode
52581      8          lbx opcode
52592      3          request length
52604      COLORMAP   colormap
52614      CARD32      pixel
5262</literallayout>
5263
5264<para>
5265The description of this request is on <ulink url="lbx.htm#27227">See
5266LbxIncrementPixel</ulink>.
5267</para>
5268
5269
5270<literallayout class='monospaced'>
5271<emphasis role='bold'>LbxDelta</emphasis>
52721      CARD8              opcode
52731      9                  lbx opcode
52742      1+(2n +p+2)/4      request length
52751      n                  count of diffs
52761      CARD8              cache index
52772n      LISTofDIFFITEM    offsets and differences
5278p                         unused, p=pad(2n + 2)
5279</literallayout>
5280
5281<para>
5282The description of this request is on <ulink url="lbx.htm#26857">See
5283LbxDelta</ulink>.
5284</para>
5285
5286
5287<literallayout class='monospaced'>
5288<emphasis role='bold'>LbxGetModifierMapping</emphasis>
52891      CARD8      opcode
52901      10         lbx opcode
52912      1          request length
5292=&gt;
52931      1          Reply
52941      n          keycodes-per-modifier
52952      CARD16     sequence number
52964      2n         reply length
52974      CARD32     tag
529820                unused
52998n     LISTofKEYCODE      keycodes
5300</literallayout>
5301
5302<para>
5303The description of this request is on <ulink url="lbx.htm#37687">See
5304LbxGetModifierMapping</ulink>.
5305</para>
5306
5307
5308<literallayout class='monospaced'>
5309<emphasis role='bold'>LbxInvalidateTag</emphasis>
53101      CARD8      opcode
53111      12         lbx opcode
53122      2          request length
53134      CARD32     tag
5314</literallayout>
5315
5316<para>
5317The description of this request is on <ulink url="lbx.htm#12515">See
5318LbxInvalidateTag</ulink>.
5319</para>
5320
5321
5322<literallayout class='monospaced'>
5323<emphasis role='bold'>LbxPolyPoint</emphasis>
53241      CARD8      opcode
53251      13      lbx opcode
53262      1+(m+n+p)/4      request length
5327m      LBXGCANDDRAWABLE      cache entries
5328n      LISTofLBXPOINT      points (n is data-dependent)
5329p      0      unused, p=Lpad
5330</literallayout>
5331
5332<para>
5333The description of this request is on <ulink url="lbx.htm#37179">See
5334LbxPolyPoint</ulink>.
5335</para>
5336
5337
5338<literallayout class='monospaced'>
5339<emphasis role='bold'>LbxPolyLine</emphasis>
53401      CARD8      opcode
53411      14      lbx opcode
53422      1+(m+n+p)/4      request length
5343m      LBXGCANDDRAWABLE      cache entries
5344n      LISTofLBXPOINT      points (n is data-dependent)
5345p      0      unused, p=Lpad
5346</literallayout>
5347
5348<para>
5349The description of this request is on <ulink url="lbx.htm#16574">See
5350LbxPolyLine</ulink>.
5351</para>
5352
5353
5354<literallayout class='monospaced'>
5355<emphasis role='bold'>LbxPolySegment</emphasis>
53561      CARD8      opcode
53571      15      lbx opcode
53582      1+(m+n+p)/4      request length
5359m      LBXGCANDDRAWABLE      cache entries
5360n      LISTofLBXSEGMENT      segments (n is data-dependent)
5361p      0      unused, p=Lpad
5362</literallayout>
5363
5364<para>
5365The description of this request is on <ulink url="lbx.htm#26077">See
5366LbxPolySegment</ulink>.
5367</para>
5368
5369
5370<literallayout class='monospaced'>
5371<emphasis role='bold'>LbxPolyRectangle</emphasis>
53721      CARD8      opcode
53731      16      lbx opcode
53742      1+(m+n+p)/4      request length
5375m      LBXGCANDDRAWABLE      cache entries
5376n      LISTofLBXRECTANGLE      rectangles (n is data-dependent)
5377p      0      unused, p=pad(m+n)
5378</literallayout>
5379
5380<para>
5381The description of this request is on <ulink url="lbx.htm#40958">See
5382LbxPolyRectangle</ulink>.
5383</para>
5384
5385
5386<literallayout class='monospaced'>
5387<emphasis role='bold'>LbxPolyArc</emphasis>
53881      CARD8      opcode
53891      17      lbx opcode
53902      1+(m+n+p)/4      request length
5391m      LBXGCANDDRAWABLE      cache entries
5392n      LISTofLBXARCS      arcs (n is data-dependent)
5393p      0      unused, p=Lpad
5394</literallayout>
5395
5396<para>
5397The description of this request is on <ulink url="lbx.htm#15317">See
5398LbxPolyArc</ulink>.
5399</para>
5400
5401
5402<literallayout class='monospaced'>
5403<emphasis role='bold'>LbxFillPoly</emphasis>
54041      CARD8      opcode
54051      18      lbx opcode
54062      1+(3+m+n+p)/4      request length
54071      LBXGCANDDRAWENT      cache entries
54081            shape
54090      Complex
54101      Nonconvex
54112      Convex
54121      p      pad byte count
5413m      LBXGCANDDRAWUPDATE      optional gc and drawable
5414n      LISTofLBXPOINT      points (n is data-dependent)
5415p      0      unused, p=Lpad
5416</literallayout>
5417
5418<para>
5419The description of this request is on <ulink url="lbx.htm#35796">See
5420LbxFillPoly</ulink>.
5421</para>
5422
5423
5424<literallayout class='monospaced'>
5425<emphasis role='bold'>LbxPolyFillRectangle</emphasis>
54261      CARD8      opcode
54271      19      lbx opcode
54282      1+(m+n+p)/4      request length
5429m      LBXGCANDDRAWABLE      cache entries
5430n      LISTofLBXRECTANGLE      rectangles (n is data-dependent)
5431p      0      unused, p=Lpad
5432</literallayout>
5433
5434<para>
5435The description of this request is on <ulink url="lbx.htm#25511">See
5436LbxPolyFillRectangle</ulink>.
5437</para>
5438
5439
5440<literallayout class='monospaced'>
5441<emphasis role='bold'>LbxPolyFillArc</emphasis>
54421      CARD8      opcode
54431      20      lbx opcode
54442      1+(m+n+p)/4      request length
5445m      LBXGCANDDRAWABLE      cache entries
5446n      LISTofLBXARC      arcs (n is data-dependent)
5447p      0      unused, p=Lpad
5448</literallayout>
5449
5450<para>
5451The description of this request is on <ulink url="lbx.htm#42698">See
5452LbxPolyFillArc</ulink>.
5453</para>
5454
5455
5456<literallayout class='monospaced'>
5457<emphasis role='bold'>LbxGetKeyboardMapping</emphasis>
54581      CARD8      opcode
54591      21      lbx opcode
54602      2      request length
54611      KEYCODE      first keycode
54621      m      count
54632            unused
5464=&gt;
54651      1      Reply
54661      n      keysyms-per-keycode
54672      CARD16      sequence number
54684      nm      reply length (m = count field from the request)
54694      CARD32      tag
547020            unused
54714nm      LISTofKEYSYM      keysyms
5472</literallayout>
5473
5474<para>
5475The description of this request is on <ulink url="lbx.htm#33719">See
5476LbxGetKeyboardMapping</ulink>.
5477</para>
5478
5479
5480<literallayout class='monospaced'>
5481<emphasis role='bold'>LbxQueryFont</emphasis>
54821      CARD8      opcode
54831      22      lbx opcode
54842      2      request length
54854      FONTABLE      font
5486=&gt;
54871      1      Reply
54881      BOOL      compression
54892      CARD16      sequence number
54904      L      reply length
54914      CARD32      tag
549220            unused
5493All of the following is conditional:
549412      CHARINFO      min-bounds
54954            unused
549612      CHARINFO      max-bounds
54974            unused
54982      CARD16      min-char-or-byte2
54992      CARD16      max-char-or-byte2
55002      CARD16      default-char
55012      n      number of FONTPROPs in properties
55021            draw-direction
55030      <emphasis>LeftToRight</emphasis>
55041      <emphasis>RightToLeft</emphasis>
55051      CARD8      min-byte1
55061      CARD8      max-byte1
55071      BOOL      all-chars-exist
55082      INT16      font-ascent
55092      INT16      font-descent
55104      m      number of elements in char-infos
55118n      LISTofFONTPROP      properties
5512and either
551312m      LISTofCHARINFO      char-infos
5514or
5515m      LISTofLBXCHARINFO      char-infos
5516</literallayout>
5517
5518<para>
5519The description of this request is on <ulink url="lbx.htm#18818">See
5520LbxQueryFont</ulink>.
5521</para>
5522
5523
5524<literallayout class='monospaced'>
5525<emphasis role='bold'>LbxChangeProperty</emphasis>
55261      CARD8      opcode
55271      23      lbx opcode
55282      6      request length
55294      WINDOW      window
55304      ATOM      property
55314      ATOM      type
55321      CARD8      format
55331            mode
55340      Replace
55351      Preprend
55362      Append
55372            unused
55384      CARD32      length of data in format units
5539            (= n for format = 8)
5540            (= n/2 for format = 16)
5541            (= n/4 for format = 32)
5542=&gt;
55431      1      Reply
55441            unused
55452      CARD16      sequence number
55464      0      reply length
55474      CARD32      tag
554820            unused
5549</literallayout>
5550
5551<para>
5552The description of this request is on <ulink url="lbx.htm#40098">See
5553LbxChangeProperty</ulink>.
5554</para>
5555
5556
5557<literallayout class='monospaced'>
5558<emphasis role='bold'>LbxGetProperty</emphasis>
55591      CARD8      opcode
55601      24      lbx opcode
55612      7      request length
55624      WINDOW      window
55634      ATOM      property
55644      ATOM      type
55650      AnyPropertyType
55661      CARD8      delete
55673            unused
55684      CARD32      long-offset
55694      CARD32      long-length
5570=&gt;
55711      1      Reply
55721      CARD8      format
55732      CARD16      sequence number
55744      CARD32      reply length
55754      ATOM      type
55760      None
55774      CARD32      bytes-after
55784      CARD32      length of value in format units
5579            (= 0 for format = 0)
5580            (= n for format = 8)
5581            (= n/2 for format = 16)
5582            (= n/4 for format = 32)
55834      CARD32      tag
55848            unused
5585</literallayout>
5586
5587<para>
5588The description of this request is on <ulink url="lbx.htm#31397">See
5589LbxGetProperty</ulink>.
5590</para>
5591
5592
5593<literallayout class='monospaced'>
5594<emphasis role='bold'>LbxTagData</emphasis>
55951      CARD8      opcode
55961      25      lbx opcode
55972      3+(n+p)/4      request length
55984      CARD32      tag
55994      CARD32      length of data in bytes
5600n      LISTofBYTE      data
5601p            unused, p=pad(n)
5602</literallayout>
5603
5604<para>
5605The description of this request is on <ulink url="lbx.htm#17987">See
5606LbxTagData</ulink>.
5607</para>
5608
5609
5610<literallayout class='monospaced'>
5611<emphasis role='bold'>LbxCopyArea</emphasis>
56121      CARD8      opcode
56131      26      lbx opcode
56142      L      request length
56151      CARD8      source drawable cache entry
56161      LBXGCANDDRAWENT      cache entries
56174 or 0      DRAWABLE      optional source drawable
5618b      LBXGCANDDRAWUPDATE      optional gc and dest drawable
5619c      LBXPINT16      src-x
5620d      LBXPINT16      src-y
5621e      LBXPINT16      dst-x
5622f      LBXPINT16      dst-y
5623g      LBXCARD16      width
5624h      LBXCARD16      height
5625p            unused, p=Lpad
5626</literallayout>
5627
5628<para>
5629The description of this request is on <ulink url="lbx.htm#11409">See
5630LbxCopyArea</ulink>.
5631</para>
5632
5633
5634<literallayout class='monospaced'>
5635<emphasis role='bold'>LbxCopyPlane</emphasis>
56361      CARD8      opcode
56371      27      lbx opcode
56382      L      request length
56394      CARD32      bit plane
56401      CARD8      source drawable cache entry
56411      LBXGCANDDRAWENT      cache entries
56424 or 0      DRAWABLE      optional source drawable
5643b      LBXGCANDDRAWUPDATE      optional gc and dest drawable
5644c      LBXPINT16      src-x
5645d      LBXPINT16      src-y
5646e      LBXPINT16      dst-x
5647f      LBXPINT16      dst-y
5648g      LBXCARD16      width
5649h      LBXCARD16      height
5650p            unused, p=Lpad
5651</literallayout>
5652
5653<para>
5654The description of this request is on <ulink url="lbx.htm#36772">See
5655LbxCopyPlane</ulink>.
5656</para>
5657
5658
5659<literallayout class='monospaced'>
5660<emphasis role='bold'>LbxPolyText8</emphasis>
56611      CARD8      opcode
56621      28      lbx opcode
56632      L      request length
56641      LBXGCANDDRAWENT      cache entries
5665a      LBXGCANDDRAWUPDATE      optional gc and drawable
5666b      LBXPINT16      x
5667c      LBXPINT16      y
5668n      LISTofTEXTITEM8      items
5669p            unused, p=Lpad
5670</literallayout>
5671
5672<para>
5673The description of this request is on <ulink url="lbx.htm#23201">See
5674LbxPolyText8</ulink>.
5675</para>
5676
5677
5678<literallayout class='monospaced'>
5679<emphasis role='bold'>LbxPolyText16</emphasis>
56801      CARD8      opcode
56811      29      lbx opcode
56822      L      request length
56831      LBXGCANDDRAWENT      cache entries
5684a      LBXGCANDDRAWUPDATE      optional gc and drawable
5685b      LBXPINT16      x
5686c      LBXPINT16      y
56872n      LISTofTEXTITEM16      items
5688p            unused, p=Lpad
5689</literallayout>
5690
5691<para>
5692The description of this request is on <ulink url="lbx.htm#13228">See
5693LbxPolyText16</ulink>.
5694</para>
5695
5696
5697<literallayout class='monospaced'>
5698<emphasis role='bold'>LbxImageText8</emphasis>
56991      CARD8      opcode
57001      30      lbx opcode
57012      L      request length
57021      LBXGCANDDRAWENT      cache entries
5703a      LBXGCANDDRAWUPDATE      optional gc and drawable
5704b      LBXPINT16      x
5705c      LBXPINT16      y
5706n      STRING8      string
5707p            unused, p=Lpad
5708</literallayout>
5709
5710<para>
5711The description of this request is on <ulink url="lbx.htm#10990">See
5712LbxImageText8</ulink>.
5713</para>
5714
5715
5716<literallayout class='monospaced'>
5717<emphasis role='bold'>LbxImageText16</emphasis>
57181      CARD8      opcode
57191      31      lbx opcode
57202      L      request length
57211      LBXGCANDDRAWENT      cache entries
5722a      LBXGCANDDRAWUPDATE      optional gc and drawable
5723b      LBXPINT16      x
5724c      LBXPINT16      y
57252n      STRING16      string
5726p            unused, p=Lpad
5727</literallayout>
5728
5729<para>
5730The description of this request is on <ulink url="lbx.htm#39584">See
5731LbxImageText16</ulink>.
5732</para>
5733
5734
5735<literallayout class='monospaced'>
5736<emphasis role='bold'>LbxQueryExtension</emphasis>
57371      CARD8      opcode
57381      32      lbx opcode
57392      2+(n+p)/4      request length
57404      n      length of extension name
5741n      STRING8      extension name
5742p            unused, p=pad(n)
5743=&gt;
57441      1      Reply
57451      n      number of requests in the extension
57462      CARD16      sequence number
57474      0 or 2*(m + p)      reply length, m = (n+7)/8
57481      BOOL      present
57491      CARD8      major opcode
57501      CARD8      first event
57511      CARD8      first error
575220            unused
5753m      LISTofMASK      optional reply-mask
5754p            unused, p=pad(m)
5755m      LISTofMASK      optional event-mask
5756p            unused, p=pad(m)
5757</literallayout>
5758
5759<para>
5760The description of this request is on <ulink url="lbx.htm#36662">See
5761LbxQueryExtension</ulink>.
5762</para>
5763
5764
5765<literallayout class='monospaced'>
5766<emphasis role='bold'>LbxPutImage</emphasis>
57671      CARD8      opcode
57681      33      lbx opcode
57692      L      request length
57701      CARD8      compression method
57711      LBXGCANDDRAWENT      cache entries
5772a      PIPACKED            bit-packed
5773b      LBXGCANDDRAWUPDATE      optional gc and drawable
5774c      LBXCARD16      width
5775d      LBXCARD16      height
5776e      LBXPINT16      x
5777f      LBXPINT16      y
5778n      LISTofBYTE      compressed image data
5779p            unused, p=Lpad
5780</literallayout>
5781
5782<para>
5783If there is no left padding and the depth is less than or equal to nine,
5784PIPPACKED is encoded as follows:
5785</para>
5786
5787<literallayout class='monospaced'>
5788<emphasis role='bold'>PIPACKED</emphasis>
57891      #x80 | (format &lt;&lt; 5) | ((depth -1) &lt;&lt; 2)
5790</literallayout>
5791
5792<para>
5793Otherwise PIPACKED is defined as:
5794</para>
5795
5796<literallayout class='monospaced'>
5797<emphasis role='bold'>PIPACKED</emphasis>
57981      (depth -1) &lt;&lt; 2)
57991      (format &lt;&lt; 5) | left-pad
5800</literallayout>
5801
5802<para>
5803The description of this request is on <ulink url="lbx.htm#21218">See
5804LbxPutImage</ulink>.
5805</para>
5806
5807
5808<literallayout class='monospaced'>
5809<emphasis role='bold'>LbxGetImage</emphasis>
58101      CARD8      opcode
58111      34      lbx opcode
58122      6      request length
58134      DRAWABLE      drawable
58142      INT16      x
58152      INT16      y
58162      CARD16      width
58172      CARD16      height
58184      CARD32      plane mask
58191      CARD8      format
58203            unused
5821=&gt;
58221      1      Reply
58231      CARD8      depth
58242      CARD16      sequence number
58254      (n+p)/4      reply length
58264      (m+p)/4      X reply length; if uncompressed, m=n
58274      VISUALID      visual
58280      None
58291            compression method
583015            unused
5831n      LISTofBYTE      data
5832p            unused, p=pad(n)
5833</literallayout>
5834
5835<para>
5836The description of this request is on <ulink url="lbx.htm#26896">See
5837LbxGetImage</ulink>.
5838</para>
5839
5840
5841<literallayout class='monospaced'>
5842<emphasis role='bold'>LbxBeginLargeRequest</emphasis>
58431      CARD8      opcode
58441      35      lbx opcode
58452      2      request length
58464      CARD32      large request length
5847</literallayout>
5848
5849<para>
5850The description of this request is on <ulink url="lbx.htm#31209">See
5851LbxBeginLargeRequest</ulink>.
5852</para>
5853
5854
5855<literallayout class='monospaced'>
5856<emphasis role='bold'>LbxLargeRequestData</emphasis>
58571      CARD8      opcode
58581      36      lbx opcode
58592      1+n      request length
58604n      LISTofBYTE      data
5861</literallayout>
5862
5863<para>
5864The description of this request is on <ulink url="lbx.htm#36982">See
5865LbxLargeRequestData</ulink>.
5866</para>
5867
5868
5869<literallayout class='monospaced'>
5870<emphasis role='bold'>LbxEndLargeRequest</emphasis>
58711      CARD8      opcode
58721      37      lbx opcode
58732      1      request length
5874</literallayout>
5875
5876<para>
5877The description of this request is on <ulink url="lbx.htm#31841">See
5878LbxEndLargeRequest</ulink>.
5879</para>
5880
5881
5882<literallayout class='monospaced'>
5883<emphasis role='bold'>LbxInternAtoms</emphasis>
58841      CARD8      opcode
58851      38      lbx opcode
58862      1+(2+m+n+p)/4      request length
58872      m      num-atoms
5888n      LISTofLONGSTR      names
5889p            pad p=Lpad
5890=&gt;
58911      1      Reply
58921            unused
58932      CARD16      sequence number
58944      a      reply length, a = MAX(m - 6, 0)
58954*m      LISTofATOM      atoms
5896p            pad p = MAX(0, 4*(6 - m))
5897&nbsp;
5898LONGSTR
58992      c      string length
5900c      STRING8      string
5901</literallayout>
5902
5903<para>
5904The description of this request is on <ulink url="lbx.htm#21636">See
5905LbxInternAtoms</ulink>.
5906</para>
5907
5908
5909<literallayout class='monospaced'>
5910<emphasis role='bold'>LbxGetWinAttrAndGeom</emphasis>
59111      CARD8      opcode
59121      39      lbx opcode
59132      2      request length
59144      CARD32      window id
5915=&gt;
59161      1      Reply
59171            backing store
59180      NotUseful
59191      WhenMapped
59202      Always
59212      CARD16      sequence number
59224      7      reply length
59234      VISUALID      visual id
59242            class
59251      InputOutput
59262      InputOnly
59271      BITGRAVITY      bit gravity
59281      WINGRAVITY      window gravity
59294      CARD32      backing bit planes
59304      CARD32      backing pixel
59311      BOOL      save under
59321      BOOL      map installed
59331            map state
59340      Unmapped
59351      Unviewable
59362      Viewable
59371      BOOL      override
59384      COLORMAP      colormap
59394      SETofEVENT      all events mask
59404      SETofEVENT      your event mask
59412      SETofDEVICEEVENT      do not propagate mask
59422            unused
59434      WINDOW      root
59442      INT16      x
59452      INT16      y
59462      CARD16      width
59472      CARD16      height
59482      CARD16      border width
59491      CARD8      depth
59501            unused
5951</literallayout>
5952
5953<para>
5954The description of this request is on <ulink url="lbx.htm#39382">See
5955LbxGetWinAttrAndGeom</ulink>.
5956</para>
5957
5958
5959<literallayout class='monospaced'>
5960<emphasis role='bold'>LbxGrabCmap</emphasis>
59611      CARD8      opcode
59621      40      lbx opcode
59632      2      request length
59644      COLORMAP      colormap
5965=&gt;
5966</literallayout>
5967
5968<para>
5969If smart-grab is true, the reply is as follows:
5970</para>
5971
5972<literallayout class='monospaced'>
59731      1      Reply
59741      #x80      flags
59752      CARD16      sequence number
59764      0      reply length
597724            unused
5978
5979If smart-grab is false, the reply is as follows:
5980
59811      1      Reply
59821            flags (set of)
5983       #x40      auto-release
5984       #x20      three-channels
5985       #x10      two-byte-pixels
5986lower four bits specifies bits-per-pixel
59872      CARD16      sequence number
59884      L      reply length
5989m      CHAN or CHANNELS      cells (CHAN if !three-channels)
5990p      0      pad(m)
5991
5992<emphasis role='bold'>CHANNELS</emphasis>
5993a      CHAN      red
59941      5            next channel
5995b      CHAN      green
59961      5      next channel
5997c      CHAN      blue
59981      0      list end
5999
6000<emphasis role='bold'>CHAN</emphasis>
6001d      LISTofLBXPIXEL
6002
6003<emphasis role='bold'>LBXPIXEL</emphasis>
6004e      PIXELPRIVATE or
6005      PIXELPRIVATERANGE or
6006      PIXELALLOC or
6007      PIXELALLOCRANGE
6008
6009<emphasis role='bold'>PIXELPRIVATE</emphasis>
60101      1      pixel-private
6011f      PIXEL      pixel
6012
6013<emphasis role='bold'>PIXEL</emphasis>
6014f      CARD8 or CARD16      (CARD8 if !two-byte-pixels)
6015
6016<emphasis role='bold'>PIXELPRIVATERANGE</emphasis>
60171      2      pixel-private-range
6018f      PIXEL      fist-pixel
6019f      PIXEL      last-pixel
6020
6021<emphasis role='bold'>PIXELALLOC</emphasis>
60221      3      pixel-private
6023f      PIXEL      pixel
6024g      COLORSINGLE or COLORTRIPLE      color       (COLORSINGLE if
6025three-channels)
6026
6027<emphasis role='bold'>COLORSINGLE</emphasis>
6028h      CARD8 or CARD16      value (CARD8       if bits-per-rgb =&lt; 7)
6029
6030<emphasis role='bold'>COLORTRIPLE</emphasis>
6031h      COLORSINGLE      red
6032h      COLORSINGLE      green
6033h      COLORSINGLE      blue
6034
6035<emphasis role='bold'>PIXELALLOCRANGE</emphasis>
60361      4      pixel-private
6037f      PIXEL      first-pixel
6038f      PIXEL      last-pixel
6039j      LISTofCOLORSINGLE or       color       (COLORSINGLE if three-channels)
6040      LISTofCOLORTRIPLE
6041</literallayout>
6042
6043<para>
6044The description of this request is on <ulink url="lbx.htm#10922">See
6045LbxGrabCmap</ulink>.
6046</para>
6047
6048
6049<literallayout class='monospaced'>
6050<emphasis role='bold'>LbxReleaseCmap</emphasis>
60511      CARD8      opcode
60521      41      lbx opcode
60532      2      request length
60544      COLORMAP      cmap
6055</literallayout>
6056
6057<para>
6058The description of this request is on <ulink url="lbx.htm#34675">See
6059LbxReleaseCmap</ulink>.
6060</para>
6061
6062
6063<literallayout class='monospaced'>
6064<emphasis role='bold'>LbxAllocColor</emphasis>
60651      CARD8      opcode
60661      42      lbx opcode
60672      5      request length
60684      COLORMAP      colormap
60694      CARD32      pixel
60702      CARD16      red
60712      CARD16      green
60722      CARD16            blue
60732            unused
6074</literallayout>
6075
6076<para>
6077The description of this request is on <ulink url="lbx.htm#10446">See
6078LbxAllocColor</ulink>.
6079</para>
6080
6081
6082<literallayout class='monospaced'>
6083<emphasis role='bold'>LbxSync</emphasis>
60841      CARD8      opcode
60851      43      lbx opcode
60862      1      request length
6087=&gt;
60881      1      Reply
60891      n      unused
60902      CARD16      sequence number
60914      0      reply length
609224            unused
6093</literallayout>
6094
6095<para>
6096The description of this request is on <ulink url="lbx.htm#30719">See
6097LbxSync</ulink>.
6098</para>
6099
6100
6101
6102</sect2>
6103<sect2 id='events2'>
6104<title>Events</title>
6105
6106<literallayout class='monospaced'>
6107<emphasis role='bold'>LbxSwitchEvent</emphasis>
61081      base + 0      code
61091      0      lbx type
61102      CARD16      sequence number
61114      CARD32      client
611224            unused
6113</literallayout>
6114
6115<para>
6116The description of this event is on <ulink url="lbx.htm#33748">See
6117LbxSwitchEvent</ulink>.
6118</para>
6119
6120
6121<literallayout class='monospaced'>
6122<emphasis role='bold'>LbxCloseEvent</emphasis>
61231      base + 0      code
61241      1      lbx type
61252      CARD16      sequence number
61264      CARD32      client
612724            unused
6128</literallayout>
6129
6130<para>
6131The description of this event is on <ulink url="lbx.htm#17292">See
6132LbxCloseEvent</ulink>.
6133</para>
6134
6135
6136<literallayout class='monospaced'>
6137<emphasis role='bold'>LbxInvalidateTagEvent</emphasis>
61381      base + 0      code
61391      3      lbx type
61402      CARD16      sequence number
61414      CARD32      tag
61424            tag-type
61431      <emphasis>LbxTagTypeModmap</emphasis>
61442      <emphasis>LbxTagTypeKeymap</emphasis>
61453      <emphasis>LbxTagTypeProperty</emphasis>
61464      <emphasis>LbxTagTypeFont</emphasis>
61475      <emphasis>LbxTagTypeConnInfo</emphasis>
614820            unused
6149</literallayout>
6150
6151<para>
6152The description of this event is on <ulink url="lbx.htm#23016">See
6153LbxInvalidateTagEvent</ulink>.
6154</para>
6155
6156
6157<literallayout class='monospaced'>
6158<emphasis role='bold'>LbxSendTagDataEvent</emphasis>
61591      base + 0      code
61601      4      lbx type
61612      CARD16      sequence number
61624      CARD32      tag
61634            tag-type
61643      <emphasis>LbxTagTypeProperty</emphasis>
616520            unused
6166</literallayout>
6167
6168<para>
6169The description of this event is on <ulink url="lbx.htm#20373">See
6170LbxSendTagDataEvent</ulink>.
6171</para>
6172
6173
6174<literallayout class='monospaced'>
6175<emphasis role='bold'>LbxListenToOne</emphasis>
61761      base + 0      code
61771      5      lbx type
61782      CARD16      sequence number
61794      CARD32      client
6180<emphasis>#xFFFFFFFF</emphasis>
6181a client not managed by the proxy
618224            unused
6183</literallayout>
6184
6185<para>
6186The description of this event is on <ulink url="lbx.htm#25209">See
6187LbxListenToOne</ulink>.
6188</para>
6189
6190
6191<literallayout class='monospaced'>
6192<emphasis role='bold'>LbxListenToAll</emphasis>
61931      base + 0      code
61941      6      lbx type
61952      CARD16      sequence number
619628            unused
6197</literallayout>
6198
6199<para>
6200The description of this event is on <ulink url="lbx.htm#11095">See
6201LbxListenToAll</ulink>.
6202</para>
6203
6204
6205<literallayout class='monospaced'>
6206<emphasis role='bold'>LbxQuickMotionDeltaEvent</emphasis>
62071      base + 1      code
62081      CARD8      delta-time
62091      INT8      delta-x
62101      INT8      delta-y
6211</literallayout>
6212
6213<para>
6214This event is not padded to 32 bytes.
6215</para>
6216
6217
6218<para>
6219The description of this event is on <ulink url="lbx.htm#40268">See
6220LbxQuickMotionDeltaEvent</ulink>.
6221</para>
6222
6223
6224<literallayout class='monospaced'>
6225<emphasis role='bold'>LbxMotionDeltaEvent</emphasis>
62261      base + 0      code
62271      7                  lbx type
62281      INT8      delta-x
62291      INT8      delta-y
62302      CARD16      delta-time
62312      CARD16      delta-sequence
6232</literallayout>
6233
6234<para>
6235This event is not padded to 32 bytes.
6236</para>
6237
6238
6239<para>
6240The description of this event is on <ulink url="lbx.htm#30033">See
6241LbxMotionDeltaEvent</ulink>.
6242</para>
6243
6244
6245<literallayout class='monospaced'>
6246<emphasis role='bold'>LbxReleaseCmapEvent</emphasis>
62471      base + 0      code
62481      8                  lbx type
62492      CARD16      sequence number
62504      COLORMAP      colormap
625124            unused
6252</literallayout>
6253
6254<para>
6255The description of this event is on <ulink url="lbx.htm#19129">See
6256LbxReleaseCmapEvent</ulink>.
6257</para>
6258
6259
6260<literallayout class='monospaced'>
6261<emphasis role='bold'>LbxFreeCellsEvent</emphasis>
62621      base + 0      code
62631      9                  lbx type
62642      CARD16      sequence number
62654      COLORMAP      colormap
62664      PIXEL      pixel start
62674      PIXEL      pixel end
626816            unused
6269</literallayout>
6270
6271<para>
6272The description of this event is on <ulink url="lbx.htm#38041">See
6273LbxFreeCellsEvent</ulink>.
6274</para>
6275
6276
6277</sect2>
6278<sect2 id='re_encoding_of_x_events'>
6279<title>Re-encoding of X Events</title>
6280
6281<para>
6282The X protocol requires all X events to be 32 bytes. The LBX server reduces the
6283number of bytes sent between the server and the proxy for some X events by not
6284appending unused pad bytes to the event data. The offsets of X event data are
6285unchanged. The proxy will pad the events to 32 bytes before passing them on to
6286the client.
6287</para>
6288
6289
6290<para>
6291LBX reencodes X event representations into the following sizes, if squishing is
6292enabled:
6293</para>
6294
6295<para><programlisting>
6296KeyOrButton            32
6297EnterOrLeave           32
6298Keymap                 32
6299Expose                 20
6300GraphicsExposure       24
6301NoExposure             12
6302VisibilityNotify       12
6303CreateNotify           24
6304DestroyNotify          12
6305UnmapNotify            16
6306MapNotify              16
6307MapRequest             12
6308Reparent               24
6309ConfigureNotify        28
6310ConfigureRequest       28
6311GravityNotify          16
6312ResizeRequest          12
6313Circulate              20
6314Property      Notify   20
6315SelectionClear         20
6316SelectionRequest       28
6317SelectionNotify        24
6318Colormap      Notify   16
6319MappingNotify          8
6320ClientMessage          32
6321Unknown                32
6322</programlisting></para>
6323
6324</sect2>
6325<sect2 id='responses2'>
6326<title>Responses</title>
6327
6328<literallayout class='monospaced'>
6329<emphasis role='bold'>LbxDeltaResponse</emphasis>
63301      event_base + 0      event code
63311      2      lbx type
63322      1+(2+2n+p)/4      request length
63331      n      count of diffs
63341      CARD8      cache index
63352n      LISTofDIFFITEM      offsets and differences
6336p            unused, p=pad(2n)
6337</literallayout>
6338
6339<para>
6340The description of this response is on <ulink url="lbx.htm#34042">See
6341LbxDeltaResponse</ulink>.
6342</para>
6343
6344</sect2>
6345</sect1>
6346</article>
6347