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 “AS IS”, 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 "LBX". 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 "optional" 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 & 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 & 0xfff) >> 8 | ((compflag) ? 0x80 : 0); 579 out[1] = length & 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 "XLbx.h". 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 <= in <= A(95)) && !(in % A(5)) out = 0x5a + (in / 803A(5)) 804 A(105) <= in <= A(360) && !(in % A(15)) out = 0x67 + 805(in / A(15)) 806 -A(100) <= in <= -A(5) && !(in % A(5)) out = 0xa6 + 807(in / A(5)) 808 -A(360) < in <= -A(105) && !(in % A(15)) out = 0x98 + 809(in / A(15)) 810 -A(360) < in <= A(360) out[0] = in >> 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 <= in < 0x00F0 CARD8 829 0x00F0 <= in < 0x10F0 out[0] = 0xF0 | ((in - 0xF0) >> 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 <= in < 0xFF90 out[0] = 0x80 | (((in + 0x70) >> 8578) & 0x0F) 858 out[1] = in + 0x70 859 0xFF90 <= in < 0x0080 CARD8 860 0x0080 <= in < 0x0880 out[0] = 0x80 | (((in - 0x80) >> 8618) & 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 <= in < 0x0000 out[0] = 0xF0 | (((in + 0x1000) 870>> 8) & 0x0F) 871 out[1] = in + 0x1000 872 0x0000 <= in < 0x00F0 CARD8 873 0x00F0 <= in < 0x0EF0 out[0] = 0xF0 | ((in - 0xF0) >>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>=>;</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>=></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>=></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'> </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 < in <= 0xFF): out = 1294in</entry> 1295 </row> 1296 <row> 1297 <entry role='protoargs'> (0 <= in<= 0xFFFF): out[0] = 12980; out[1] = in >> 8; out[2] = in& 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>=></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'> </entry> 1562 </row> 1563 <row> 1564 <entry role='protoargs'>OR</entry> 1565 </row> 1566 <row> 1567 <entry role='protoargs'> </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'> </entry> 1594 </row> 1595 <row> 1596 <entry role='protoargs'>where:</entry> 1597 </row> 1598 <row> 1599 <entry role='protoargs'>CONINFO: (the "additional data" 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>=></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>=></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'> </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>=></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>=></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>=></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>=></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>=></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>=></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>=></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'> </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>=></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 <organization>-<some-descriptive-name> 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=> 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 < b <= 255) 5050 5051<emphasis role='bold'>OPTLEN</emphasis> 50521 0 long length header 50531 c length0, c = b >> 8 50541 d length1, d= b & #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=> 5076=> 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<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=> 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 "additional data" 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=> 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=> 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=> 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=> 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=> 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=> 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 << 5) | ((depth -1) << 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) << 2) 57991 (format << 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=> 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=> 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 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=> 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=> 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 =< 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=> 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