1ea1d6981Smrg<?xml version="1.0" encoding="UTF-8" ?> 2ea1d6981Smrg<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" 3ea1d6981Smrg "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" 4ea1d6981Smrg[ 5ea1d6981Smrg<!ENTITY % defs SYSTEM "defs.ent"> %defs; 6ea1d6981Smrg]> 7ea1d6981Smrg 8ea1d6981Smrg 9ea1d6981Smrg<book id="fsproto"> 10ea1d6981Smrg 11ea1d6981Smrg<bookinfo> 12ea1d6981Smrg <title>The X Font Service Protocol</title> 13ea1d6981Smrg <subtitle>X Consortium Standard</subtitle> 14ea1d6981Smrg <releaseinfo>X Version 11, Release &fullrelvers;</releaseinfo> 15ea1d6981Smrg <releaseinfo>Version 2.0</releaseinfo> 16ea1d6981Smrg <authorgroup> 17ea1d6981Smrg <author> 18ea1d6981Smrg <firstname>Jim</firstname><surname>Fulton</surname> 19ea1d6981Smrg <affiliation><orgname>Network Computing Devices, Inc.</orgname></affiliation> 20ea1d6981Smrg </author> 21ea1d6981Smrg </authorgroup> 22ea1d6981Smrg <edition>Revised May 2, 1994</edition> 23ea1d6981Smrg <copyright><year>1991</year><holder>Network Computing Devices, Inc.</holder></copyright> 24ea1d6981Smrg 25ea1d6981Smrg<legalnotice> 26ea1d6981Smrg<para> 27ea1d6981SmrgPermission to use, copy, modify, distribute, and sell this 28ea1d6981Smrgdocumentation for any purpose is hereby granted without fee, 29ea1d6981Smrgprovided that the above copyright notice and this permission 30ea1d6981Smrgnotice appear in all copies. Network Computing Devices, Inc. 31ea1d6981Smrgmakes no representations about the suitability for any purpose 32ea1d6981Smrgof the information in this document. This documentation is 33ea1d6981Smrgprovided “as is” without express or implied warranty. 34ea1d6981Smrg</para> 35ea1d6981Smrg</legalnotice> 36ea1d6981Smrg 37ea1d6981Smrg<legalnotice> 38ea1d6981Smrg<para role="multiLicensing">Copyright © 1994 X Consortium</para> 39ea1d6981Smrg<para> 40ea1d6981SmrgPermission is hereby granted, free of charge, to any person obtaining a copy 41ea1d6981Smrgof this software and associated documentation files (the “Software”), to deal 42ea1d6981Smrgin the Software without restriction, including without limitation the rights 43ea1d6981Smrgto use, copy, modify, merge, publish, distribute, sublicense, and/or sell 44ea1d6981Smrgcopies of the Software, and to permit persons to whom the Software is 45ea1d6981Smrgfurnished to do so, subject to the following conditions: 46ea1d6981Smrg</para> 47ea1d6981Smrg<para> 48ea1d6981SmrgThe above copyright notice and this permission notice shall be included in 49ea1d6981Smrgall copies or substantial portions of the Software. 50ea1d6981Smrg</para> 51ea1d6981Smrg<para> 52ea1d6981SmrgTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 53ea1d6981SmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 54ea1d6981SmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 55ea1d6981SmrgX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 56ea1d6981SmrgAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 57ea1d6981SmrgCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 58ea1d6981Smrg</para> 59ea1d6981Smrg<para> 60ea1d6981SmrgExcept as contained in this notice, the name of the X Consortium shall not be 61ea1d6981Smrgused in advertising or otherwise to promote the sale, use or other dealings 62ea1d6981Smrgin this Software without prior written authorization from the X Consortium. 63ea1d6981Smrg</para> 64ea1d6981Smrg</legalnotice> 65ea1d6981Smrg</bookinfo> 66ea1d6981Smrg 67ea1d6981Smrg<chapter id='Introduction'> 68ea1d6981Smrg<title>Introduction</title> 69ea1d6981Smrg<para> 70ea1d6981SmrgThe management of fonts in large, heterogeneous environments is one of the 71ea1d6981Smrghardest aspects of using the X Window System 72ea1d6981Smrg<footnote id='footnote1'><para> 73ea1d6981Smrg<firstterm><trademark>X Window System</trademark></firstterm> 74ea1d6981Smrgis a trademark of The Open Group. 75ea1d6981Smrg</para></footnote> 76ea1d6981Smrg. Multiple formats and the lack of 77ea1d6981Smrga consistent mechanism for exporting font data to all displays on a network 78ea1d6981Smrgprevent the transparent use of applications across different display platforms. 79ea1d6981SmrgThe X Font Service protocol is designed to address this and other issues, with 80ea1d6981Smrgspecific emphasis on the needs of the core X protocol. Upward-compatible 81ea1d6981Smrgchanges (typically in the form of new requests) are expected as consensus is 82ea1d6981Smrgreached on new features (particularly outline font support). 83ea1d6981Smrg</para> 84ea1d6981Smrg<para> 85ea1d6981SmrgCurrently, most X displays use network file protocols such as 86ea1d6981Smrg<acronym>NFS</acronym> and <acronym>TFTP</acronym> to 87ea1d6981Smrgobtain raw font data which they parse directly. Since a common binary format 88ea1d6981Smrgfor this data doesn't exist, displays must be able to interpret a variety of 89ea1d6981Smrgformats if they are to be used with different application hosts. This leads to 90ea1d6981Smrgwasted code and data space and a loss of interoperability as displays are used 91ea1d6981Smrgin unforeseen environments. 92ea1d6981Smrg</para> 93ea1d6981Smrg<para> 94ea1d6981SmrgBy moving the interpretation of font data out of the X server into a separate 95ea1d6981Smrgservice on the network, these problems can be greatly reduced. In addition, 96ea1d6981Smrgnew technologies, such as dynamically generating bitmaps from scaled or outline 97ea1d6981Smrgfonts, can be provided to all displays transparently. For horizontal text, 98ea1d6981Smrgcaching techniques and increased processor power can potentially make 99ea1d6981Smrgrasterization more efficient on large, centralized hosts than on individual 100ea1d6981Smrgdisplays. 101ea1d6981Smrg</para> 102ea1d6981Smrg<para> 103ea1d6981SmrgEach font server provides sets of fonts that may be listed and queried for 104ea1d6981Smrgheader, property, glyph extents, and bitmap information. This data is 105ea1d6981Smrgtransmitted over the network using a binary format (with variations to support 106ea1d6981Smrgdifferent bit- and byte-orders) designed to minimize the amount of processing 107ea1d6981Smrgrequired by the display. Since the font server, rather than the display, is 108ea1d6981Smrgresponsible for parsing the raw font data, new formats can be used by all 109ea1d6981Smrgdisplays by modifying a single font server. 110ea1d6981Smrg</para> 111ea1d6981Smrg<para> 112ea1d6981SmrgFrom the user's point of view, font servers are simply a new type of name in 113ea1d6981Smrgthe X font path. Network name services allow descriptive names (such as 114ea1d6981SmrgDEPARTMENT-FONTS or APPLICATION-FONTS) to be translated into proper network 115ea1d6981Smrgaddresses. X displays send requests to and read replies from the font server 116ea1d6981Smrgrather than reading directly from files. Since the X Font Service protocol is 117ea1d6981Smrgdesigned to allow subsets of the font data to be requested, displays may easily 118ea1d6981Smrgimplement a variety of strategies for fine-grained demand-loading of glyphs. 119ea1d6981Smrg</para> 120ea1d6981Smrg</chapter> 121ea1d6981Smrg 122ea1d6981Smrg<chapter id='Architectural_Model'> 123ea1d6981Smrg<title>Architectural Model</title> 124ea1d6981Smrg<!-- .XS --> 125ea1d6981Smrg<!-- (SN Architectural Model --> 126ea1d6981Smrg<!-- .XE --> 127ea1d6981Smrg<para> 128ea1d6981SmrgIn this document, the words <firstterm>client</firstterm> and 129ea1d6981Smrg<firstterm>server</firstterm> refer to the consumer and 130ea1d6981Smrgprovider of a font, respectively, unless otherwise indicated. It is important 131ea1d6981Smrgto note that in this context, the X server is also a font client. 132ea1d6981Smrg</para> 133ea1d6981Smrg<para> 134ea1d6981SmrgThe X Font Service protocol does not require any changes to the core X protocol 135ea1d6981Smrgor to any applications. To the user, font servers are simply additional types 136ea1d6981Smrgof font path elements. As such, X servers may connect to multiple font 137ea1d6981Smrgservers, as shown in Figure 2.1. Although the font protocol is geared towards 138ea1d6981Smrgthe X Window System, it may be also used by other consumers of font data (such 139ea1d6981Smrgas printer drivers). 140ea1d6981Smrg</para> 141ea1d6981Smrg 142ea1d6981Smrg<figure id="figure2.1" label="2.1"><title>Connecting to a Font Server</title> 143ea1d6981Smrg<literallayout class="monospaced"> 144ea1d6981Smrg ┌────────┐ ┌───────────────┐ 145ea1d6981Smrg │ X1 ├──────────────┤ │ 146ea1d6981Smrg │ Server │ │ Font Server │ 147ea1d6981Smrg └────────┘ ┌───────┤ 1 │ 148ea1d6981Smrg │ └───────────────┘ 149ea1d6981Smrg ┌────────┐ │ 150ea1d6981Smrg │ X2 ├──────┘ ┌───────────────┐ 151ea1d6981Smrg │ Server ├──────────────┤ │ 152ea1d6981Smrg └────────┘ │ Font Server │ 153ea1d6981Smrg ┌───────┤ 2 │ 154ea1d6981Smrg┌─────────┐ │ └───────────────┘ 155ea1d6981Smrg│ other │ │ 156ea1d6981Smrg│ clients ├──────┘ 157ea1d6981Smrg└─────────┘ 158ea1d6981Smrg</literallayout> 159ea1d6981Smrg</figure> 160ea1d6981Smrg 161ea1d6981Smrg<para> 162ea1d6981SmrgClients communicate with the font server using the request/reply/event model 163ea1d6981Smrgover any mutually-understood virtual stream connection (such as 164ea1d6981Smrg<acronym>TCP/IP</acronym>, DECnet, 165ea1d6981Smrg<footnote id='footnote2'><para> 166ea1d6981Smrg<firstterm><trademark>DECnet</trademark></firstterm> is a trademark 167ea1d6981Smrgof Digital Equipment Corporation. 168ea1d6981Smrg</para></footnote> 169ea1d6981Smrgetc.). Font servers are responsible for providing data in the bit and byte 170ea1d6981Smrgorders requested by the client. The set of requests and events provided in the 171ea1d6981Smrgfirst version of the X Font Service protocol is limited to supporting the needs 172ea1d6981Smrgof the bitmap-oriented core X Window System protocol. Extensions are expected 173ea1d6981Smrgas new needs evolve. 174ea1d6981Smrg</para> 175ea1d6981Smrg<para> 176ea1d6981SmrgA font server reads raw font data from a variety of sources (possibly 177ea1d6981Smrgincluding other font servers) and converts it into a common format that is 178ea1d6981Smrgtransmitted to the client using the protocol described in 179ea1d6981Smrg<link linkend='Protocol'>Section 4</link>. New font 180ea1d6981Smrgformats are handled by adding new converters to a font server, as shown in 181ea1d6981SmrgFigure 2.2. 182ea1d6981Smrg</para> 183ea1d6981Smrg 184ea1d6981Smrg<figure id="figure2.2" label="2.2"><title>Where Font Data Comes From</title> 185ea1d6981Smrg<literallayout class="monospaced"> 186ea1d6981Smrg ┌────────────┐ 187ea1d6981Smrg │ client │ 188ea1d6981Smrg │ (X server) │ 189ea1d6981Smrg └─────┬──────┘ 190ea1d6981Smrg │ 191ea1d6981Smrg network 192ea1d6981Smrg │ 193ea1d6981Smrg┌─────────────────────┴──────────────────────┐ 194ea1d6981Smrg│ │ 195ea1d6981Smrg│ font server 1 │ 196ea1d6981Smrg│ │ 197ea1d6981Smrg├─────┬─────┬─────┬─────┬────┬─────┬───┬─────┤ 198ea1d6981Smrg│ bdf │ snf │ pcf │ atm │ f3 │ dwf │ │ │ ... │ 199ea1d6981Smrg└─────┴─────┴─────┴─────┴────┴─────┴─│─┴─────┘ 200ea1d6981Smrg │ 201ea1d6981Smrg network 202ea1d6981Smrg │ 203ea1d6981Smrg ┌─────┴────┐ 204ea1d6981Smrg │ font │ 205ea1d6981Smrg │ server 2 │ 206ea1d6981Smrg └──────────┘ 207ea1d6981Smrg</literallayout> 208ea1d6981Smrg</figure> 209ea1d6981Smrg 210ea1d6981Smrg<para> 211ea1d6981SmrgThe server may choose to provide named sets of fonts called 212ea1d6981Smrg<firstterm>catalogues</firstterm>. 213ea1d6981SmrgClients may specify which of the sets should be used in listing or opening a 214ea1d6981Smrgfont. 215ea1d6981Smrg</para> 216ea1d6981Smrg 217ea1d6981Smrg<para> 218ea1d6981SmrgAn event mechanism similar to that used in the X protocol is provided for 219ea1d6981Smrgasynchronous notification of clients by the server. 220ea1d6981Smrg</para> 221ea1d6981Smrg 222ea1d6981Smrg<para> 223ea1d6981SmrgClients may provide authorization data for the server to be used in determining 224ea1d6981Smrg(according to the server's licensing policy) whether or not access should be 225ea1d6981Smrggranted to particular fonts. This is particularly useful for clients whose 226ea1d6981Smrgauthorization changes over time (such as an X server that can verify the 227ea1d6981Smrgidentity of the user). 228ea1d6981Smrg</para> 229ea1d6981Smrg<para> 230ea1d6981SmrgImplementations that wish to provide additional requests or events may use the 231ea1d6981Smrgextension mechanism. Adding to the core font service protocol (with the 232ea1d6981Smrgaccompanying change in the major or minor version numbers) is reserved to the X 233ea1d6981SmrgConsortium. 234ea1d6981Smrg</para> 235ea1d6981Smrg</chapter> 236ea1d6981Smrg 237ea1d6981Smrg<chapter id='Font_Server_Naming'> 238ea1d6981Smrg<title>Font Server Naming</title> 239ea1d6981Smrg<!-- .XS --> 240ea1d6981Smrg<!-- (SN Font Server Naming --> 241ea1d6981Smrg<!-- .XE --> 242ea1d6981Smrg<para> 243ea1d6981SmrgFont clients that expose font server names to the user are encouraged to 244ea1d6981Smrgprovide ways of naming font servers symbolically (e.g. DEPARTMENT-FONTS). 245ea1d6981SmrgHowever, for environments that lack appropriate name services 246ea1d6981Smrgtransport-specific names are necessary. Since these names do occur in the 247ea1d6981Smrgprotocol, clients and servers should support at least the applicable formats 248ea1d6981Smrgdescribed below. Formats for additional transports may be registered with the 249ea1d6981SmrgX Consortium. 250ea1d6981Smrg</para> 251ea1d6981Smrg 252ea1d6981Smrg<section id='TCPIP_Names'> 253ea1d6981Smrg<title>TCP/IP Names</title> 254ea1d6981Smrg<!-- .XS --> 255ea1d6981Smrg<!-- (SN TCP/IP Names --> 256ea1d6981Smrg<!-- .XE --> 257ea1d6981Smrg<para> 258ea1d6981SmrgThe following syntax should be used for TCP/IP names: 259ea1d6981Smrg 260ea1d6981Smrg<literallayout class="monospaced"> 261ea1d6981Smrg <replaceable>TCP name</replaceable> ::= <literal>tcp/</literal> <replaceable>hostname</replaceable> <literal>:</literal> <replaceable>ipportnumber</replaceable> <optional><literal>/</literal> <replaceable>cataloguelist</replaceable></optional> 262ea1d6981Smrg</literallayout> 263ea1d6981Smrg 264ea1d6981Smrgwhere <replaceable>hostname</replaceable> is either symbolic (such as 265ea1d6981Smrg<systemitem class="systemname">expo.lcs.mit.edu</systemitem>) or numeric 266ea1d6981Smrgdecimal (such as <systemitem class="ipaddress">18.30.0.212</systemitem>). 267ea1d6981SmrgThe <replaceable>ipportnumber</replaceable> is the port on which the 268ea1d6981Smrgfont server is listening for connections. 269ea1d6981SmrgThe <replaceable>cataloguelist</replaceable> string at 270ea1d6981Smrgthe end is optional and specifies a plus-separated list of catalogues 271ea1d6981Smrgthat may be requested. For example: 272ea1d6981Smrg<literallayout class="monospaced"> 273ea1d6981Smrg tcp/expo.lcs.mit.edu:8012/available+special 274ea1d6981Smrg tcp/18.30.0.212:7890 275ea1d6981Smrg</literallayout> 276ea1d6981Smrg</para> 277ea1d6981Smrg</section> 278ea1d6981Smrg 279ea1d6981Smrg<section id='DECnet_Names'> 280ea1d6981Smrg<title>DECnet Names</title> 281ea1d6981Smrg<!-- .XS --> 282ea1d6981Smrg<!-- (SN DECnet Names --> 283ea1d6981Smrg<!-- .XE --> 284ea1d6981Smrg<para> 285ea1d6981SmrgThe following syntax should be used for DECnet names: 286ea1d6981Smrg 287ea1d6981Smrg<literallayout class="monospaced"> 288ea1d6981Smrg <replaceable>DECnet name</replaceable> ::= <literal>decnet/</literal> <replaceable>nodename</replaceable> <literal>::font$</literal> <replaceable>objname</replaceable> <optional><literal>/</literal> <replaceable>cataloguelist</replaceable></optional> 289ea1d6981Smrg</literallayout> 290ea1d6981Smrg 291ea1d6981Smrgwhere <replaceable>nodename</replaceable> is either symbolic (such as 292ea1d6981Smrg<systemitem class="systemname">SRVNOD</systemitem>) or the 293ea1d6981Smrgnumeric decimal form of the DECnet address (such as 294ea1d6981Smrg<systemitem class="ipaddress">44.70</systemitem>). 295ea1d6981SmrgThe <replaceable>objname</replaceable> is normal, case-insensitive DECnet 296ea1d6981Smrgobject name. The <replaceable>cataloguelist</replaceable> string 297ea1d6981Smrgat the end is 298ea1d6981Smrgoptional and specifies a plus-separated list of catalogues that may be 299ea1d6981Smrgrequested. For example: 300ea1d6981Smrg 301ea1d6981Smrg<literallayout class="monospaced"> 302ea1d6981Smrg DECNET/SRVNOD::FONT$DEFAULT/AVAILABLE 303ea1d6981Smrg decnet/44.70::font$other 304ea1d6981Smrg</literallayout> 305ea1d6981Smrg</para> 306ea1d6981Smrg</section> 307ea1d6981Smrg</chapter> 308ea1d6981Smrg 309ea1d6981Smrg<chapter id='Protocol'> 310ea1d6981Smrg<title>Protocol</title> 311ea1d6981Smrg<!-- .XS --> 312ea1d6981Smrg<!-- (SN Protocol --> 313ea1d6981Smrg<!-- .XE --> 314ea1d6981Smrg<para> 315ea1d6981SmrgThe protocol described below uses the request/reply/error model and is 316ea1d6981Smrgspecified using the same conventions outlined in 317ea1d6981Smrg<olink targetdoc='x11protocol' targetptr='Syntactic_Conventions'>Section 2 318ea1d6981Smrgof the core X Window System protocol</olink> 319ea1d6981Smrg<xref linkend="References:x11proto"/>: 320ea1d6981Smrg</para> 321ea1d6981Smrg<itemizedlist> 322ea1d6981Smrg <listitem> 323ea1d6981Smrg <para> 324ea1d6981Smrg<!-- .IP \(bu 5 --> 325ea1d6981SmrgData type names are spelled in upper case with no word separators, 326ea1d6981Smrgas in: <link linkend="Data_Types:FONTID"><type>FONTID</type></link> 327ea1d6981Smrg </para> 328ea1d6981Smrg </listitem> 329ea1d6981Smrg <listitem> 330ea1d6981Smrg <para> 331ea1d6981Smrg<!-- .IP \(bu 5 --> 332ea1d6981SmrgAlternate values are capitalized with no word separators, 333ea1d6981Smrgas in: <constant>MaxWidth</constant> 334ea1d6981Smrg </para> 335ea1d6981Smrg </listitem> 336ea1d6981Smrg <listitem> 337ea1d6981Smrg <para> 338ea1d6981Smrg<!-- .IP \(bu 5 --> 339ea1d6981SmrgStructure element declarations are in lower case with hyphens 340ea1d6981Smrgas word separators, as in: <structfield>byte-order-msb</structfield> 341ea1d6981Smrg </para> 342ea1d6981Smrg <note> 343ea1d6981Smrg <para> 344ea1d6981SmrgStructure element names are referred to in 345ea1d6981Smrgupper case (e.g. <structfield>BYTE-ORDER-MSB</structfield>) when used in 346ea1d6981Smrgdescriptions to set them off from the surrounding 347ea1d6981Smrgtext. When this document is typeset they will be 348ea1d6981Smrgprinted in lower case in a distinct font. 349ea1d6981Smrg </para> 350ea1d6981Smrg </note> 351ea1d6981Smrg </listitem> 352ea1d6981Smrg <listitem> 353ea1d6981Smrg <para> 354ea1d6981SmrgType declarations have the form <quote><type>name</type>: type</quote>, 355ea1d6981Smrgas in: <type>CARD8</type>: 8-bit byte 356ea1d6981Smrg </para> 357ea1d6981Smrg </listitem> 358ea1d6981Smrg <listitem> 359ea1d6981Smrg <para> 360ea1d6981SmrgComma-separated lists of alternate values are enclosed in 361ea1d6981Smrgbraces, as in: { <constant>Min</constant>, <constant>MaxWidth</constant>, 362ea1d6981Smrg<constant>Max</constant> } 363ea1d6981Smrg </para> 364ea1d6981Smrg </listitem> 365ea1d6981Smrg <listitem> 366ea1d6981Smrg <para> 367ea1d6981SmrgComma-separated lists of structure elements are enclosed in 368ea1d6981Smrgbrackets, as in: [ <structfield>byte1</structfield>: <type>CARD8</type>, 369ea1d6981Smrg<structfield>byte2</structfield>: <type>CARD8</type> ] 370ea1d6981Smrg </para> 371ea1d6981Smrg </listitem> 372ea1d6981Smrg</itemizedlist> 373ea1d6981Smrg 374ea1d6981Smrg<para> 375ea1d6981SmrgA type with a prefix <quote>LISTof</quote> represents a counted list of 376ea1d6981Smrgelements of that type, as in: <type>LISTofCARD8</type> 377ea1d6981Smrg</para> 378ea1d6981Smrg 379ea1d6981Smrg<section id='Data_Types'> 380ea1d6981Smrg<title>Data Types</title> 381ea1d6981Smrg<!-- .XS --> 382ea1d6981Smrg<!-- (SN Data Types --> 383ea1d6981Smrg<!-- .XE --> 384ea1d6981Smrg<para> 385ea1d6981SmrgThe following data types are used in the core X Font Server protocol: 386ea1d6981Smrg</para> 387ea1d6981Smrg 388ea1d6981Smrg<section id="Data_Types:ACCESSCONTEXT"> 389ea1d6981Smrg <title><type>ACCESSCONTEXT</type></title> 390ea1d6981Smrg <indexterm zone="Data_Types:ACCESSCONTEXT" significance="preferred"><primary>ACCESSCONTEXT</primary></indexterm> 391ea1d6981Smrg <informaltable frame='none'> 392ea1d6981Smrg <?dbfo keep-together="always" ?> 393ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 394ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 395ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 396ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 397ea1d6981Smrg <tbody> 398ea1d6981Smrg <row><entry><type>ACCESSCONTEXT</type>:</entry><entry><link linkend="Data_Types:ID"><type>ID</type></link></entry></row> 399ea1d6981Smrg </tbody> 400ea1d6981Smrg </tgroup> 401ea1d6981Smrg </informaltable> 402ea1d6981Smrg<para> 403ea1d6981SmrgThis value is specified in the CreateAC request as the identifier 404ea1d6981Smrgto be used when referring to a particular AccessContext resource 405ea1d6981Smrgwithin the server. These resources are used by the server to 406ea1d6981Smrgstore client-specified authorization information. This 407ea1d6981Smrginformation may be used by the server to determine whether or not 408ea1d6981Smrgthe client should be granted access to particular font data. 409ea1d6981Smrg</para> 410ea1d6981Smrg<para> 411ea1d6981SmrgIn order to preserve the integrity of font licensing being performed by 412ea1d6981Smrgthe font server, care must be taken by a client to properly represent the 413ea1d6981Smrgidentity of the true user of the font. Some font clients will in fact 414ea1d6981Smrgbe servers (for example, X servers) requesting fonts for their own clients. 415ea1d6981SmrgOther font clients may be doing work on behalf of a number of different 416ea1d6981Smrgusers over time (for example, print spoolers). 417ea1d6981Smrg</para> 418ea1d6981Smrg<para> 419ea1d6981Smrg<type>AccessContext</type>s 420ea1d6981Smrgmust be created (with 421ea1d6981Smrg<link linkend="Requests:CreateAC"><function>CreateAC</function></link>) 422ea1d6981Smrgand switched among (with 423ea1d6981Smrg<link linkend="Requests:SetAuthorization"><function>SetAuthorization</function></link>) 424ea1d6981Smrgto represent all of these <quote>font users</quote> properly. 425ea1d6981Smrg </para> 426ea1d6981Smrg</section> 427ea1d6981Smrg 428ea1d6981Smrg<section id="Data_Types:ALTERNATESERVER"> 429ea1d6981Smrg <title><type>ALTERNATESERVER</type></title> 430ea1d6981Smrg <indexterm zone="Data_Types:ALTERNATESERVER" significance="preferred"><primary>ALTERNATESERVER</primary></indexterm> 431ea1d6981Smrg <informaltable frame='none'> 432ea1d6981Smrg <?dbfo keep-together="always" ?> 433ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 434ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 435ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 436ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 437ea1d6981Smrg <tbody> 438ea1d6981Smrg <row><entry morerows="1"><type>ALTERNATESERVER</type>:</entry> 439ea1d6981Smrg <entry> [ <structfield>name</structfield>:</entry><entry> <link linkend="Data_Types:STRING8"><type>STRING8</type></link>,</entry></row> 440ea1d6981Smrg <row><entry> <structfield>subset</structfield>:</entry><entry> <link linkend="Data_Types:BOOL"><type>BOOL</type></link> ]</entry></row> 441ea1d6981Smrg </tbody> 442ea1d6981Smrg </tgroup> 443ea1d6981Smrg </informaltable> 444ea1d6981Smrg 445ea1d6981Smrg <para> 446ea1d6981SmrgThis structure specifies the <structfield>NAME</structfield>, 447ea1d6981Smrgencoded in <acronym>ISO</acronym> 8859-1 according 448ea1d6981Smrgto <link linkend='Font_Server_Naming'>Section 3</link>, 449ea1d6981Smrgof another font server that may be useful as a 450ea1d6981Smrgsubstitute for this font server. 451ea1d6981SmrgThe <structfield>SUBSET</structfield> field indicates 452ea1d6981Smrgwhether or not the alternate server is likely to only contain a 453ea1d6981Smrgsubset of the fonts available from this font server. This 454ea1d6981Smrginformation is returned during the initial connection setup and 455ea1d6981Smrgmay be used by the client to find a backup server in case of 456ea1d6981Smrgfailure. 457ea1d6981Smrg </para> 458ea1d6981Smrg</section> 459ea1d6981Smrg 460ea1d6981Smrg<section id="Data_Types:AUTH"> 461ea1d6981Smrg <title><type>AUTH</type></title> 462ea1d6981Smrg <indexterm zone="Data_Types:AUTH" significance="preferred"><primary>AUTH</primary></indexterm> 463ea1d6981Smrg <informaltable frame='none'> 464ea1d6981Smrg <?dbfo keep-together="always" ?> 465ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 466ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 467ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 468ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 469ea1d6981Smrg <tbody> 470ea1d6981Smrg <row><entry morerows="1"><type>AUTH</type>:</entry><entry>[ <structfield>name</structfield>:</entry><entry><link linkend="Data_Types:STRING8"><type>STRING8</type></link>,</entry></row> 471ea1d6981Smrg <row><entry> <structfield>data</structfield>:</entry><entry><link linkend="Data_Types:BYTE"><type>LISTofBYTE</type></link> ]</entry></row> 472ea1d6981Smrg </tbody> 473ea1d6981Smrg </tgroup> 474ea1d6981Smrg </informaltable> 475ea1d6981Smrg 476ea1d6981Smrg<para> 477ea1d6981SmrgThis structure specifies the name of an authorization protocol and 478ea1d6981Smrginitial data for that protocol. It is used in the authorization 479ea1d6981Smrgnegotiation in the initial connection setup and in the CreateAC 480ea1d6981Smrgrequest. 481ea1d6981Smrg</para> 482ea1d6981Smrg</section> 483ea1d6981Smrg 484ea1d6981Smrg<section id="Data_Types:BITMAPFORMAT"> 485ea1d6981Smrg <title><type>BITMAPFORMAT</type></title> 486ea1d6981Smrg <indexterm zone="Data_Types:BITMAPFORMAT" significance="preferred"><primary>BITMAPFORMAT</primary></indexterm> 487ea1d6981Smrg <informaltable frame='none'> 488ea1d6981Smrg <?dbfo keep-together="always" ?> 489ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 490ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 491ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 492ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 493ea1d6981Smrg <tbody> 494ea1d6981Smrg <row><entry><type>BITMAPFORMAT</type>:</entry><entry><type>CARD32</type></entry></row> 495ea1d6981Smrg </tbody> 496ea1d6981Smrg </tgroup> 497ea1d6981Smrg </informaltable> 498ea1d6981Smrg 499ea1d6981Smrg <para> 500ea1d6981Smrg <type>CARD32</type> containing the following fields defined by the 501ea1d6981Smrg sets of values given further below 502ea1d6981Smrg </para> 503ea1d6981Smrg <informaltable frame='none'> 504ea1d6981Smrg <?dbfo keep-together="always" ?> 505ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 506ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 507ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 508ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 509ea1d6981Smrg <tbody> 510ea1d6981Smrg <row><entry>[</entry></row> 511ea1d6981Smrg <row><entry> <structfield>byte-order-msb</structfield>:</entry><entry> 1 bit,</entry></row> 512ea1d6981Smrg <row><entry> <structfield>bit-order-msb</structfield>:</entry><entry> 1 bit,</entry></row> 513ea1d6981Smrg <row><entry> <structfield>image-rect</structfield>:</entry><entry> 2 bits</entry><entry>{ <constant>Min</constant>, 514ea1d6981Smrg <constant>MaxWidth</constant>, 515ea1d6981Smrg <constant>Max</constant> },</entry></row> 516ea1d6981Smrg <row><entry> <structfield>zero-pad</structfield>:</entry><entry> 4 bits,</entry></row> 517ea1d6981Smrg <row><entry> <structfield>scanline-pad</structfield>:</entry><entry> 2 bits</entry><entry>{ <constant>ScanlinePad8</constant>, 518ea1d6981Smrg <constant>ScanlinePad16</constant>, 519ea1d6981Smrg <constant>ScanlinePad32</constant>, 520ea1d6981Smrg <constant>ScanlinePad64</constant> },</entry></row> 521ea1d6981Smrg <row><entry> <structfield>zero-pad</structfield>:</entry><entry> 2 bits,</entry></row> 522ea1d6981Smrg <row><entry> <structfield>scanline-unit</structfield>:</entry><entry> 2 bits</entry><entry>{ <constant>ScanlineUnit8</constant>, 523ea1d6981Smrg <constant>ScanlineUnit16</constant>, 524ea1d6981Smrg <constant>ScanlineUnit32</constant>, 525ea1d6981Smrg <constant>ScanlineUnit64</constant> },</entry></row> 526ea1d6981Smrg <row><entry> <structfield>zero-pad</structfield>:</entry><entry> 2 bits,</entry></row> 527ea1d6981Smrg <row><entry> <structfield>zero-pad</structfield>:</entry><entry> 16 bits,</entry></row> 528ea1d6981Smrg <row><entry>]</entry></row> 529ea1d6981Smrg </tbody> 530ea1d6981Smrg </tgroup> 531ea1d6981Smrg </informaltable> 532ea1d6981Smrg 533ea1d6981Smrg<para> 534ea1d6981SmrgThis structure specifies how glyph images are transmitted in 535ea1d6981Smrgresponse to 536ea1d6981Smrg<link linkend="Requests:QueryXBitmaps8"><function>QueryXBitmaps8</function></link> 537ea1d6981Smrgand 538ea1d6981Smrg<link linkend="Requests:QueryXBitmaps16"><function>QueryXBitmaps16</function></link> 539ea1d6981Smrgrequests. 540ea1d6981Smrg</para> 541ea1d6981Smrg<para> 542ea1d6981SmrgIf the <structfield>BYTE-ORDER-MSB</structfield> bit 543ea1d6981Smrg<literal>(1 << 0)</literal> is set, the Most Significant 544ea1d6981SmrgByte of each scanline unit is returned first. Otherwise, the 545ea1d6981SmrgLeast Significant Byte is returned first. 546ea1d6981Smrg</para> 547ea1d6981Smrg<para> 548ea1d6981SmrgIf the <structfield>BIT-ORDER-MSB</structfield> bit 549ea1d6981Smrg<literal>(1 << 1)</literal> is set, the left-most bit in 550ea1d6981Smrgeach glyph scanline unit is stored in the Most Significant Bit of 551ea1d6981Smrgeach transmitted scanline unit. Otherwise, the left-most bit is 552ea1d6981Smrgstored in the Least Significant Bit. 553ea1d6981Smrg</para> 554ea1d6981Smrg<para> 555ea1d6981SmrgThe <structfield>IMAGE-RECT</structfield> field specifies a rectangle of 556ea1d6981Smrgpixels within the 557ea1d6981Smrgglyph image. It contains one of the following alternate values: 558ea1d6981Smrg 559ea1d6981Smrg <informaltable frame='none'> 560ea1d6981Smrg <?dbfo keep-together="always" ?> 561ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 562ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 563ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 564ea1d6981Smrg <tbody> 565ea1d6981Smrg <row><entry><constant>ImageRectMin</constant></entry><entry><literal>(0 << 2)</literal></entry></row> 566ea1d6981Smrg <row><entry><constant>ImageRectMaxWidth</constant></entry><entry><literal>(1 << 2)</literal></entry></row> 567ea1d6981Smrg <row><entry><constant>ImageRectMax</constant></entry><entry><literal>(2 << 2)</literal></entry></row> 568ea1d6981Smrg </tbody> 569ea1d6981Smrg </tgroup> 570ea1d6981Smrg </informaltable> 571ea1d6981Smrg</para> 572ea1d6981Smrg<para> 573ea1d6981SmrgFor a glyph with extents <link linkend="Data_Types:XCHARINFO"><type>XCHARINFO</type></link> in a font with header 574ea1d6981Smrginformation <link linkend="Data_Types:XFONTINFO"><type>XFONTINFO</type></link>, the <structfield>IMAGE-RECT</structfield> 575ea1d6981Smrgvalues have the following meanings: 576ea1d6981Smrg<variablelist> 577ea1d6981Smrg <varlistentry id="Constant:ImageRectMin"> 578ea1d6981Smrg <term><constant>ImageRectMin</constant></term> 579ea1d6981Smrg <listitem> 580ea1d6981Smrg <indexterm zone="Constant:ImageRectMin" significance="preferred"><primary>ImageRectMin</primary></indexterm> 581ea1d6981Smrg <para> 582ea1d6981SmrgThis refers to the minimal bounding rectangle 583ea1d6981Smrgsurrounding the inked pixels in the glyph. This is the 584ea1d6981Smrgmost compact representation. The edges of the rectangle 585ea1d6981Smrgare: 586ea1d6981Smrg<literallayout class="monospaced"> 587ea1d6981Smrg left: <structfield>XCHARINFO.LBEARING</structfield> 588ea1d6981Smrg right: <structfield>XCHARINFO.RBEARING</structfield> 589ea1d6981Smrg top: <structfield>XCHARINFO.ASCENT</structfield> 590ea1d6981Smrg bottom: <structfield>XCHARINFO.DESCENT</structfield> 591ea1d6981Smrg</literallayout> 592ea1d6981Smrg </para> 593ea1d6981Smrg </listitem> 594ea1d6981Smrg </varlistentry> 595ea1d6981Smrg <varlistentry id="Constant:ImageRectMaxWidth"> 596ea1d6981Smrg <term><constant>ImageRectMaxWidth</constant></term> 597ea1d6981Smrg <listitem> 598ea1d6981Smrg <indexterm zone="Constant:ImageRectMaxWidth" significance="preferred"><primary>ImageRectMaxWidth</primary></indexterm> 599ea1d6981Smrg <para> 600ea1d6981SmrgThis refers to the scanlines between the 601ea1d6981Smrgglyph's ascent and descent, padded on the left to the minimum 602ea1d6981Smrgleft-bearing (or 0, whichever is less) and on the right to 603ea1d6981Smrgthe maximum right-bearing (or logical-width, whichever is 604ea1d6981Smrggreater). All glyph images share a common horizontal 605ea1d6981Smrgorigin. This is a combination of <constant>ImageRectMax</constant> in the 606ea1d6981Smrghorizontal direction and <constant>ImageRectMin</constant> in the vertical 607ea1d6981Smrgdirection. The edges of the rectangle are: 608ea1d6981Smrg 609ea1d6981Smrg<literallayout class="monospaced"> 610ea1d6981Smrgleft: min (<structfield>XFONTINFO.MIN-BOUNDS.LBEARING</structfield>, 0) 611ea1d6981Smrgright: max (<structfield>XFONTINFO.MAX-BOUNDS.RBEARING</structfield>, 612ea1d6981Smrg <structfield>XFONTINFO.MAX-BOUNDS.WIDTH</structfield>) 613ea1d6981Smrgtop: <structfield>XCHARINFO.ASCENT</structfield> 614ea1d6981Smrgbottom: <structfield>XCHARINFO.DESCENT</structfield> 615ea1d6981Smrg</literallayout> 616ea1d6981Smrg </para> 617ea1d6981Smrg </listitem> 618ea1d6981Smrg </varlistentry> 619ea1d6981Smrg <varlistentry id="Constant:ImageRectMax"> 620ea1d6981Smrg <term><constant>ImageRectMax</constant></term> 621ea1d6981Smrg <listitem> 622ea1d6981Smrg <indexterm zone="Constant:ImageRectMax" significance="preferred"><primary>ImageRectMax</primary></indexterm> 623ea1d6981Smrg <para> 624ea1d6981SmrgThis refers to all scanlines, from the maximum 625ea1d6981Smrgascent (or the font ascent, whichever is greater) to the 626ea1d6981Smrgmaximum descent (or the font descent, whichever is greater), 627ea1d6981Smrgpadded to the same horizontal extents as <constant>MaxWidth</constant>. 628ea1d6981SmrgAll glyph images have the same sized bitmap and share a 629ea1d6981Smrgcommon origin. This is the least compact representation, 630ea1d6981Smrgbut may be the easiest or most efficient (particularly for 631ea1d6981Smrgcharacter cell fonts) for some clients to use. The edges of 632ea1d6981Smrgthe rectangle are: 633ea1d6981Smrg 634ea1d6981Smrg<literallayout class="monospaced"> 635ea1d6981Smrgleft: min (<structfield>XFONTINFO.MIN-BOUNDS.LBEARING</structfield>, 0) 636ea1d6981Smrgright: max (<structfield>XFONTINFO.MAX-BOUNDS.RBEARING</structfield>, 637ea1d6981Smrg <structfield>XFONTINFO.MAX-BOUNDS.WIDTH</structfield>) 638ea1d6981Smrgtop: max (<structfield>XFONTINFO.FONT-ASCENT</structfield>, 639ea1d6981Smrg <structfield>XFONTINFO.MAX-BOUNDS.ASCENT</structfield>) 640ea1d6981Smrgbottom: max (<structfield>XFONTINFO.FONT-DESCENT</structfield>, 641ea1d6981Smrg <structfield>XFONTINFO.MAX-BOUNDS.DESCENT</structfield>) 642ea1d6981Smrg</literallayout> 643ea1d6981Smrg </para> 644ea1d6981Smrg </listitem> 645ea1d6981Smrg </varlistentry> 646ea1d6981Smrg</variablelist> 647ea1d6981Smrg</para> 648ea1d6981Smrg<para> 649ea1d6981SmrgThe <structfield>SCANLINE-PAD</structfield> field specifies the number of 650ea1d6981Smrgbits (8, 16, 32, 651ea1d6981Smrgor 64) to which each glyph scanline is padded before transmitting. 652ea1d6981SmrgIt contains one of the following alternate values: 653ea1d6981Smrg <informaltable frame='none'> 654ea1d6981Smrg <?dbfo keep-together="always" ?> 655ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 656ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 657ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 658ea1d6981Smrg <tbody> 659ea1d6981Smrg <row><entry><constant>ScanlinePad8</constant></entry><entry><literal>(0 << 8)</literal></entry></row> 660ea1d6981Smrg <row><entry><constant>ScanlinePad16</constant></entry><entry><literal>(1 << 8)</literal></entry></row> 661ea1d6981Smrg <row><entry><constant>ScanlinePad32</constant></entry><entry><literal>(2 << 8)</literal></entry></row> 662ea1d6981Smrg <row><entry><constant>ScanlinePad64</constant></entry><entry><literal>(3 << 8)</literal></entry></row> 663ea1d6981Smrg </tbody> 664ea1d6981Smrg </tgroup> 665ea1d6981Smrg </informaltable> 666ea1d6981Smrg</para> 667ea1d6981Smrg<para> 668ea1d6981SmrgThe <structfield>SCANLINE-UNIT</structfield> field specifies the number of 669ea1d6981Smrgbits (8, 16, 32, or 64) that should be treated as a unit for swapping. 670ea1d6981SmrgThis value must be less than or equal to the number of bits specified by the 671ea1d6981Smrg<structfield>SCANLINE-PAD</structfield>. It contains one of the following 672ea1d6981Smrgalternate values: 673ea1d6981Smrg 674ea1d6981Smrg <informaltable frame='none'> 675ea1d6981Smrg <?dbfo keep-together="always" ?> 676ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 677ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 678ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 679ea1d6981Smrg <tbody> 680ea1d6981Smrg <row><entry><constant>ScanlineUnit8</constant></entry><entry><literal>(0 << 12)</literal></entry></row> 681ea1d6981Smrg <row><entry><constant>ScanlineUnit16</constant></entry><entry><literal>(1 << 12)</literal></entry></row> 682ea1d6981Smrg <row><entry><constant>ScanlineUnit32</constant></entry><entry><literal>(2 << 12)</literal></entry></row> 683ea1d6981Smrg <row><entry><constant>ScanlineUnit64</constant></entry><entry><literal>(3 << 12)</literal></entry></row> 684ea1d6981Smrg </tbody> 685ea1d6981Smrg </tgroup> 686ea1d6981Smrg </informaltable> 687ea1d6981Smrg</para> 688ea1d6981Smrg<para> 689ea1d6981Smrg<link linkend="Data_Types:BITMAPFORMAT"><type>BITMAPFORMAT</type></link>s are byte-swapped as <type>CARD32</type>s. 690ea1d6981SmrgAll unspecified bits must be zero. 691ea1d6981Smrg</para> 692ea1d6981Smrg<para> 693ea1d6981SmrgUse of an invalid <link linkend="Data_Types:BITMAPFORMAT"><type>BITMAPFORMAT</type></link> causes a 694ea1d6981Smrg<link linkend="Errors:Format"><errorname>Format</errorname></link> error to be returned. 695ea1d6981Smrg</para> 696ea1d6981Smrg</section> 697ea1d6981Smrg 698ea1d6981Smrg<section id="Data_Types:BITMAPFORMATMASK"> 699ea1d6981Smrg <title><type>BITMAPFORMATMASK</type></title> 700ea1d6981Smrg <indexterm zone="Data_Types:BITMAPFORMATMASK" significance="preferred"><primary>BITMAPFORMATMASK</primary></indexterm> 701ea1d6981Smrg <informaltable frame='none'> 702ea1d6981Smrg <?dbfo keep-together="always" ?> 703ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 704ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 705ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 706ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 707ea1d6981Smrg <tbody> 708ea1d6981Smrg <row><entry><type>BITMAPFORMATMASK</type>:</entry><entry> <type>CARD32</type> mask</entry></row> 709ea1d6981Smrg </tbody> 710ea1d6981Smrg </tgroup> 711ea1d6981Smrg </informaltable> 712ea1d6981Smrg<para> 713ea1d6981SmrgThis is a mask of bits representing the fields in a <link linkend="Data_Types:BITMAPFORMAT"><type>BITMAPFORMAT</type></link>: 714ea1d6981Smrg <informaltable frame='none'> 715ea1d6981Smrg <?dbfo keep-together="always" ?> 716ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 717ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 718ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 719ea1d6981Smrg <tbody> 720ea1d6981Smrg <row><entry><constant>ByteOrderMask</constant></entry><entry><literal>(1 << 0)</literal></entry></row> 721ea1d6981Smrg <row><entry><constant>BitOrderMask</constant></entry><entry><literal>(1 << 1)</literal></entry></row> 722ea1d6981Smrg <row><entry><constant>ImageRectMask</constant></entry><entry><literal>(1 << 2)</literal></entry></row> 723ea1d6981Smrg <row><entry><constant>ScanlinePadMask</constant></entry><entry><literal>(1 << 3)</literal></entry></row> 724ea1d6981Smrg <row><entry><constant>ScanlineUnitMask</constant></entry><entry><literal>(1 << 4)</literal></entry></row> 725ea1d6981Smrg </tbody> 726ea1d6981Smrg </tgroup> 727ea1d6981Smrg </informaltable> 728ea1d6981Smrg</para> 729ea1d6981Smrg<para> 730ea1d6981SmrgUnspecified bits are required to be zero or else a 731ea1d6981Smrg<link linkend="Errors:Format"><errorname>Format</errorname></link> error is returned. 732ea1d6981Smrg</para> 733ea1d6981Smrg</section> 734ea1d6981Smrg 735ea1d6981Smrg<section id="Data_Types:BOOL"> 736ea1d6981Smrg <title><type>BOOL</type></title> 737ea1d6981Smrg <indexterm zone="Data_Types:BOOL" significance="preferred"><primary>BOOL</primary></indexterm> 738ea1d6981Smrg <informaltable frame='none'> 739ea1d6981Smrg <?dbfo keep-together="always" ?> 740ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 741ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 742ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 743ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 744ea1d6981Smrg <tbody> 745ea1d6981Smrg <row><entry><type>BOOL</type>:</entry><entry> <type>CARD8</type></entry></row> 746ea1d6981Smrg </tbody> 747ea1d6981Smrg </tgroup> 748ea1d6981Smrg </informaltable> 749ea1d6981Smrg<para> 750ea1d6981SmrgThis is a boolean value containing one of the following alternate 751ea1d6981Smrgvalues: 752ea1d6981Smrg <informaltable frame='none'> 753ea1d6981Smrg <?dbfo keep-together="always" ?> 754ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 755ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 756ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 757ea1d6981Smrg <tbody> 758ea1d6981Smrg <row><entry><constant>False</constant></entry><entry><literal>0</literal></entry></row> 759ea1d6981Smrg <row><entry><constant>True</constant></entry><entry><literal>1</literal></entry></row> 760ea1d6981Smrg </tbody> 761ea1d6981Smrg </tgroup> 762ea1d6981Smrg </informaltable> 763ea1d6981Smrg</para> 764ea1d6981Smrg</section> 765ea1d6981Smrg 766ea1d6981Smrg<section id="Data_Types:BYTE"> 767ea1d6981Smrg <title><type>BYTE</type></title> 768ea1d6981Smrg <indexterm zone="Data_Types:BYTE" significance="preferred"><primary>BYTE</primary></indexterm> 769ea1d6981Smrg <informaltable frame='none'> 770ea1d6981Smrg <?dbfo keep-together="always" ?> 771ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 772ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 773ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 774ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 775ea1d6981Smrg <tbody> 776ea1d6981Smrg <row><entry><type>BYTE</type>:</entry><entry> 8-bit value</entry></row> 777ea1d6981Smrg </tbody> 778ea1d6981Smrg </tgroup> 779ea1d6981Smrg </informaltable> 780ea1d6981Smrg 781ea1d6981Smrg<para> 782ea1d6981SmrgThis is an unsigned byte of data whose encoding 783ea1d6981Smrgis determined by the context in which it is used. 784ea1d6981Smrg</para> 785ea1d6981Smrg 786ea1d6981Smrg</section> 787ea1d6981Smrg 788ea1d6981Smrg<section id="Data_Types:CARDn"> 789ea1d6981Smrg <title><type>CARD8</type>, <type>CARD16</type>, <type>CARD32</type></title> 790ea1d6981Smrg <indexterm zone="Data_Types:CARDn" significance="preferred"><primary>CARD8</primary></indexterm> 791ea1d6981Smrg <indexterm zone="Data_Types:CARDn" significance="preferred"><primary>CARD16</primary></indexterm> 792ea1d6981Smrg <indexterm zone="Data_Types:CARDn" significance="preferred"><primary>CARD32</primary></indexterm> 793ea1d6981Smrg <informaltable frame='none'> 794ea1d6981Smrg <?dbfo keep-together="always" ?> 795ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 796ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 797ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 798ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 799ea1d6981Smrg <tbody> 800ea1d6981Smrg <row><entry><type>CARD8</type>:</entry><entry> 8-bit unsigned integer</entry></row> 801ea1d6981Smrg <row><entry><type>CARD16</type>:</entry><entry> 16-bit unsigned integer</entry></row> 802ea1d6981Smrg <row><entry><type>CARD32</type>:</entry><entry> 32-bit unsigned integer</entry></row> 803ea1d6981Smrg </tbody> 804ea1d6981Smrg </tgroup> 805ea1d6981Smrg </informaltable> 806ea1d6981Smrg 807ea1d6981Smrg<para> 808ea1d6981SmrgThese are unsigned numbers. The latter two are byte-swapped when 809ea1d6981Smrgthe server and client have different byte orders. 810ea1d6981Smrg</para> 811ea1d6981Smrg 812ea1d6981Smrg</section> 813ea1d6981Smrg 814ea1d6981Smrg<section id="Data_Types:CHAR2B"> 815ea1d6981Smrg <title><type>CHAR2B</type></title> 816ea1d6981Smrg <indexterm zone="Data_Types:CHAR2B" significance="preferred"><primary>CHAR2B</primary></indexterm> 817ea1d6981Smrg <informaltable frame='none'> 818ea1d6981Smrg <?dbfo keep-together="always" ?> 819ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 820ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 821ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 822ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 823ea1d6981Smrg <tbody> 824ea1d6981Smrg <row><entry><type>CHAR2B</type>:</entry><entry>[ <structfield>byte1</structfield>, <structfield>byte2</structfield>:</entry><entry><type>CARD8</type> ]</entry></row> 825ea1d6981Smrg </tbody> 826ea1d6981Smrg </tgroup> 827ea1d6981Smrg </informaltable> 828ea1d6981Smrg<para> 829ea1d6981SmrgThis structure specifies an individual character code within 830ea1d6981Smrgeither a 2-dimensional matrix (using <structfield>BYTE1</structfield> 831ea1d6981Smrgand <structfield>BYTE2</structfield> as the row and column indices, 832ea1d6981Smrgrespectively) or a vector (using <structfield>BYTE1</structfield> and 833ea1d6981Smrg<structfield>BYTE2</structfield> as most- and least-significant bytes, 834ea1d6981Smrgrespectively). This data type is treated as a pair of 8-bit values and 835ea1d6981Smrgis never byte-swapped. Therefore, the client should always transmit 836ea1d6981Smrg<structfield>BYTE1</structfield> first. 837ea1d6981Smrg</para> 838ea1d6981Smrg 839ea1d6981Smrg</section> 840ea1d6981Smrg 841ea1d6981Smrg<section id="Data_Types:EVENTMASK"> 842ea1d6981Smrg <title><type>EVENTMASK</type></title> 843ea1d6981Smrg <indexterm zone="Data_Types:EVENTMASK" significance="preferred"><primary>EVENTMASK</primary></indexterm> 844ea1d6981Smrg <informaltable frame='none'> 845ea1d6981Smrg <?dbfo keep-together="always" ?> 846ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 847ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 848ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 849ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 850ea1d6981Smrg <tbody> 851ea1d6981Smrg <row><entry><type>EVENTMASK</type>:</entry><entry> <type>CARD32</type> mask</entry></row> 852ea1d6981Smrg </tbody> 853ea1d6981Smrg </tgroup> 854ea1d6981Smrg </informaltable> 855ea1d6981Smrg 856ea1d6981Smrg<para> 857ea1d6981SmrgThis is a mask of bits indicating which of an extension's (or the 858ea1d6981Smrgcore's) maskable events the client would like to receive. Each 859ea1d6981Smrgbit indicates one or more events, and a bit value of one indicates 860ea1d6981Smrginterest in a corresponding set of events. The following bits are 861ea1d6981Smrgdefined for event masks specified for the core protocol (i.e. an 862ea1d6981Smrg<parameter>EXTENSION-OPCODE</parameter> of zero in 863ea1d6981Smrg<link linkend="Requests:SetEventMask"><function>SetEventMask</function></link> 864ea1d6981Smrgand 865ea1d6981Smrg<link linkend="Requests:GetEventMask"><function>GetEventMask</function></link> 866ea1d6981Smrgrequests): 867ea1d6981Smrg 868ea1d6981Smrg <informaltable frame='none'> 869ea1d6981Smrg <?dbfo keep-together="always" ?> 870ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 871ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 872ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 873ea1d6981Smrg <tbody> 874ea1d6981Smrg <row><entry><constant>CatalogueListChangeMask</constant></entry><entry><literal>(1 << 0)</literal></entry></row> 875ea1d6981Smrg <row><entry><constant>FontListChangeMask</constant></entry><entry><literal>(1 << 1)</literal></entry></row> 876ea1d6981Smrg </tbody> 877ea1d6981Smrg </tgroup> 878ea1d6981Smrg </informaltable> 879ea1d6981Smrg</para> 880ea1d6981Smrg 881ea1d6981Smrg<para> 882ea1d6981SmrgIf 883ea1d6981Smrg<constant>CatalogueListChangeMask</constant> 884ea1d6981Smrgis set, client is interested in 885ea1d6981Smrgreceiving 886ea1d6981Smrg<link linkend="Events:CatalogueListNotify"><function>CatalogueListNotify</function></link> 887ea1d6981Smrgevents. If 888ea1d6981Smrg<constant>FontListChangeMask</constant> 889ea1d6981Smrgis set, the client is interested in 890ea1d6981Smrgreceiving 891ea1d6981Smrg<link linkend="Events:FontListNotify"><function>FontListNotify</function></link> 892ea1d6981Smrgevents. 893ea1d6981Smrg</para> 894ea1d6981Smrg<para> 895ea1d6981SmrgExtensions that provide additional events may define their own 896ea1d6981Smrgevent masks. These event masks have their own scope and may use 897ea1d6981Smrgthe same bit values as the core or other extensions. 898ea1d6981Smrg </para> 899ea1d6981Smrg <para> 900ea1d6981SmrgAll unused bits must be set to zero. In 901ea1d6981Smrg<link linkend="Requests:SetEventMask"><function>SetEventMask</function></link> 902ea1d6981Smrgrequests, if 903ea1d6981Smrgany bits are set that are not defined for the extension (or core) 904ea1d6981Smrgfor which this <type>EVENTMASK</type> is intended (according to the 905ea1d6981Smrg<parameter>EXTENSION-OPCODE</parameter> given in the 906ea1d6981Smrg<link linkend="Requests:SetEventMask"><function>SetEventMask</function></link> 907ea1d6981Smrgrequest), an 908ea1d6981Smrg<link linkend="Errors:EventMask"><errorname>EventMask</errorname></link> 909ea1d6981Smrgerror is generated. 910ea1d6981Smrg </para> 911ea1d6981Smrg <para> 912ea1d6981SmrgThis value is swapped as a <type>CARD32</type>. 913ea1d6981Smrg </para> 914ea1d6981Smrg 915ea1d6981Smrg</section> 916ea1d6981Smrg 917ea1d6981Smrg<section id="Data_Types:FONTID"> 918ea1d6981Smrg <title><type>FONTID</type></title> 919ea1d6981Smrg <indexterm zone="Data_Types:FONTID" significance="preferred"><primary>FONTID</primary></indexterm> 920ea1d6981Smrg <informaltable frame='none'> 921ea1d6981Smrg <?dbfo keep-together="always" ?> 922ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 923ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 924ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 925ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 926ea1d6981Smrg <tbody> 927ea1d6981Smrg <row><entry><type>FONTID</type>:</entry><entry> <link linkend="Data_Types:ID"><type>ID</type></link></entry></row> 928ea1d6981Smrg </tbody> 929ea1d6981Smrg </tgroup> 930ea1d6981Smrg </informaltable> 931ea1d6981Smrg 932ea1d6981Smrg<para> 933ea1d6981SmrgThis is specified by the client in the request 934ea1d6981Smrg<link linkend="Requests:OpenBitmapFont"><function>OpenBitmapFont</function></link> 935ea1d6981Smrgas the identifier to be used when referring to a particular open 936ea1d6981Smrgfont. 937ea1d6981Smrg</para> 938ea1d6981Smrg 939ea1d6981Smrg</section> 940ea1d6981Smrg 941ea1d6981Smrg<section id="Data_Types:ID"> 942ea1d6981Smrg <title><type>ID</type></title> 943ea1d6981Smrg <indexterm zone="Data_Types:ID" significance="preferred"><primary>ID</primary></indexterm> 944ea1d6981Smrg <informaltable frame='none'> 945ea1d6981Smrg <?dbfo keep-together="always" ?> 946ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 947ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 948ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 949ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 950ea1d6981Smrg <tbody> 951ea1d6981Smrg <row><entry><type>ID</type>:</entry><entry> <type>CARD32</type></entry></row> 952ea1d6981Smrg </tbody> 953ea1d6981Smrg </tgroup> 954ea1d6981Smrg </informaltable> 955ea1d6981Smrg 956ea1d6981Smrg<para> 957ea1d6981SmrgThis is a 32-bit value in which the top 3 bits must be clear, and 958ea1d6981Smrgat least 1 other bit must be set (yielding a range of 1 through 959ea1d6981Smrg2<superscript>29</superscript>-1). 960ea1d6981SmrgIt is specified by the client to represent objects in 961ea1d6981Smrgthe server. Identifiers are scoped according to their type are 962ea1d6981Smrgprivate to the client; thus, the same identifier may be used for 963ea1d6981Smrgboth a <link linkend="Data_Types:FONTID"><type>FONTID</type></link> and an <link linkend="Data_Types:ACCESSCONTEXT"><type>ACCESSCONTEXT</type></link> 964ea1d6981Smrgas well as by multiple clients. 965ea1d6981Smrg</para> 966ea1d6981Smrg<para> 967ea1d6981SmrgAn <type>ID</type> of zero is referred to as <constant>None</constant>. 968ea1d6981Smrg</para> 969ea1d6981Smrg</section> 970ea1d6981Smrg 971ea1d6981Smrg<section id="Data_Types:INTn"> 972ea1d6981Smrg <title><type>INT8</type>, <type>INT16</type>, <type>INT32</type></title> 973ea1d6981Smrg <indexterm zone="Data_Types:INTn" significance="preferred"><primary>INT8</primary></indexterm> 974ea1d6981Smrg <indexterm zone="Data_Types:INTn" significance="preferred"><primary>INT16</primary></indexterm> 975ea1d6981Smrg <indexterm zone="Data_Types:INTn" significance="preferred"><primary>INT32</primary></indexterm> 976ea1d6981Smrg <informaltable frame='none'> 977ea1d6981Smrg <?dbfo keep-together="always" ?> 978ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 979ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 980ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 981ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 982ea1d6981Smrg <tbody> 983ea1d6981Smrg <row><entry><type>INT8</type>:</entry><entry> 8-bit signed integer</entry></row> 984ea1d6981Smrg <row><entry><type>INT16</type>:</entry><entry> 16-bit signed integer</entry></row> 985ea1d6981Smrg <row><entry><type>INT32</type>:</entry><entry> 32-bit signed integer</entry></row> 986ea1d6981Smrg </tbody> 987ea1d6981Smrg </tgroup> 988ea1d6981Smrg </informaltable> 989ea1d6981Smrg 990ea1d6981Smrg<para> 991ea1d6981SmrgThese are signed numbers. The latter two are byte-swapped when 992ea1d6981Smrgthe client and server have different byte orders. 993ea1d6981Smrg</para> 994ea1d6981Smrg</section> 995ea1d6981Smrg 996ea1d6981Smrg<section id="Data_Types:OFFSET32"> 997ea1d6981Smrg <title><type>OFFSET32</type></title> 998ea1d6981Smrg <indexterm zone="Data_Types:OFFSET32" significance="preferred"><primary>OFFSET32</primary></indexterm> 999ea1d6981Smrg <informaltable frame='none'> 1000ea1d6981Smrg <?dbfo keep-together="always" ?> 1001ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 1002ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 1003ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1004ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 1005ea1d6981Smrg <tbody> 1006ea1d6981Smrg <row><entry morerows='1'><type>OFFSET32</type>:</entry> 1007ea1d6981Smrg <entry>[ <structfield>position</structfield>:</entry><entry><type>CARD32</type>,</entry></row> 1008ea1d6981Smrg <row><entry> <structfield>length</structfield>:</entry><entry><type>CARD32</type> ]</entry></row> 1009ea1d6981Smrg </tbody> 1010ea1d6981Smrg </tgroup> 1011ea1d6981Smrg </informaltable> 1012ea1d6981Smrg <para> 1013ea1d6981SmrgThis structure indicates a position and length within a block of 1014ea1d6981Smrgdata. 1015ea1d6981Smrg </para> 1016ea1d6981Smrg</section> 1017ea1d6981Smrg 1018ea1d6981Smrg<section id="Data_Types:PROPINFO"> 1019ea1d6981Smrg <title><type>PROPINFO</type></title> 1020ea1d6981Smrg <indexterm zone="Data_Types:PROPINFO" significance="preferred"><primary>PROPINFO</primary></indexterm> 1021ea1d6981Smrg <informaltable frame='none'> 1022ea1d6981Smrg <?dbfo keep-together="always" ?> 1023ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 1024ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 1025ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1026ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 1027ea1d6981Smrg <tbody> 1028ea1d6981Smrg <row><entry morerows='1'><type>PROPINFO</type>:</entry> 1029ea1d6981Smrg <entry>[ <structfield>offsets</structfield>:</entry><entry><link linkend="Data_Types:PROPOFFSET"><type>LISTofPROPOFFSET</type></link>,</entry></row> 1030ea1d6981Smrg <row><entry> <structfield>data</structfield>:</entry><entry><link linkend="Data_Types:BYTE"><type>LISTofBYTE</type></link> ]</entry></row> 1031ea1d6981Smrg </tbody> 1032ea1d6981Smrg </tgroup> 1033ea1d6981Smrg </informaltable> 1034ea1d6981Smrg 1035ea1d6981Smrg <para> 1036ea1d6981SmrgThis structure describes the list of properties provided by a 1037ea1d6981Smrgfont. Strings for all of the properties names and values are 1038ea1d6981Smrgstored within the data block and are located using a table of 1039ea1d6981Smrgoffsets and lengths. 1040ea1d6981Smrg </para> 1041ea1d6981Smrg <para> 1042ea1d6981SmrgThis structure is padded to 32-bit alignment. 1043ea1d6981Smrg </para> 1044ea1d6981Smrg 1045ea1d6981Smrg</section> 1046ea1d6981Smrg 1047ea1d6981Smrg<section id="Data_Types:PROPOFFSET"> 1048ea1d6981Smrg <title><type>PROPOFFSET</type></title> 1049ea1d6981Smrg <indexterm zone="Data_Types:PROPOFFSET" significance="preferred"><primary>PROPOFFSET</primary></indexterm> 1050ea1d6981Smrg <informaltable frame='none'> 1051ea1d6981Smrg <?dbfo keep-together="always" ?> 1052ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 1053ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 1054ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1055ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 1056ea1d6981Smrg <tbody> 1057ea1d6981Smrg <row><entry morerows='3'><type>PROPOFFSET</type>:</entry> 1058ea1d6981Smrg <entry>[ <structfield>name</structfield>:</entry><entry><link linkend="Data_Types:OFFSET32"><type>OFFSET32</type></link>,</entry></row> 1059ea1d6981Smrg <row><entry> <structfield>value</structfield>:</entry><entry><link linkend="Data_Types:OFFSET32"><type>OFFSET32</type></link>,</entry></row> 1060ea1d6981Smrg <row><entry> <structfield>type</structfield>:</entry><entry><type>CARD8</type>,</entry></row> 1061ea1d6981Smrg <row><entry> <structfield>zero-pad3</structfield>:</entry><entry><link linkend="Data_Types:BYTE"><type>BYTE</type></link>, <link linkend="Data_Types:BYTE"><type>BYTE</type></link>, <link linkend="Data_Types:BYTE"><type>BYTE</type></link> ]</entry></row> 1062ea1d6981Smrg </tbody> 1063ea1d6981Smrg </tgroup> 1064ea1d6981Smrg </informaltable> 1065ea1d6981Smrg 1066ea1d6981Smrg <para> 1067ea1d6981SmrgThis structure specifies the position, length, and type of 1068ea1d6981Smrgof data for a property. 1069ea1d6981Smrg </para> 1070ea1d6981Smrg <para> 1071ea1d6981SmrgThe <structfield>NAME</structfield> field specifies the position and length 1072ea1d6981Smrg(which must be 1073ea1d6981Smrggreater than zero) of the property name relative to the beginning 1074ea1d6981Smrgof the <structfield>PROPINFO.DATA</structfield> block for this font. 1075ea1d6981SmrgThe interpretation of 1076ea1d6981Smrgthe position and length of the <structfield>VALUE</structfield> field is 1077ea1d6981Smrgdetermined by the <structfield>TYPE</structfield> field, which contains 1078ea1d6981Smrgone of the following alternate values: 1079ea1d6981Smrg 1080ea1d6981Smrg <informaltable frame='none'> 1081ea1d6981Smrg <?dbfo keep-together="always" ?> 1082ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 1083ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 1084ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1085ea1d6981Smrg <tbody> 1086ea1d6981Smrg <row><entry><constant>String</constant></entry><entry><literal>0</literal></entry></row> 1087ea1d6981Smrg <row><entry><constant>Unsigned</constant></entry><entry><literal>1</literal></entry></row> 1088ea1d6981Smrg <row><entry><constant>Signed</constant></entry><entry><literal>2</literal></entry></row> 1089ea1d6981Smrg </tbody> 1090ea1d6981Smrg </tgroup> 1091ea1d6981Smrg </informaltable> 1092ea1d6981Smrgwhich have the following meanings: 1093ea1d6981Smrg<variablelist> 1094ea1d6981Smrg <varlistentry id="Constant:String"> 1095ea1d6981Smrg <term><constant>String</constant></term> 1096ea1d6981Smrg <listitem> 1097ea1d6981Smrg <indexterm zone="Constant:String" significance="preferred"><primary>String</primary></indexterm> 1098ea1d6981Smrg <para> 1099ea1d6981SmrgThis property contains a counted string of bytes. The 1100ea1d6981Smrgdata is stored in the <structfield>PROPINFO.DATA</structfield> 1101ea1d6981Smrgblock beginning at 1102ea1d6981Smrgrelative byte VALUE.POSITION (beginning with zero), extending 1103ea1d6981Smrgfor VALUE.LENGTH (at least zero) bytes. 1104ea1d6981Smrg </para> 1105ea1d6981Smrg </listitem> 1106ea1d6981Smrg </varlistentry> 1107ea1d6981Smrg <varlistentry id="Constant:Unsigned"> 1108ea1d6981Smrg <term><constant>Unsigned</constant></term> 1109ea1d6981Smrg <listitem> 1110ea1d6981Smrg <indexterm zone="Constant:Unsigned" significance="preferred"><primary>Unsigned</primary></indexterm> 1111ea1d6981Smrg <para> 1112ea1d6981SmrgThis property contains a unsigned, 32-bit number stored 1113ea1d6981Smrgas a <type>CARD32</type> in VALUE.POSITION (VALUE.LENGTH is zero). 1114ea1d6981Smrg </para> 1115ea1d6981Smrg </listitem> 1116ea1d6981Smrg </varlistentry> 1117ea1d6981Smrg <varlistentry id="Constant:Signed"> 1118ea1d6981Smrg <term><constant>Signed</constant></term> 1119ea1d6981Smrg <listitem> 1120ea1d6981Smrg <indexterm zone="Constant:Signed" significance="preferred"><primary>Signed</primary></indexterm> 1121ea1d6981Smrg <para> 1122ea1d6981SmrgThis property contains a signed, 32-bit number stored as 1123ea1d6981Smrgan <type>INT32</type> in VALUE.POSITION (VALUE.LENGTH is zero). 1124ea1d6981Smrg </para> 1125ea1d6981Smrg </listitem> 1126ea1d6981Smrg </varlistentry> 1127ea1d6981Smrg</variablelist> 1128ea1d6981SmrgThis structure is zero-padded to 32-bit alignment. 1129ea1d6981Smrg</para> 1130ea1d6981Smrg 1131ea1d6981Smrg</section> 1132ea1d6981Smrg 1133ea1d6981Smrg<section id="Data_Types:RANGE"> 1134ea1d6981Smrg <title><type>RANGE</type></title> 1135ea1d6981Smrg <indexterm zone="Data_Types:RANGE" significance="preferred"><primary>RANGE</primary></indexterm> 1136ea1d6981Smrg <informaltable frame='none'> 1137ea1d6981Smrg <?dbfo keep-together="always" ?> 1138ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 1139ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 1140ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1141ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 1142ea1d6981Smrg <tbody> 1143ea1d6981Smrg <row><entry><type>RANGE</type>:</entry> 1144ea1d6981Smrg <entry>[ <structfield>min-char</structfield>, <structfield>max-char</structfield>:</entry><entry><link linkend="Data_Types:CHAR2B"><type>CHAR2B</type></link> ]</entry></row> 1145ea1d6981Smrg </tbody> 1146ea1d6981Smrg </tgroup> 1147ea1d6981Smrg </informaltable> 1148ea1d6981Smrg 1149ea1d6981Smrg <para> 1150ea1d6981SmrgThis structure specifies a range of character codes. A single 1151ea1d6981Smrgcharacter is represented by <structfield>MIN-CHAR</structfield> equals 1152ea1d6981Smrg<structfield>MAX-CHAR</structfield>. If the linear interpretation of 1153ea1d6981Smrg<structfield>MAX-CHAR</structfield> is less than that of 1154ea1d6981Smrg<structfield>MIN-CHAR</structfield>, or if 1155ea1d6981Smrg<structfield>MIN-CHAR</structfield> is less than the font's 1156ea1d6981Smrg<structfield>XFONTINFO.CHAR-RANGE.MIN-CHAR</structfield>, or if 1157ea1d6981Smrg<structfield>MAX-CHAR</structfield> is greater than the 1158ea1d6981Smrgfont's <structfield>XFONTINFO.CHAR-RANGE.MAX-CHAR</structfield>, 1159ea1d6981Smrgthe range is invalid. 1160ea1d6981Smrg </para> 1161ea1d6981Smrg 1162ea1d6981Smrg</section> 1163ea1d6981Smrg 1164ea1d6981Smrg<section id="Data_Types:RESOLUTION"> 1165ea1d6981Smrg <title><type>RESOLUTION</type></title> 1166ea1d6981Smrg <indexterm zone="Data_Types:RESOLUTION" significance="preferred"><primary>RESOLUTION</primary></indexterm> 1167ea1d6981Smrg <informaltable frame='none'> 1168ea1d6981Smrg <?dbfo keep-together="always" ?> 1169ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 1170ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 1171ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1172ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 1173ea1d6981Smrg <tbody> 1174ea1d6981Smrg <row><entry morerows='2'><type>RESOLUTION</type>:</entry> 1175ea1d6981Smrg <entry>[ <structfield>x-resolution</structfield>:</entry><entry><type>CARD16</type>,</entry></row> 1176ea1d6981Smrg <row><entry> <structfield>y-resolution</structfield>:</entry><entry><type>CARD16</type>,</entry></row> 1177ea1d6981Smrg <row><entry> <structfield>decipoint-size</structfield>:</entry><entry><type>CARD16</type> ]</entry></row> 1178ea1d6981Smrg </tbody> 1179ea1d6981Smrg </tgroup> 1180ea1d6981Smrg </informaltable> 1181ea1d6981Smrg 1182ea1d6981Smrg <para> 1183ea1d6981SmrgThis structure specifies resolution and point size to be used in 1184ea1d6981Smrgresolving partially-specified scaled font names. The 1185ea1d6981Smrg<structfield>X-RESOLUTION</structfield> and 1186ea1d6981Smrg<structfield>Y-RESOLUTION</structfield> are measured in 1187ea1d6981Smrgpixels-per-inch and must be greater than zero. 1188ea1d6981SmrgThe <structfield>DECIPOINT-SIZE</structfield> is the preferred font 1189ea1d6981Smrgsize, measured in tenths of a point, and must be greater than zero. 1190ea1d6981Smrg </para> 1191ea1d6981Smrg 1192ea1d6981Smrg</section> 1193ea1d6981Smrg 1194ea1d6981Smrg<section id="Data_Types:STRING8"> 1195ea1d6981Smrg <title><type>STRING8</type></title> 1196ea1d6981Smrg <indexterm zone="Data_Types:STRING8" significance="preferred"><primary>STRING8</primary></indexterm> 1197ea1d6981Smrg <informaltable frame='none'> 1198ea1d6981Smrg <?dbfo keep-together="always" ?> 1199ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 1200ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 1201ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1202ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 1203ea1d6981Smrg <tbody> 1204ea1d6981Smrg <row><entry><type>STRING8</type>:</entry><entry> <type>LISTofCARD8</type></entry></row> 1205ea1d6981Smrg </tbody> 1206ea1d6981Smrg </tgroup> 1207ea1d6981Smrg </informaltable> 1208ea1d6981Smrg 1209ea1d6981Smrg <para> 1210ea1d6981SmrgThis is a counted list of 1-byte character codes, typically 1211ea1d6981Smrgencoded in <acronym>ISO</acronym> 8859-1. A character code 1212ea1d6981Smrg<quote><literal>c</literal></quote> is equivalent to a 1213ea1d6981Smrg<link linkend="Data_Types:CHAR2B"><type>CHAR2B</type></link> structure whose <structfield>BYTE1</structfield> 1214ea1d6981Smrgis zero and whose <structfield>BYTE2</structfield> is 1215ea1d6981Smrg<quote><literal>c</literal></quote>. 1216ea1d6981Smrg </para> 1217ea1d6981Smrg 1218ea1d6981Smrg</section> 1219ea1d6981Smrg 1220ea1d6981Smrg<section id="Data_Types:TIMESTAMP"> 1221ea1d6981Smrg <title><type>TIMESTAMP</type></title> 1222ea1d6981Smrg <indexterm zone="Data_Types:TIMESTAMP" significance="preferred"><primary>TIMESTAMP</primary></indexterm> 1223ea1d6981Smrg <informaltable frame='none'> 1224ea1d6981Smrg <?dbfo keep-together="always" ?> 1225ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 1226ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 1227ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1228ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 1229ea1d6981Smrg <tbody> 1230ea1d6981Smrg <row><entry><type>TIMESTAMP</type>:</entry><entry> <type>CARD32</type></entry></row> 1231ea1d6981Smrg </tbody> 1232ea1d6981Smrg </tgroup> 1233ea1d6981Smrg </informaltable> 1234ea1d6981Smrg 1235ea1d6981Smrg <para> 1236ea1d6981SmrgThis is the number of milliseconds that have passed since a 1237ea1d6981Smrgserver-dependent origin. It is provided in errors and events and is 1238ea1d6981Smrgpermitted to wrap. 1239ea1d6981Smrg </para> 1240ea1d6981Smrg</section> 1241ea1d6981Smrg 1242ea1d6981Smrg<section id="Data_Types:XCHARINFO"> 1243ea1d6981Smrg <title><type>XCHARINFO</type></title> 1244ea1d6981Smrg <indexterm zone="Data_Types:XCHARINFO" significance="preferred"><primary>XCHARINFO</primary></indexterm> 1245ea1d6981Smrg <informaltable frame='none'> 1246ea1d6981Smrg <?dbfo keep-together="always" ?> 1247ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 1248ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 1249ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1250ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 1251ea1d6981Smrg <tbody> 1252ea1d6981Smrg <row><entry morerows='3'><type>XCHARINFO</type>:</entry> 1253ea1d6981Smrg <entry>[ <structfield>lbearing</structfield>, <structfield>rbearing</structfield>:</entry><entry><type>INT16</type>,</entry></row> 1254ea1d6981Smrg <row><entry> <structfield>width</structfield>:</entry><entry><type>INT16</type>,</entry></row> 1255ea1d6981Smrg <row><entry> <structfield>ascent</structfield>, <structfield>descent</structfield>:</entry><entry><type>INT16</type>,</entry></row> 1256ea1d6981Smrg <row><entry> <structfield>attributes</structfield>:</entry><entry><type>CARD16</type> ]</entry></row> 1257ea1d6981Smrg </tbody> 1258ea1d6981Smrg </tgroup> 1259ea1d6981Smrg </informaltable> 1260ea1d6981Smrg 1261ea1d6981Smrg <para> 1262ea1d6981SmrgThis structure specifies the ink extents and horizontal escapement 1263ea1d6981Smrg(also known as the set- or logical width) of an individual 1264ea1d6981Smrgcharacter. The first five values represent directed distances in 1265ea1d6981Smrga coordinate system whose origin is aligned with the lower-left 1266ea1d6981Smrgedge of the left-most pixel of the glyph baseline (i.e. the 1267ea1d6981Smrgbaseline falls between two pixels as shown in Figure 3-1 of the 1268ea1d6981Smrg<citetitle>Bitmap Distribution Format 2.1</citetitle> Consortium standard 1269ea1d6981Smrg<xref linkend="References:bdf-spec"/>). 1270ea1d6981Smrg </para> 1271ea1d6981Smrg <para> 1272ea1d6981SmrgThe <structfield>LBEARING</structfield> field specifies the 1273ea1d6981Smrgdirected distance measured to the 1274ea1d6981Smrgright from the origin to the left edge of the left-most inked 1275ea1d6981Smrgpixel in the glyph. 1276ea1d6981Smrg </para> 1277ea1d6981Smrg <para> 1278ea1d6981SmrgThe <structfield>RBEARING</structfield> field specifies the 1279ea1d6981Smrgdirected distance (measured to 1280ea1d6981Smrgthe right) from the origin to the right edge of the right-most 1281ea1d6981Smrginked pixel in the glyph. 1282ea1d6981Smrg </para> 1283ea1d6981Smrg <para> 1284ea1d6981SmrgThe <structfield>WIDTH</structfield> field specifies the 1285ea1d6981Smrgdirected distance (measured to the 1286ea1d6981Smrgright) from the origin to the position where the next character 1287ea1d6981Smrgshould appear (called the <firstterm>escapement point</firstterm>). This 1288ea1d6981Smrgdistance includes any whitespace used for intercharacter padding and is 1289ea1d6981Smrgalso referred to as the <firstterm>logical width</firstterm> or 1290ea1d6981Smrg<firstterm>horizontal escapement</firstterm>. 1291ea1d6981Smrg<indexterm zone="Data_Types:XCHARINFO" significance="preferred"><primary>horizontal escapement</primary></indexterm> 1292ea1d6981Smrg </para> 1293ea1d6981Smrg <para> 1294ea1d6981SmrgThe <structfield>ASCENT</structfield> field specifies the 1295ea1d6981Smrgdirected distance (measured up) 1296ea1d6981Smrgfrom the baseline to the top edge of the top-most inked pixel 1297ea1d6981Smrgin the glyph. 1298ea1d6981Smrg </para> 1299ea1d6981Smrg <para> 1300ea1d6981SmrgThe <structfield>DESCENT</structfield> field specifies the 1301ea1d6981Smrgdirected distance (measured 1302ea1d6981Smrgdown) from the baseline to the bottom edge of the bottom-most 1303ea1d6981Smrginked pixel. 1304ea1d6981Smrg </para> 1305ea1d6981Smrg <para> 1306ea1d6981SmrgThe <structfield>ATTRIBUTES</structfield> field specifies 1307ea1d6981Smrgglyph-specific information that 1308ea1d6981Smrgis passed through the application. If this value is not being 1309ea1d6981Smrgused, it should be zero. 1310ea1d6981Smrg </para> 1311ea1d6981Smrg <para> 1312ea1d6981SmrgThe ink bounding box of a glyph is defined to be the smallest 1313ea1d6981Smrgrectangle that encloses all of the inked pixels. This box has 1314ea1d6981Smrga width of 1315ea1d6981Smrg<structfield>RBEARING</structfield> − <structfield>LBEARING</structfield> 1316ea1d6981Smrgpixels and a height of 1317ea1d6981Smrg<structfield>ASCENT</structfield> + <structfield>DESCENT</structfield> pixels. 1318ea1d6981Smrg </para> 1319ea1d6981Smrg</section> 1320ea1d6981Smrg 1321ea1d6981Smrg<section id="Data_Types:XFONTINFO"> 1322ea1d6981Smrg <title><type>XFONTINFO</type></title> 1323ea1d6981Smrg <indexterm zone="Data_Types:XFONTINFO" significance="preferred"><primary>XFONTINFO</primary></indexterm> 1324ea1d6981Smrg <informaltable frame='none'> 1325ea1d6981Smrg <?dbfo keep-together="always" ?> 1326ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 1327ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 1328ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1329ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 1330ea1d6981Smrg <tbody> 1331ea1d6981Smrg <row><entry morerows='8'><type>XFONTINFO</type>:</entry> 1332ea1d6981Smrg <entry>[ <structfield>flags</structfield>:</entry><entry><type>CARD32</type>,</entry></row> 1333ea1d6981Smrg <row><entry> <structfield>drawing-direction</structfield>:</entry><entry>{ <constant>LeftToRight</constant>, <constant>RightToLeft</constant> }</entry></row> 1334ea1d6981Smrg <row><entry> <structfield>char-range</structfield>:</entry><entry><link linkend="Data_Types:RANGE"><type>RANGE</type></link>,</entry></row> 1335ea1d6981Smrg <row><entry> <structfield>default-char</structfield>:</entry><entry><link linkend="Data_Types:CHAR2B"><type>CHAR2B</type></link>,</entry></row> 1336ea1d6981Smrg <row><entry> <structfield>min-bounds</structfield>:</entry><entry><link linkend="Data_Types:XCHARINFO"><type>XCHARINFO</type></link>,</entry></row> 1337ea1d6981Smrg <row><entry> <structfield>max-bounds</structfield>:</entry><entry><link linkend="Data_Types:XCHARINFO"><type>XCHARINFO</type></link>,</entry></row> 1338ea1d6981Smrg <row><entry> <structfield>font-ascent</structfield>:</entry><entry><type>INT16</type>,</entry></row> 1339ea1d6981Smrg <row><entry> <structfield>font-descent</structfield>:</entry><entry><type>INT16</type>,</entry></row> 1340ea1d6981Smrg <row><entry> <structfield>properties</structfield>:</entry><entry><link linkend="Data_Types:PROPINFO"><type>PROPINFO</type></link> ]</entry></row> 1341ea1d6981Smrg </tbody> 1342ea1d6981Smrg </tgroup> 1343ea1d6981Smrg </informaltable> 1344ea1d6981Smrg <para> 1345ea1d6981SmrgThis structure specifies attributes related to the font as a 1346ea1d6981Smrgwhole. 1347ea1d6981Smrg </para> 1348ea1d6981Smrg <para> 1349ea1d6981SmrgThe <structfield>FLAGS</structfield> field is a bit mask containing zero 1350ea1d6981Smrgor more of the following boolean values (unspecified bits must be zero): 1351ea1d6981Smrg 1352ea1d6981Smrg <informaltable frame='none'> 1353ea1d6981Smrg <?dbfo keep-together="always" ?> 1354ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 1355ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 1356ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1357ea1d6981Smrg <tbody> 1358ea1d6981Smrg <row><entry><constant>AllCharactersExist</constant></entry><entry><literal>(1 << 0)</literal></entry></row> 1359ea1d6981Smrg <row><entry><constant>InkInside</constant></entry><entry><literal>(1 << 1)</literal></entry></row> 1360ea1d6981Smrg <row><entry><constant>HorizontalOverlap</constant></entry><entry><literal>(1 << 2)</literal></entry></row> 1361ea1d6981Smrg </tbody> 1362ea1d6981Smrg </tgroup> 1363ea1d6981Smrg </informaltable> 1364ea1d6981Smrg 1365ea1d6981Smrgwhich have the following meanings: 1366ea1d6981Smrg<variablelist> 1367ea1d6981Smrg <varlistentry id="Constant:AllCharactersExist"> 1368ea1d6981Smrg <term><constant>AllCharactersExist</constant></term> 1369ea1d6981Smrg <listitem> 1370ea1d6981Smrg <indexterm zone="Constant:AllCharactersExist" significance="preferred"><primary>AllCharactersExist</primary></indexterm> 1371ea1d6981Smrg <para> 1372ea1d6981SmrgIf this bit is set, all of the characters in the range given by 1373ea1d6981Smrg<structfield>CHAR-RANGE</structfield> have glyphs encoded in 1374ea1d6981Smrgthe font. If this bit is clear, some of the characters 1375ea1d6981Smrgmay not have encoded glyphs. 1376ea1d6981Smrg </para> 1377ea1d6981Smrg </listitem> 1378ea1d6981Smrg </varlistentry> 1379ea1d6981Smrg <varlistentry id="Constant:InkInside"> 1380ea1d6981Smrg <term><constant>InkInside</constant></term> 1381ea1d6981Smrg <listitem> 1382ea1d6981Smrg <indexterm zone="Constant:InkInside" significance="preferred"><primary>InkInside</primary></indexterm> 1383ea1d6981Smrg <para> 1384ea1d6981SmrgIf this bit is set, the inked pixels of each glyph 1385ea1d6981Smrgfall within the rectangle described by the font's ascent, 1386ea1d6981Smrgdescent, origin, and the glyph's escapement point. If 1387ea1d6981Smrgthis bit is clear, there may be glyphs whose ink extends 1388ea1d6981Smrgoutside this rectangle. 1389ea1d6981Smrg </para> 1390ea1d6981Smrg </listitem> 1391ea1d6981Smrg </varlistentry> 1392ea1d6981Smrg <varlistentry id="Constant:HorizontalOverlap"> 1393ea1d6981Smrg <term><constant>HorizontalOverlap</constant></term> 1394ea1d6981Smrg <listitem> 1395ea1d6981Smrg <indexterm zone="Constant:HorizontalOverlap" significance="preferred"><primary>HorizontalOverlap</primary></indexterm> 1396ea1d6981Smrg <para> 1397ea1d6981SmrgIf this bit is set, the two ink bounding 1398ea1d6981Smrgboxes (smallest rectangle enclosing the inked pixels) of 1399ea1d6981Smrgsome pairs of glyphs in the font may overlap when displayed 1400ea1d6981Smrgside-by-side (i.e. the second character is imaged at the 1401ea1d6981Smrgescapement point of the first) on a common baseline. If 1402ea1d6981Smrgthis bit is clear, there are no pairs of glyphs whose ink 1403ea1d6981Smrgbounding boxes overlap. 1404ea1d6981Smrg </para> 1405ea1d6981Smrg </listitem> 1406ea1d6981Smrg </varlistentry> 1407ea1d6981Smrg</variablelist> 1408ea1d6981Smrg</para> 1409ea1d6981Smrg<para id="Data_Types:XFONTINFO.DRAWING-DIRECTION"> 1410ea1d6981Smrg <indexterm zone="Data_Types:XFONTINFO.DRAWING-DIRECTION" significance="preferred"><primary>LeftToRight</primary></indexterm> 1411ea1d6981Smrg <indexterm zone="Data_Types:XFONTINFO.DRAWING-DIRECTION" significance="preferred"><primary>RightToLeft</primary></indexterm> 1412ea1d6981SmrgThe <structfield>DRAWING-DIRECTION</structfield> field contains a hint 1413ea1d6981Smrgindicating whether most of the character metrics have a positive (or 1414ea1d6981Smrg<quote><constant>LeftToRight</constant></quote>) logical width or a 1415ea1d6981Smrgnegative (<quote><constant>RightToLeft</constant></quote>) logical width. It 1416ea1d6981Smrgcontains the following alternate values: 1417ea1d6981Smrg <informaltable frame='none'> 1418ea1d6981Smrg <?dbfo keep-together="always" ?> 1419ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 1420ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 1421ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1422ea1d6981Smrg <tbody> 1423ea1d6981Smrg <row><entry><constant>LeftToRight</constant></entry><entry><literal>0</literal></entry></row> 1424ea1d6981Smrg <row><entry><constant>RightToLeft</constant></entry><entry><literal>1</literal></entry></row> 1425ea1d6981Smrg </tbody> 1426ea1d6981Smrg </tgroup> 1427ea1d6981Smrg </informaltable> 1428ea1d6981Smrg</para> 1429ea1d6981Smrg<para> 1430ea1d6981SmrgThe <structfield>CHAR-RANGE.MIN-CHAR</structfield> 1431ea1d6981Smrgand <structfield>CHAR-RANGE.MAX-CHAR</structfield> fields specify the 1432ea1d6981Smrgfirst and last character codes that have glyphs encoded in this font. 1433ea1d6981SmrgAll fonts must have at least one encoded glyph (in which case the 1434ea1d6981Smrg<structfield>MIN-CHAR</structfield> and <structfield>MAX-CHAR</structfield> 1435ea1d6981Smrgare equal), but are not required to have glyphs 1436ea1d6981Smrgencoded at all positions between the first and last characters. 1437ea1d6981Smrg</para> 1438ea1d6981Smrg<para> 1439ea1d6981SmrgThe <structfield>DEFAULT-CHAR</structfield> field specifies 1440ea1d6981Smrgthe character code of the glyph 1441ea1d6981Smrgthat the client should substitute for unencoded characters. Requests 1442ea1d6981Smrgfor extents or bitmaps for an unencoded character generate zero-filled 1443ea1d6981Smrgmetrics and a zero-length glyph bitmap, respectively. 1444ea1d6981Smrg</para> 1445ea1d6981Smrg<para> 1446ea1d6981SmrgThe <structfield>MIN-BOUNDS</structfield> and 1447ea1d6981Smrg<structfield>MAX-BOUNDS</structfield> fields contain the minimum and maximum 1448ea1d6981Smrgvalues of each of the extents field of all encoded characters in the 1449ea1d6981Smrgfont (i.e. non-existent characters are ignored). 1450ea1d6981Smrg</para> 1451ea1d6981Smrg<para> 1452ea1d6981SmrgThe <structfield>FONT-ASCENT</structfield> and 1453ea1d6981Smrg<structfield>FONT-DESCENT</structfield> fields specify the font designer's 1454ea1d6981Smrglogical height of the font, above and below the baseline, 1455ea1d6981Smrgrespectively. The sum of the two values is often used as the 1456ea1d6981Smrgvertical line spacing of the font. Individual glyphs are permitted 1457ea1d6981Smrgto have ascents and descents that are greater than these values. 1458ea1d6981Smrg</para> 1459ea1d6981Smrg<para> 1460ea1d6981SmrgThe <structfield>PROPERTIES</structfield> field contains the 1461ea1d6981Smrgproperty data associated with this font. 1462ea1d6981Smrg</para> 1463ea1d6981Smrg<para> 1464ea1d6981SmrgThis structure is padded to 32-bit alignment. 1465ea1d6981Smrg</para> 1466ea1d6981Smrg</section> 1467ea1d6981Smrg</section> 1468ea1d6981Smrg 1469ea1d6981Smrg<section id='Requests'> 1470ea1d6981Smrg<title>Requests</title> 1471ea1d6981Smrg<!-- .XS --> 1472ea1d6981Smrg<!-- (SN Requests --> 1473ea1d6981Smrg<!-- .XE --> 1474ea1d6981Smrg<para> 1475ea1d6981SmrgThis section describes the requests that may be sent by the client and the 1476ea1d6981Smrgreplies or errors that are generated in response. Versions of the protocol 1477ea1d6981Smrgwith the same major version are required to be upward-compatible. 1478ea1d6981Smrg</para> 1479ea1d6981Smrg<para> 1480ea1d6981SmrgEvery request on a given connection is implicitly assigned a sequence number, 1481ea1d6981Smrgstarting with 1, that is used in replies, error, and events. Servers are 1482ea1d6981Smrgrequired to generate replies and errors in the order in which the corresponding 1483ea1d6981Smrgrequests are received. Servers are permitted to add or remove fonts to the 1484ea1d6981Smrglist visible to the client between any two requests, but requests must be 1485ea1d6981Smrgprocessed atomically. Each request packet is at least 4 bytes long and 1486ea1d6981Smrgcontains the following fields: 1487ea1d6981Smrg <informaltable frame='none'> 1488ea1d6981Smrg <?dbfo keep-together="always" ?> 1489ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 1490ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 1491ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1492ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 1493ea1d6981Smrg <tbody> 1494ea1d6981Smrg <row><entry><parameter>major-opcode</parameter>:</entry><entry><type>CARD8</type></entry></row> 1495ea1d6981Smrg <row><entry><parameter>minor-opcode</parameter>:</entry><entry><type>CARD8</type></entry></row> 1496ea1d6981Smrg <row><entry><parameter>length</parameter>:</entry><entry><type>CARD16</type></entry></row> 1497ea1d6981Smrg </tbody> 1498ea1d6981Smrg </tgroup> 1499ea1d6981Smrg </informaltable> 1500ea1d6981Smrg</para> 1501ea1d6981Smrg<para> 1502ea1d6981Smrg 1503ea1d6981SmrgThe <parameter>MAJOR-OPCODE</parameter> specifies which core request or 1504ea1d6981Smrgextension package this packet represents. If the 1505ea1d6981Smrg<parameter>MAJOR-OPCODE</parameter> corresponds to a core request, the 1506ea1d6981Smrg<parameter>MINOR-OPCODE</parameter> contains 8 bits of request-specific data. 1507ea1d6981SmrgOtherwise, the <parameter>MINOR-OPCODE</parameter> specifies which extension 1508ea1d6981Smrgrequest this packet represents. The <parameter>LENGTH</parameter> field 1509ea1d6981Smrgspecifies the number of 4-byte units contained within the packet 1510ea1d6981Smrgand must be at least one. If this field contains a value greater than one it 1511ea1d6981Smrgis followed by (<parameter>LENGTH</parameter> - 1) * 4 bytes 1512ea1d6981Smrgof request-specific data. Unless 1513ea1d6981Smrgotherwise specified, unused bytes are not required to be zero. 1514ea1d6981Smrg</para> 1515ea1d6981Smrg<para> 1516ea1d6981SmrgIf a request packet contains too little or too much data, the server returns 1517ea1d6981Smrga <link linkend="Errors:Length"><errorname>Length</errorname></link> error. 1518ea1d6981SmrgIf the server runs out of internal 1519ea1d6981Smrgresources (such as memory) while processing a request, it returns an 1520ea1d6981Smrg<link linkend="Errors:Alloc"><errorname>Alloc</errorname></link> error. 1521ea1d6981SmrgIf a server is deficient (and therefore non-compliant) and is unable to 1522ea1d6981Smrgprocess a request, it may return an 1523ea1d6981Smrg<link linkend="Errors:Implementation"><errorname>Implementation</errorname></link> error. 1524ea1d6981SmrgIf a client uses an extension request without previously having issued a 1525ea1d6981Smrg<link linkend="Requests:QueryExtension"><function>QueryExtension</function></link> 1526ea1d6981Smrgrequest for that extension, the server responds with a 1527ea1d6981Smrg<link linkend="Errors:Request"><errorname>Request</errorname></link> 1528ea1d6981Smrgerror. If the server encounters a request with an unknown 1529ea1d6981Smrg<parameter>MAJOR-OPCODE</parameter> or <parameter>MINOR-OPCODE</parameter>, 1530ea1d6981Smrgit responds with a 1531ea1d6981Smrg<link linkend="Errors:Request"><errorname>Request</errorname></link> 1532ea1d6981Smrgerror. 1533ea1d6981SmrgAt most one error is generated per request. If more than one error condition 1534ea1d6981Smrgis encountered in processing a requests, the choice of which error is returned 1535ea1d6981Smrgis server-dependent. 1536ea1d6981Smrg</para> 1537ea1d6981Smrg<para> 1538ea1d6981SmrgCore requests have <parameter>MAJOR-OPCODE</parameter> values between 0 and 1539ea1d6981Smrg127, inclusive. Extension requests have <parameter>MAJOR-OPCODE</parameter> 1540ea1d6981Smrgvalues between 128 and 255, inclusive, that are assigned by by the server. 1541ea1d6981SmrgAll <parameter>MINOR-OPCODE</parameter> values in extension requests are 1542ea1d6981Smrgbetween 0 and 255, inclusive. 1543ea1d6981Smrg</para> 1544ea1d6981Smrg<para> 1545ea1d6981SmrgEach reply is at least 8 bytes long and contains the following fields: 1546ea1d6981Smrg <informaltable frame='none'> 1547ea1d6981Smrg <?dbfo keep-together="always" ?> 1548ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 1549ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 1550ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1551ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 1552ea1d6981Smrg <tbody> 1553ea1d6981Smrg <row><entry><parameter>type</parameter>:</entry><entry><type>CARD8</type></entry><entry>value of 0</entry></row> 1554ea1d6981Smrg <row><entry><parameter>data-or-unused</parameter>:</entry><entry><type>CARD8</type></entry></row> 1555ea1d6981Smrg <row><entry><parameter>sequence-number</parameter>:</entry><entry><type>CARD16</type></entry></row> 1556ea1d6981Smrg <row><entry><parameter>length</parameter>:</entry><entry><type>CARD32</type></entry></row> 1557ea1d6981Smrg </tbody> 1558ea1d6981Smrg </tgroup> 1559ea1d6981Smrg </informaltable> 1560ea1d6981Smrg</para> 1561ea1d6981Smrg<para> 1562ea1d6981SmrgThe <parameter>TYPE</parameter> field has a value of zero. 1563ea1d6981SmrgThe <parameter>DATA-OR-UNUSED</parameter> field may be used to 1564ea1d6981Smrgencode one byte of reply-specific data (see 1565ea1d6981Smrg<link linkend="Encoding::Requests">Section 5.2 on request encoding</link>). 1566ea1d6981SmrgThe least-significant 16 bits of the sequence number of the request that 1567ea1d6981Smrggenerated the reply are stored in the <parameter>SEQUENCE-NUMBER</parameter> 1568ea1d6981Smrgfield. The <parameter>LENGTH</parameter> field specifies the number of 1569ea1d6981Smrg4-byte units in this reply packet, including the fields described above, 1570ea1d6981Smrgand must be at least two. If <parameter>LENGTH</parameter> is greater 1571ea1d6981Smrgthan two, the fields described above are followed by 1572ea1d6981Smrg(<parameter>LENGTH</parameter> - 2) * 4 bytes of additional data. 1573ea1d6981Smrg</para> 1574ea1d6981Smrg<para> 1575ea1d6981SmrgRequests that have replies are described using the following syntax: 1576ea1d6981Smrg <blockquote><para> 1577ea1d6981Smrg <emphasis role="bold"><function>RequestName</function></emphasis> 1578ea1d6981Smrg <informaltable frame='none'> 1579ea1d6981Smrg <?dbfo keep-together="always" ?> 1580ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 1581ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 1582ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1583ea1d6981Smrg <tbody> 1584ea1d6981Smrg <row><entry><parameter>arg1</parameter>:</entry><entry><type>type1</type></entry></row> 1585ea1d6981Smrg <row><entry><parameter>arg2</parameter>:</entry><entry><type>type2</type></entry></row> 1586ea1d6981Smrg <row><entry> ...</entry></row> 1587ea1d6981Smrg <row><entry><parameter>argN</parameter>:</entry><entry><type>typeN</type></entry></row> 1588ea1d6981Smrg <row><entry> ▶</entry></row> 1589ea1d6981Smrg <row><entry><parameter>result1</parameter>:</entry><entry><type>type1</type></entry></row> 1590ea1d6981Smrg <row><entry><parameter>result2</parameter>:</entry><entry><type>type2</type></entry></row> 1591ea1d6981Smrg <row><entry> ...</entry></row> 1592ea1d6981Smrg <row rowsep="1"><entry><parameter>resultM</parameter>:</entry><entry><type>typeM</type></entry></row> 1593ea1d6981Smrg <row><entry>Errors:</entry><entry><errorname>kind1</errorname>, <errorname>kind2</errorname> ..., <errorname>kindK</errorname></entry></row> 1594ea1d6981Smrg </tbody> 1595ea1d6981Smrg </tgroup> 1596ea1d6981Smrg </informaltable> 1597ea1d6981Smrg Description 1598ea1d6981Smrg </para></blockquote> 1599ea1d6981Smrg</para> 1600ea1d6981Smrg<para> 1601ea1d6981SmrgIf a request does not generate a reply, the ▶ and result lines are 1602ea1d6981Smrgomitted. If a request may generate multiple replies, the ▶ is replaced by 1603ea1d6981Smrga ▶+. In the authorization data exchanges in the initial connection setup 1604ea1d6981Smrgand the CreateAC request, ◀ indicates data sent by the client in response 1605ea1d6981Smrgto data sent by the server. 1606ea1d6981Smrg</para> 1607ea1d6981Smrg<para> 1608ea1d6981SmrgThe protocol begins with the establishment of a connection over a 1609ea1d6981Smrgmutually-understood virtual stream: 1610ea1d6981Smrg</para> 1611ea1d6981Smrg 1612ea1d6981Smrg<section id="Requests:open_connection"> 1613ea1d6981Smrg <title>open connection</title> 1614ea1d6981Smrg <indexterm zone="Requests:open_connection" significance="preferred"><primary>open connection</primary></indexterm> 1615ea1d6981Smrg <informaltable frame='none'> 1616ea1d6981Smrg <?dbfo keep-together="always" ?> 1617ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 1618ea1d6981Smrg <colspec colname='c1' colwidth='2.0*'/> 1619ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1620ea1d6981Smrg <tbody> 1621ea1d6981Smrg <row><entry><parameter>byte-order</parameter>:</entry><entry><link linkend="Data_Types:BYTE"><type>BYTE</type></link></entry></row> 1622ea1d6981Smrg <row><entry><parameter>client-major-protocol-version</parameter>:</entry><entry><type>CARD16</type></entry></row> 1623ea1d6981Smrg <row><entry><parameter>client-minor-protocol-version</parameter>:</entry><entry><type>CARD16</type></entry></row> 1624ea1d6981Smrg <row><entry><parameter>authorization-protocols</parameter>:</entry><entry><link linkend="Data_Types:AUTH"><type>LISTofAUTH</type></link></entry></row> 1625ea1d6981Smrg </tbody> 1626ea1d6981Smrg </tgroup> 1627ea1d6981Smrg </informaltable> 1628ea1d6981Smrg<para> 1629ea1d6981SmrgThe initial byte of the connection specifies the 1630ea1d6981Smrg<parameter>BYTE-ORDER</parameter> in 1631ea1d6981Smrgwhich subsequent 16-bit and 32-bit numeric values are to be 1632ea1d6981Smrgtransmitted. The octal value <literal>102</literal> 1633ea1d6981Smrg(<acronym>ASCII</acronym> uppercase <quote><literal>B</literal></quote>) 1634ea1d6981Smrgindicates that the most-significant byte is to be transmitted 1635ea1d6981Smrgfirst; the octal value <literal>154</literal> 1636ea1d6981Smrg(<acronym>ASCII</acronym> lowercase <quote><literal>l</literal></quote>) 1637ea1d6981Smrgindicates that the least-significant byte is to be transmitted first. 1638ea1d6981SmrgIf any other value is encountered the server closes the 1639ea1d6981Smrgconnection without any response. 1640ea1d6981Smrg</para> 1641ea1d6981Smrg <para> 1642ea1d6981SmrgThe <parameter>CLIENT-MAJOR-PROTOCOL-VERSION</parameter> and 1643ea1d6981Smrg<parameter>CLIENT-MINOR-PROTOCOL-VERSION</parameter> specify 1644ea1d6981Smrgwhich version of the 1645ea1d6981Smrgfont service protocol the client would like to use. If the 1646ea1d6981Smrgclient can support multiple versions, the highest version 1647ea1d6981Smrgshould be given. This version of the protocol has a 1648ea1d6981Smrgmajor version of 2 and a minor version of 0. 1649ea1d6981Smrg </para> 1650ea1d6981Smrg <para> 1651ea1d6981SmrgThe <parameter>AUTHORIZATION-PROTOCOLS</parameter> 1652ea1d6981Smrgcontains a list of protocol names and 1653ea1d6981Smrgoptional initial data for which the client can provide 1654ea1d6981Smrginformation. The server may use this to determine which 1655ea1d6981Smrgprotocol to use or as part of the initial exchange of 1656ea1d6981Smrgauthorization data. 1657ea1d6981Smrg </para> 1658ea1d6981Smrg <informaltable frame='none'> 1659ea1d6981Smrg <?dbfo keep-together="always" ?> 1660ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 1661ea1d6981Smrg <colspec colname='c1' colwidth='2.0*'/> 1662ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1663ea1d6981Smrg <tbody> 1664ea1d6981Smrg <row><entry>▶</entry></row> 1665ea1d6981Smrg <row><entry><parameter>status</parameter>:</entry><entry>{ <constant>Success</constant>, <constant>Continue</constant>, 1666ea1d6981Smrg <constant>Busy</constant>, <constant>Denied</constant> }</entry></row> 1667ea1d6981Smrg <row><entry><parameter>server-major-protocol-version</parameter>:</entry><entry><type>CARD16</type></entry></row> 1668ea1d6981Smrg <row><entry><parameter>server-minor-protocol-version</parameter>:</entry><entry><type>CARD16</type></entry></row> 1669ea1d6981Smrg <row><entry><parameter>alternate-servers-hint</parameter>:</entry><entry><link linkend="Data_Types:ALTERNATESERVER"><type>LISTofALTERNATESERVER</type></link></entry></row> 1670ea1d6981Smrg <row><entry><parameter>authorization-index</parameter>:</entry><entry><type>CARD8</type></entry></row> 1671ea1d6981Smrg <row><entry><parameter>authorization-data</parameter>:</entry><entry><link linkend="Data_Types:BYTE"><type>LISTofBYTE</type></link></entry></row> 1672ea1d6981Smrg </tbody> 1673ea1d6981Smrg </tgroup> 1674ea1d6981Smrg </informaltable> 1675ea1d6981Smrg <para> 1676ea1d6981SmrgThe <parameter>SERVER-MAJOR-PROTOCOL-VERSION</parameter> and 1677ea1d6981Smrg<parameter>SERVER-MINOR-PROTOCOL-VERSION</parameter> specify 1678ea1d6981Smrgthe version of the font 1679ea1d6981Smrgservice protocol that the server expects from the client. If 1680ea1d6981Smrgthe server supports the version specified by the client, this 1681ea1d6981Smrgversion number should be returned. If the client has 1682ea1d6981Smrgrequested a higher version than is supported by the server, 1683ea1d6981Smrgthe server's highest version should be returned. Otherwise, 1684ea1d6981Smrgif the client has requested a lower version than is supported 1685ea1d6981Smrgby the server, the server's lowest version should be returned. 1686ea1d6981SmrgIt is the client's responsibility to decide whether or not it 1687ea1d6981Smrgcan match this version of the protocol. 1688ea1d6981Smrg </para> 1689ea1d6981Smrg <para> 1690ea1d6981SmrgThe <parameter>ALTERNATE-SERVERS-HINT</parameter> 1691ea1d6981Smrgis a list of other font servers 1692ea1d6981Smrgthat may have related sets of fonts (determined by means 1693ea1d6981Smrgoutside this protocol, typically by the system administrator). 1694ea1d6981SmrgClients may choose to contact these font servers if the 1695ea1d6981Smrgconnection is rejected or lost. 1696ea1d6981Smrg </para> 1697ea1d6981Smrg <para> 1698ea1d6981SmrgThe <parameter>STATUS</parameter> field indicates whether the server accepted, 1699ea1d6981Smrgrejected, or would like more information about the connection. 1700ea1d6981SmrgIt has one of the following alternate values: 1701ea1d6981Smrg <informaltable frame='none'> 1702ea1d6981Smrg <?dbfo keep-together="always" ?> 1703ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 1704ea1d6981Smrg <colspec colname='c1' colwidth='2.0*'/> 1705ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1706ea1d6981Smrg <tbody> 1707ea1d6981Smrg <row><entry><constant>Success</constant></entry><entry><literal>0</literal></entry></row> 1708ea1d6981Smrg <row><entry><constant>Continue</constant></entry><entry><literal>1</literal></entry></row> 1709ea1d6981Smrg <row><entry><constant>Busy</constant></entry><entry><literal>2</literal></entry></row> 1710ea1d6981Smrg <row><entry><constant>Denied</constant></entry><entry><literal>3</literal></entry></row> 1711ea1d6981Smrg </tbody> 1712ea1d6981Smrg </tgroup> 1713ea1d6981Smrg </informaltable> 1714ea1d6981Smrg </para> 1715ea1d6981Smrg <para> 1716ea1d6981SmrgIf <parameter>STATUS</parameter> is <constant>Denied</constant>, 1717ea1d6981Smrgthe server has rejected the client's authorization information. 1718ea1d6981SmrgIf <parameter>STATUS</parameter> is <constant>Busy</constant>, the server has 1719ea1d6981Smrgsimply decided that it cannot provide fonts to this client at 1720ea1d6981Smrgthis time (it may be able to at a later time). In both cases, 1721ea1d6981Smrg<parameter>AUTHORIZATION-INDEX</parameter> is set to zero, 1722ea1d6981Smrgno authorization-data is 1723ea1d6981Smrgreturned, and the server closes the connection after sending 1724ea1d6981Smrgthe data described so far. 1725ea1d6981Smrg </para> 1726ea1d6981Smrg <para> 1727ea1d6981SmrgOtherwise the <parameter>AUTHORIZATION-INDEX</parameter> is set to the index 1728ea1d6981Smrg(beginning with 1) into the <parameter>AUTHORIZATION-PROTOCOLS</parameter> 1729ea1d6981Smrglist of the protocol that the server will use for this connection. If 1730ea1d6981Smrgthe server does not want to use any of the given protocols, 1731ea1d6981Smrgthis value is set to zero. The <parameter>AUTHORIZATION-DATA</parameter> 1732ea1d6981Smrgfield is used to send back authorization protocol-dependent data to the 1733ea1d6981Smrgclient (such as a challenge, authentication of the server, 1734ea1d6981Smrgetc.). 1735ea1d6981Smrg </para> 1736ea1d6981Smrg<para> 1737ea1d6981SmrgIf <parameter>STATUS</parameter> is <constant>Success</constant>, 1738ea1d6981Smrgthe following section of protocol is omitted. Otherwise, if 1739ea1d6981Smrg<parameter>STATUS</parameter> is <constant>Continue</constant>, 1740ea1d6981Smrgthe server expects 1741ea1d6981Smrgmore authorization data from the client (i.e. the connection 1742ea1d6981Smrgsetup is not finished, so no requests or events may be sent): 1743ea1d6981Smrg <informaltable frame='none'> 1744ea1d6981Smrg <?dbfo keep-together="always" ?> 1745ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 1746ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 1747ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1748ea1d6981Smrg <tbody> 1749ea1d6981Smrg <row><entry>◀</entry></row> 1750ea1d6981Smrg <row><entry><parameter>more-authorization-data</parameter>:</entry><entry><link linkend="Data_Types:STRING8"><type>STRING8</type></link></entry></row> 1751ea1d6981Smrg <row><entry>▶</entry></row> 1752ea1d6981Smrg <row><entry><parameter>status</parameter>:</entry><entry>{ <constant>Success</constant>, <constant>Continue</constant>, <constant>Busy</constant>, <constant>Denied</constant> }</entry></row> 1753ea1d6981Smrg <row><entry><parameter>more-authorization-data</parameter>:</entry><entry><link linkend="Data_Types:BYTE"><type>LISTofBYTE</type></link></entry></row> 1754ea1d6981Smrg </tbody> 1755ea1d6981Smrg </tgroup> 1756ea1d6981Smrg </informaltable> 1757ea1d6981Smrg</para> 1758ea1d6981Smrg<para> 1759ea1d6981SmrgThe values in <parameter>STATUS</parameter> have the same meanings as described 1760ea1d6981Smrgabove. This section of protocol is repeated until the server 1761ea1d6981Smrgeither accepts (sets <parameter>STATUS</parameter> to 1762ea1d6981Smrg<constant>Success</constant>) or rejects (sets <parameter>STATUS</parameter> 1763ea1d6981Smrgto <constant>Denied</constant> or <constant>Busy</constant>) the connection. 1764ea1d6981Smrg</para> 1765ea1d6981Smrg<para> 1766ea1d6981SmrgOnce the connection has been accepted and <parameter>STATUS</parameter> 1767ea1d6981Smrgis <constant>Success</constant>, 1768ea1d6981Smrgan implicit AccessContext is created for the authorization 1769ea1d6981Smrgdata and the protocol continues with the following data sent 1770ea1d6981Smrgfrom the server: 1771ea1d6981Smrg <informaltable frame='none'> 1772ea1d6981Smrg <?dbfo keep-together="always" ?> 1773ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 1774ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 1775ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1776ea1d6981Smrg <tbody> 1777ea1d6981Smrg <row><entry>▶</entry></row> 1778ea1d6981Smrg <row><entry><parameter>remaining-length</parameter>:</entry><entry><type>CARD32</type></entry></row> 1779ea1d6981Smrg <row><entry><parameter>maximum-request-length</parameter>:</entry><entry><type>CARD16</type></entry></row> 1780ea1d6981Smrg <row><entry><parameter>release-number</parameter>:</entry><entry><type>CARD32</type></entry></row> 1781ea1d6981Smrg <row><entry><parameter>vendor</parameter>:</entry><entry><link linkend="Data_Types:STRING8"><type>STRING8</type></link></entry></row> 1782ea1d6981Smrg </tbody> 1783ea1d6981Smrg </tgroup> 1784ea1d6981Smrg </informaltable> 1785ea1d6981Smrg</para> 1786ea1d6981Smrg<para> 1787ea1d6981SmrgThe <parameter>REMAINING-LENGTH</parameter> specifies the length in 4-byte 1788ea1d6981Smrgunits of the remaining data to be transmitted to the client. The 1789ea1d6981Smrg<parameter>MAXIMUM-REQUEST-LENGTH</parameter> specifies the largest request 1790ea1d6981Smrgsize in 4-byte units that is accepted by the server and must have a 1791ea1d6981Smrgvalue of at least 4096. Requests with a length field larger 1792ea1d6981Smrgthan this value are ignored and a 1793ea1d6981Smrg<link linkend="Errors:Length"><errorname>Length</errorname></link> 1794ea1d6981Smrgerror is returned. 1795ea1d6981SmrgThe <parameter>VENDOR</parameter> string specifies the name of the 1796ea1d6981Smrgmanufacturer of the font server. The 1797ea1d6981Smrg<parameter>RELEASE-NUMBER</parameter> specifies the particular 1798ea1d6981Smrgrelease of the server in a manufacturer-dependent manner. 1799ea1d6981Smrg</para> 1800ea1d6981Smrg</section> 1801ea1d6981Smrg<section><title /> 1802ea1d6981Smrg<para> 1803ea1d6981SmrgAfter the connection is established and the setup information has been 1804ea1d6981Smrgexchanged, the client may issue any of requests described below: 1805ea1d6981Smrg</para> 1806ea1d6981Smrg</section> 1807ea1d6981Smrg<section id="Requests:NoOp"> 1808ea1d6981Smrg <title><function>NoOp</function></title> 1809ea1d6981Smrg <indexterm zone="Requests:NoOp" significance="preferred"><primary>NoOp</primary></indexterm> 1810ea1d6981Smrg <informaltable frame='none'> 1811ea1d6981Smrg <?dbfo keep-together="always" ?> 1812ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 1813ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 1814ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1815ea1d6981Smrg <tbody> 1816ea1d6981Smrg <row><entry>Errors:</entry><entry><link linkend="Errors:Alloc"><errorname>Alloc</errorname></link></entry></row> 1817ea1d6981Smrg </tbody> 1818ea1d6981Smrg </tgroup> 1819ea1d6981Smrg </informaltable> 1820ea1d6981Smrg <para> 1821ea1d6981SmrgThis request does nothing. It is typically used in response 1822ea1d6981Smrgto a 1823ea1d6981Smrg<link linkend="Events:KeepAlive"><function>KeepAlive</function></link> 1824ea1d6981Smrgevent. 1825ea1d6981Smrg </para> 1826ea1d6981Smrg</section> 1827ea1d6981Smrg 1828ea1d6981Smrg<section id="Requests:ListExtensions"> 1829ea1d6981Smrg <title><function>ListExtensions</function></title> 1830ea1d6981Smrg <indexterm zone="Requests:ListExtensions" significance="preferred"><primary>ListExtensions</primary></indexterm> 1831ea1d6981Smrg <informaltable frame='none'> 1832ea1d6981Smrg <?dbfo keep-together="always" ?> 1833ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 1834ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 1835ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1836ea1d6981Smrg <tbody> 1837ea1d6981Smrg <row><entry>▶</entry></row> 1838ea1d6981Smrg <row rowsep='1'><entry><parameter>names</parameter>:</entry><entry><link linkend="Data_Types:STRING8"><type>LISTofSTRING8</type></link></entry></row> 1839ea1d6981Smrg <row><entry>Errors:</entry><entry><link linkend="Errors:Alloc"><errorname>Alloc</errorname></link></entry></row> 1840ea1d6981Smrg </tbody> 1841ea1d6981Smrg </tgroup> 1842ea1d6981Smrg </informaltable> 1843ea1d6981Smrg 1844ea1d6981Smrg <para> 1845ea1d6981SmrgThis request returns the names of the extension packages 1846ea1d6981Smrgthat are supported by the server. Extension names are 1847ea1d6981Smrgcase-sensitive and are encoded in <acronym>ISO</acronym> 8859-1. 1848ea1d6981Smrg </para> 1849ea1d6981Smrg 1850ea1d6981Smrg</section> 1851ea1d6981Smrg 1852ea1d6981Smrg<section id="Requests:QueryExtension"> 1853ea1d6981Smrg <title><function>QueryExtension</function></title> 1854ea1d6981Smrg <indexterm zone="Requests:QueryExtension" significance="preferred"><primary>QueryExtension</primary></indexterm> 1855ea1d6981Smrg 1856ea1d6981Smrg <informaltable frame='none'> 1857ea1d6981Smrg <?dbfo keep-together="always" ?> 1858ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 1859ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 1860ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1861ea1d6981Smrg <tbody> 1862ea1d6981Smrg <row><entry><parameter>name</parameter>:</entry><entry><link linkend="Data_Types:STRING8"><type>STRING8</type></link></entry></row> 1863ea1d6981Smrg <row><entry>▶</entry></row> 1864ea1d6981Smrg <row><entry><parameter>present</parameter>:</entry><entry><link linkend="Data_Types:BOOL"><type>BOOL</type></link></entry></row> 1865ea1d6981Smrg <row><entry><parameter>major-version</parameter>:</entry><entry><type>CARD16</type></entry></row> 1866ea1d6981Smrg <row><entry><parameter>minor-version</parameter>:</entry><entry><type>CARD16</type></entry></row> 1867ea1d6981Smrg <row><entry><parameter>major-opcode</parameter>:</entry><entry><type>CARD8</type></entry></row> 1868ea1d6981Smrg <row><entry><parameter>first-event</parameter>:</entry><entry><type>CARD8</type></entry></row> 1869ea1d6981Smrg <row><entry><parameter>number-events</parameter>:</entry><entry><type>CARD8</type></entry></row> 1870ea1d6981Smrg <row><entry><parameter>first-error</parameter>:</entry><entry><type>CARD8</type></entry></row> 1871ea1d6981Smrg <row rowsep='1'><entry><parameter>number-errors</parameter>:</entry><entry><type>CARD8</type></entry></row> 1872ea1d6981Smrg <row><entry>Errors:</entry><entry><link linkend="Errors:Alloc"><errorname>Alloc</errorname></link></entry></row> 1873ea1d6981Smrg </tbody> 1874ea1d6981Smrg </tgroup> 1875ea1d6981Smrg </informaltable> 1876ea1d6981Smrg <para> 1877ea1d6981SmrgThis request determines whether or not the extension package specified by 1878ea1d6981Smrg<parameter>NAME</parameter> (encoded in <acronym>ISO</acronym> 8859-1) is 1879ea1d6981Smrgsupported by the server and that there is sufficient number of major opcode, 1880ea1d6981Smrgevent, and error codes available. If so, then <parameter>PRESENT</parameter> 1881ea1d6981Smrgis set to <constant>True</constant>, <parameter>MAJOR-VERSION</parameter> 1882ea1d6981Smrgand <parameter>MINOR-VERSION</parameter> are set to the 1883ea1d6981Smrgrespective major and minor version numbers of the protocol 1884ea1d6981Smrgthat the server would prefer; <parameter>MAJOR-OPCODE</parameter> is set to 1885ea1d6981Smrgthe value to use in extension requests; <parameter>FIRST-EVENT</parameter> 1886ea1d6981Smrgis set to the value of the first extension-specific event code or zero if the 1887ea1d6981Smrgextension does not have any events; <parameter>NUMBER-EVENTS</parameter> is 1888ea1d6981Smrgset to the number of new events that the event defines; 1889ea1d6981Smrg<parameter>FIRST-ERROR</parameter> 1890ea1d6981Smrgis set to the value of the first extension-specific error code 1891ea1d6981Smrgor zero if the extension does not define any new errors; and 1892ea1d6981Smrg<parameter>NUMBER-ERRORS</parameter> is set to the number of 1893ea1d6981Smrgnew errors the extension defines. 1894ea1d6981Smrg </para> 1895ea1d6981Smrg <para> 1896ea1d6981SmrgOtherwise, <parameter>PRESENT</parameter> is set to 1897ea1d6981Smrg<constant>False</constant> and the remaining fields are 1898ea1d6981Smrgset to zero. 1899ea1d6981Smrg </para> 1900ea1d6981Smrg <para> 1901ea1d6981SmrgThe server is free to return different values to different 1902ea1d6981Smrgclients. Therefore, clients must use this request before 1903ea1d6981Smrgissuing any of the requests in the named extension package or 1904ea1d6981Smrgusing the 1905ea1d6981Smrg<link linkend="Requests:SetEventMask"><function>SetEventMask</function></link> request to express interest in any of 1906ea1d6981Smrgthis extension's events. Otherwise, a 1907ea1d6981Smrg<link linkend="Errors:Request"><errorname>Request</errorname></link> 1908ea1d6981Smrgerror is returned. 1909ea1d6981Smrg </para> 1910ea1d6981Smrg</section> 1911ea1d6981Smrg 1912ea1d6981Smrg<section id="Requests:ListCatalogues"> 1913ea1d6981Smrg <title><function>ListCatalogues</function></title> 1914ea1d6981Smrg <indexterm zone="Requests:ListCatalogues" significance="preferred"><primary>ListCatalogues</primary></indexterm> 1915ea1d6981Smrg 1916ea1d6981Smrg <informaltable frame='none'> 1917ea1d6981Smrg <?dbfo keep-together="always" ?> 1918ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 1919ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 1920ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1921ea1d6981Smrg <tbody> 1922ea1d6981Smrg <row><entry><parameter>pattern</parameter>:</entry><entry><link linkend="Data_Types:STRING8"><type>STRING8</type></link></entry></row> 1923ea1d6981Smrg <row><entry><parameter>max-names</parameter>:</entry><entry><type>CARD32</type></entry></row> 1924ea1d6981Smrg <row><entry>▶+</entry></row> 1925ea1d6981Smrg <row><entry><parameter>replies-following-hint</parameter>:</entry><entry><type>CARD32</type></entry></row> 1926ea1d6981Smrg <row rowsep='1'><entry><parameter>names</parameter>:</entry><entry><link linkend="Data_Types:STRING8"><type>LISTofSTRING8</type></link></entry></row> 1927ea1d6981Smrg <row><entry>Errors:</entry><entry><link linkend="Errors:Alloc"><errorname>Alloc</errorname></link></entry></row> 1928ea1d6981Smrg </tbody> 1929ea1d6981Smrg </tgroup> 1930ea1d6981Smrg </informaltable> 1931ea1d6981Smrg <para> 1932ea1d6981SmrgThis request returns a list of at most <parameter>MAX-NAMES</parameter> names 1933ea1d6981Smrgof collections (called catalogues) of fonts that match 1934ea1d6981Smrgthe specified <parameter>PATTERN</parameter>. In the pattern (which is encoded 1935ea1d6981Smrgin <acronym>ISO</acronym> 8859-1), the 1936ea1d6981Smrg<quote><literal>?</literal></quote> character (octal <literal>77</literal>) 1937ea1d6981Smrgmatches any single character; the 1938ea1d6981Smrg<quote><literal>*</literal></quote> character (octal <literal>52</literal>) 1939ea1d6981Smrgmatches any series of zero or more characters; and alphabetic 1940ea1d6981Smrgcharacters match either upper- or lowercase. The 1941ea1d6981Smrgreturned <parameter>NAMES</parameter> are encoded in 1942ea1d6981Smrg<acronym>ISO</acronym> 8859-1 and may contain 1943ea1d6981Smrgmixed character cases. 1944ea1d6981Smrg </para> 1945ea1d6981Smrg <para> 1946ea1d6981SmrgIf <parameter>PATTERN</parameter> is of zero length or 1947ea1d6981Smrg<parameter>MAX-NAMES</parameter> is equal to zero, 1948ea1d6981Smrgone reply containing a zero-length list of names is returned. 1949ea1d6981SmrgThis may be used to synchronize the client with the server. 1950ea1d6981Smrg </para> 1951ea1d6981Smrg <para> 1952ea1d6981SmrgServers are free to add or remove catalogues to the set returned by 1953ea1d6981Smrg<function>ListCatalogues</function> 1954ea1d6981Smrgbetween any two requests. This request is not 1955ea1d6981Smrgcumulative; repeated uses are processed in isolation and do 1956ea1d6981Smrgresult in an iteration through the list. 1957ea1d6981Smrg </para> 1958ea1d6981Smrg <para> 1959ea1d6981SmrgTo reduce the amount of buffering needed by the server, the 1960ea1d6981Smrglist of names may be split across several reply packets, so 1961ea1d6981Smrglong as the names arrive in the same order that they would 1962ea1d6981Smrghave appeared had they been in a single packet. The 1963ea1d6981Smrg<parameter>REPLIES-FOLLOWING-HINT</parameter> field in all but the last reply 1964ea1d6981Smrgcontains a positive value that specifies the number of 1965ea1d6981Smrgreplies that are likely, but not required, to follow. In the 1966ea1d6981Smrglast reply, which may contain zero or more names, this field 1967ea1d6981Smrgis set to zero. 1968ea1d6981Smrg </para> 1969ea1d6981Smrg</section> 1970ea1d6981Smrg 1971ea1d6981Smrg<section id="Requests:SetCatalogues"> 1972ea1d6981Smrg <title><function>SetCatalogues</function></title> 1973ea1d6981Smrg <indexterm zone="Requests:SetCatalogues" significance="preferred"><primary>SetCatalogues</primary></indexterm> 1974ea1d6981Smrg <informaltable frame='none'> 1975ea1d6981Smrg <?dbfo keep-together="always" ?> 1976ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 1977ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 1978ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 1979ea1d6981Smrg <tbody> 1980ea1d6981Smrg <row rowsep='1'><entry><parameter>names</parameter>:</entry><entry><link linkend="Data_Types:STRING8"><type>LISTofSTRING8</type></link></entry></row> 1981ea1d6981Smrg <row><entry>Errors:</entry><entry><link linkend="Errors:Alloc"><errorname>Alloc</errorname></link>, 1982ea1d6981Smrg<link linkend="Errors:Name"><errorname>Name</errorname></link></entry></row> 1983ea1d6981Smrg </tbody> 1984ea1d6981Smrg </tgroup> 1985ea1d6981Smrg </informaltable> 1986ea1d6981Smrg <para> 1987ea1d6981SmrgThis request sets the list of catalogues whose fonts should be 1988ea1d6981Smrgvisible to the client. The union of the fonts provided by 1989ea1d6981Smrgeach of the named catalogues forms the set of fonts whose 1990ea1d6981Smrgnames match patterns in 1991ea1d6981Smrg<link linkend="Requests:ListFonts"><function>ListFonts</function></link>, 1992ea1d6981Smrg<link linkend="Requests:ListFontsWithXInfo"><function>ListFontsWithXInfo</function></link>, 1993ea1d6981Smrgand 1994ea1d6981Smrg<link linkend="Requests:OpenBitmapFont"><function>OpenBitmapFont</function></link> 1995ea1d6981Smrgrequests. The catalogue names are 1996ea1d6981Smrgcase-insensitive and are encoded in <acronym>ISO</acronym> 8859-1. A zero-length 1997ea1d6981Smrglist resets the client's catalogue list to the 1998ea1d6981Smrgserver-dependent default. 1999ea1d6981Smrg </para> 2000ea1d6981Smrg <para> 2001ea1d6981SmrgIf any of the catalogue names are invalid, a 2002ea1d6981Smrg<link linkend="Errors:Name"><errorname>Name</errorname></link> 2003ea1d6981Smrgerror is returned and the request is ignored. 2004ea1d6981Smrg </para> 2005ea1d6981Smrg</section> 2006ea1d6981Smrg 2007ea1d6981Smrg<section id="Requests:GetCatalogues"> 2008ea1d6981Smrg <title><function>GetCatalogues</function></title> 2009ea1d6981Smrg <indexterm zone="Requests:GetCatalogues" significance="preferred"><primary>GetCatalogues</primary></indexterm> 2010ea1d6981Smrg <informaltable frame='none'> 2011ea1d6981Smrg <?dbfo keep-together="always" ?> 2012ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 2013ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 2014ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 2015ea1d6981Smrg <tbody> 2016ea1d6981Smrg <row><entry>▶</entry></row> 2017ea1d6981Smrg <row rowsep='1'><entry><parameter>names</parameter>:</entry><entry><link linkend="Data_Types:STRING8"><type>LISTofSTRING8</type></link></entry></row> 2018ea1d6981Smrg <row><entry>Errors:</entry><entry><link linkend="Errors:Alloc"><errorname>Alloc</errorname></link></entry></row> 2019ea1d6981Smrg </tbody> 2020ea1d6981Smrg </tgroup> 2021ea1d6981Smrg </informaltable> 2022ea1d6981Smrg <para> 2023ea1d6981SmrgThis request returns the current list of catalogue names 2024ea1d6981Smrg(encoded in <acronym>ISO</acronym> 8859-1) associated with the client. These 2025ea1d6981Smrgcatalogues determine the set of fonts that are visible 2026ea1d6981Smrgto 2027ea1d6981Smrg<link linkend="Requests:ListFonts"><function>ListFonts</function></link>, 2028ea1d6981Smrg<link linkend="Requests:ListFontsWithXInfo"><function>ListFontsWithXInfo</function></link>, 2029ea1d6981Smrgand 2030ea1d6981Smrg<link linkend="Requests:OpenBitmapFont"><function>OpenBitmapFont</function></link>. 2031ea1d6981SmrgA zero-length list indicates the server's default set of 2032ea1d6981Smrgfonts. Catalogue names are case-insensitive and may be 2033ea1d6981Smrgreturned in mixed case. 2034ea1d6981Smrg </para> 2035ea1d6981Smrg</section> 2036ea1d6981Smrg 2037ea1d6981Smrg<section id="Requests:SetEventMask"> 2038ea1d6981Smrg <title><function>SetEventMask</function></title> 2039ea1d6981Smrg <indexterm zone="Requests:SetEventMask" significance="preferred"><primary>SetEventMask</primary></indexterm> 2040ea1d6981Smrg <informaltable frame='none'> 2041ea1d6981Smrg <?dbfo keep-together="always" ?> 2042ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 2043ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 2044ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 2045ea1d6981Smrg <tbody> 2046ea1d6981Smrg <row><entry><parameter>extension-opcode</parameter>:</entry><entry><type>CARD8</type></entry></row> 2047ea1d6981Smrg <row rowsep='1'><entry><parameter>event-mask</parameter>:</entry><entry><link linkend="Data_Types:EVENTMASK"><type>EVENTMASK</type></link></entry></row> 2048ea1d6981Smrg <row><entry>Errors:</entry><entry><link linkend="Errors:EventMask"><errorname>EventMask</errorname></link>, 2049ea1d6981Smrg<link linkend="Errors:Request"><errorname>Request</errorname></link></entry></row> 2050ea1d6981Smrg </tbody> 2051ea1d6981Smrg </tgroup> 2052ea1d6981Smrg </informaltable> 2053ea1d6981Smrg <para> 2054ea1d6981SmrgThis request specifies the set of maskable events that the 2055ea1d6981Smrgextension indicated by <parameter>EXTENSION-OPCODE</parameter> 2056ea1d6981Smrg(or zero for the core) 2057ea1d6981Smrgshould generate for the client. Event masks are limited in 2058ea1d6981Smrgscope to the extension (or core) for which they are defined, 2059ea1d6981Smrgso expressing interest in events from one or more extensions 2060ea1d6981Smrgrequires multiple uses of this request. 2061ea1d6981Smrg </para> 2062ea1d6981Smrg <para> 2063ea1d6981SmrgThe default event mask if 2064ea1d6981Smrg<function>SetEventMask</function> 2065ea1d6981Smrghas not been called 2066ea1d6981Smrgis zero, indicating no interest in any maskable events. 2067ea1d6981SmrgSome events are not maskable and cannot be blocked. 2068ea1d6981Smrg </para> 2069ea1d6981Smrg <para> 2070ea1d6981SmrgIf <parameter>EXTENSION-OPCODE</parameter> is not a valid extension 2071ea1d6981Smrgopcode previously returned by 2072ea1d6981Smrg<link linkend="Requests:QueryExtension"><function>QueryExtension</function></link> 2073ea1d6981Smrgor zero, a 2074ea1d6981Smrg<link linkend="Errors:Request"><errorname>Request</errorname></link> 2075ea1d6981Smrgerror is 2076ea1d6981Smrgreturned. If <parameter>EVENT-MASK</parameter> contains any bits that do not 2077ea1d6981Smrgcorrespond to valid events for the specified extension (or 2078ea1d6981Smrgcore), an 2079ea1d6981Smrg<link linkend="Errors:EventMask"><errorname>EventMask</errorname></link> 2080ea1d6981Smrgerror is returned and the request is 2081ea1d6981Smrgignored. 2082ea1d6981Smrg </para> 2083ea1d6981Smrg</section> 2084ea1d6981Smrg 2085ea1d6981Smrg<section id="Requests:GetEventMask"> 2086ea1d6981Smrg <title><function>GetEventMask</function></title> 2087ea1d6981Smrg <indexterm zone="Requests:GetEventMask" significance="preferred"><primary>GetEventMask</primary></indexterm> 2088ea1d6981Smrg <informaltable frame='none'> 2089ea1d6981Smrg <?dbfo keep-together="always" ?> 2090ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 2091ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 2092ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 2093ea1d6981Smrg <tbody> 2094ea1d6981Smrg <row><entry><parameter>extension-opcode</parameter>:</entry><entry><type>CARD8</type></entry></row> 2095ea1d6981Smrg <row><entry>▶</entry></row> 2096ea1d6981Smrg <row rowsep='1'><entry><parameter>event-mask</parameter>:</entry><entry><link linkend="Data_Types:EVENTMASK"><type>EVENTMASK</type></link></entry></row> 2097ea1d6981Smrg <row><entry>Errors:</entry><entry><link linkend="Errors:Request"><errorname>Request</errorname></link></entry></row> 2098ea1d6981Smrg </tbody> 2099ea1d6981Smrg </tgroup> 2100ea1d6981Smrg </informaltable> 2101ea1d6981Smrg <para> 2102ea1d6981SmrgThis request returns the set of maskable core events the 2103ea1d6981Smrgextension indicated by <parameter>EXTENSION-OPCODE</parameter> 2104ea1d6981Smrg(or the core if zero) 2105ea1d6981Smrgshould generate for the client. Non-maskable events are 2106ea1d6981Smrgalways sent to the client. 2107ea1d6981Smrg </para> 2108ea1d6981Smrg <para> 2109ea1d6981SmrgIf <parameter>EXTENSION-OPCODE</parameter> is not a valid extension opcode 2110ea1d6981Smrgpreviously returned by 2111ea1d6981Smrg<link linkend="Requests:QueryExtension"><function>QueryExtension</function></link> 2112ea1d6981Smrgor zero, a 2113ea1d6981Smrg<link linkend="Errors:Request"><errorname>Request</errorname></link> 2114ea1d6981Smrgerror is returned. 2115ea1d6981Smrg </para> 2116ea1d6981Smrg</section> 2117ea1d6981Smrg 2118ea1d6981Smrg<section id="Requests:CreateAC"> 2119ea1d6981Smrg <title><function>CreateAC</function></title> 2120ea1d6981Smrg <indexterm zone="Requests:CreateAC" significance="preferred"><primary>CreateAC</primary></indexterm> 2121ea1d6981Smrg <informaltable frame='none'> 2122ea1d6981Smrg <?dbfo keep-together="always" ?> 2123ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 2124ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 2125ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 2126ea1d6981Smrg <tbody> 2127ea1d6981Smrg <row><entry><parameter>ac</parameter>:</entry><entry><link linkend="Data_Types:ACCESSCONTEXT"><type>ACCESSCONTEXT</type></link></entry></row> 2128ea1d6981Smrg <row><entry><parameter>authorization-protocols</parameter>:</entry><entry><link linkend="Data_Types:AUTH"><type>LISTofAUTH</type></link></entry></row> 2129ea1d6981Smrg <row><entry>▶</entry></row> 2130ea1d6981Smrg <row><entry><parameter>status</parameter>:</entry><entry>{ <constant>Success</constant>, <constant>Continue</constant>, <constant>Denied</constant> }</entry></row> 2131ea1d6981Smrg <row><entry><parameter>authorization-index</parameter>:</entry><entry><type>CARD8</type></entry></row> 2132ea1d6981Smrg <row rowsep='1'><entry><parameter>authorization-data</parameter>:</entry><entry><link linkend="Data_Types:BYTE"><type>LISTofBYTE</type></link></entry></row> 2133ea1d6981Smrg <row><entry>Errors:</entry><entry><link linkend="Errors:IDChoice"><errorname>IDChoice</errorname></link></entry></row> 2134ea1d6981Smrg </tbody> 2135ea1d6981Smrg </tgroup> 2136ea1d6981Smrg </informaltable> 2137ea1d6981Smrg <para> 2138ea1d6981SmrgThis request creates a new 2139ea1d6981Smrg<type>AccessContext</type> 2140ea1d6981Smrgobject within the 2141ea1d6981Smrgserver containing the specified authorization data. When 2142ea1d6981Smrgthis 2143ea1d6981Smrg<type>AccessContext</type> 2144ea1d6981Smrgis selected by the client using the 2145ea1d6981Smrg<link linkend="Requests:SetAuthorization"><function>SetAuthorization</function></link> 2146ea1d6981Smrgrequest, the data may be used by the server 2147ea1d6981Smrgto determine whether or not the client should be granted 2148ea1d6981Smrgaccess to particular font information. 2149ea1d6981Smrg </para> 2150ea1d6981Smrg <para> 2151ea1d6981SmrgIf <parameter>STATUS</parameter> is <constant>Denied</constant>, the server 2152ea1d6981Smrgrejects the client's authorization information and does not associate 2153ea1d6981Smrg<parameter>AC</parameter> with any valid <type>AccessContext</type>. 2154ea1d6981SmrgIn this case, <parameter>AUTHORIZATION-INDEX</parameter> is set 2155ea1d6981Smrgto zero, and zero bytes of <parameter>AUTHORIZATION-DATA</parameter> 2156ea1d6981Smrgis returned. 2157ea1d6981Smrg </para> 2158ea1d6981Smrg <para> 2159ea1d6981SmrgOtherwise, <parameter>AUTHORIZATION-INDEX</parameter> is set to the index 2160ea1d6981Smrg(beginning with 1) into the <parameter>AUTHORIZATION-PROTOCOLS</parameter> 2161ea1d6981Smrglist of the protocol 2162ea1d6981Smrgthat the server will use for this connection. If the server 2163ea1d6981Smrgdoes not want to use any of the given protocols, this value is 2164ea1d6981Smrgset to zero. The <parameter>AUTHORIZATION-DATA</parameter> field is used 2165ea1d6981Smrgto send back authorization protocol-dependent data to the client (such 2166ea1d6981Smrgas a challenge, authentication of the server, etc.). 2167ea1d6981Smrg </para> 2168ea1d6981Smrg <para> 2169ea1d6981SmrgIf <parameter>STATUS</parameter> is <constant>Continue</constant>, 2170ea1d6981Smrgthe client is expected to continue 2171ea1d6981Smrgthe request by sending the following protocol and receiving 2172ea1d6981Smrgthe indicated response from the server. This continues 2173ea1d6981Smrguntil <parameter>STATUS</parameter> is set to either 2174ea1d6981Smrg<constant>Success</constant> or <constant>Denied</constant>. 2175ea1d6981Smrg </para> 2176ea1d6981Smrg <informaltable frame='none'> 2177ea1d6981Smrg <?dbfo keep-together="always" ?> 2178ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 2179ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 2180ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 2181ea1d6981Smrg <tbody> 2182ea1d6981Smrg <row><entry> ◀</entry></row> 2183ea1d6981Smrg <row><entry><parameter> more-authorization-data</parameter>:</entry><entry><link linkend="Data_Types:STRING8"><type>STRING8</type></link></entry></row> 2184ea1d6981Smrg <row><entry> ▶</entry></row> 2185ea1d6981Smrg <row><entry><parameter>status</parameter>:</entry><entry>{ <constant>Success</constant>, <constant>Continue</constant>, <constant>Denied</constant> }</entry></row> 2186ea1d6981Smrg <row><entry><parameter> more-authorization-data</parameter>:</entry><entry><link linkend="Data_Types:BYTE"><type>LISTofBYTE</type></link></entry></row> 2187ea1d6981Smrg </tbody> 2188ea1d6981Smrg </tgroup> 2189ea1d6981Smrg </informaltable> 2190ea1d6981Smrg <para> 2191ea1d6981SmrgOnce the connection has been accepted and <parameter>STATUS</parameter> 2192ea1d6981Smrgis <constant>Success</constant>, the request is complete. 2193ea1d6981Smrg </para> 2194ea1d6981Smrg <para> 2195ea1d6981SmrgIf <parameter>AC</parameter> is not in the range 2196ea1d6981Smrg[1..2<superscript>29</superscript>-1] or is already associated 2197ea1d6981Smrgwith an access context, an <link linkend="Errors:IDChoice"><errorname>IDChoice</errorname></link> error is returned. 2198ea1d6981Smrg </para> 2199ea1d6981Smrg</section> 2200ea1d6981Smrg 2201ea1d6981Smrg<section id="Requests:FreeAC"> 2202ea1d6981Smrg <title><function>FreeAC</function></title> 2203ea1d6981Smrg <indexterm zone="Requests:FreeAC" significance="preferred"><primary>FreeAC</primary></indexterm> 2204ea1d6981Smrg <informaltable frame='none'> 2205ea1d6981Smrg <?dbfo keep-together="always" ?> 2206ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 2207ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 2208ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 2209ea1d6981Smrg <tbody> 2210ea1d6981Smrg <row><entry><parameter>ac</parameter>:</entry><entry><link linkend="Data_Types:ACCESSCONTEXT"><type>ACCESSCONTEXT</type></link></entry></row> 2211ea1d6981Smrg <row rowsep='1'><entry>Errors:</entry><entry><link linkend="Errors:AccessContext"><errorname>AccessContext</errorname></link>, 2212ea1d6981Smrg<link linkend="Errors:Alloc"><errorname>Alloc</errorname></link></entry></row> 2213ea1d6981Smrg </tbody> 2214ea1d6981Smrg </tgroup> 2215ea1d6981Smrg </informaltable> 2216ea1d6981Smrg <para> 2217ea1d6981SmrgThis request indicates that the specified <parameter>AC</parameter> should 2218ea1d6981Smrgno longer be associated with a valid access context. 2219ea1d6981SmrgIf <parameter>AC</parameter> is also the current 2220ea1d6981Smrg<type>AccessContext</type> 2221ea1d6981Smrg(as set by the 2222ea1d6981Smrg<link linkend="Requests:SetAuthorization"><function>SetAuthorization</function></link> 2223ea1d6981Smrgrequest), an implicit 2224ea1d6981Smrg<link linkend="Requests:SetAuthorization"><function>SetAuthorization</function></link> 2225ea1d6981Smrgof <constant>None</constant> is done to 2226ea1d6981Smrgrestore the 2227ea1d6981Smrg<type>AccessContext</type> 2228ea1d6981Smrgestablished for the initial 2229ea1d6981Smrgconnection setup. Operations on fonts that were opened under 2230ea1d6981Smrg<parameter>AC</parameter> are not affected. The client may reuse the 2231ea1d6981Smrgvalue of <parameter>AC</parameter> in a subsequent 2232ea1d6981Smrg<link linkend="Requests:CreateAC"><function>CreateAC</function></link> 2233ea1d6981Smrgrequest. 2234ea1d6981Smrg </para> 2235ea1d6981Smrg <para> 2236ea1d6981SmrgIf <parameter>AC</parameter> isn't associated with any valid authorization 2237ea1d6981Smrgpreviously created by 2238ea1d6981Smrg<link linkend="Requests:CreateAC"><function>CreateAC</function></link>, an 2239ea1d6981Smrg<link linkend="Errors:AccessContext"><errorname>AccessContext</errorname></link> 2240ea1d6981Smrgerror is returned. 2241ea1d6981Smrg </para> 2242ea1d6981Smrg</section> 2243ea1d6981Smrg 2244ea1d6981Smrg<section id="Requests:SetAuthorization"> 2245ea1d6981Smrg <title><function>SetAuthorization</function></title> 2246ea1d6981Smrg <indexterm zone="Requests:SetAuthorization" significance="preferred"><primary>SetAuthorization</primary></indexterm> 2247ea1d6981Smrg <informaltable frame='none'> 2248ea1d6981Smrg <?dbfo keep-together="always" ?> 2249ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 2250ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 2251ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 2252ea1d6981Smrg <tbody> 2253ea1d6981Smrg <row><entry><parameter>ac</parameter>:</entry><entry><link linkend="Data_Types:ACCESSCONTEXT"><type>ACCESSCONTEXT</type></link></entry></row> 2254ea1d6981Smrg <row rowsep='1'><entry>Errors:</entry><entry><link linkend="Errors:AccessContext"><errorname>AccessContext</errorname></link></entry></row> 2255ea1d6981Smrg </tbody> 2256ea1d6981Smrg </tgroup> 2257ea1d6981Smrg </informaltable> 2258ea1d6981Smrg <para> 2259ea1d6981SmrgThis request sets the 2260ea1d6981Smrg<type>AccessContext</type> 2261ea1d6981Smrgto be used for subsequent 2262ea1d6981Smrgrequests (except for 2263ea1d6981Smrg<link linkend="Requests:QueryXInfo"><function>QueryXInfo</function></link>, 2264ea1d6981Smrg<link linkend="Requests:QueryXExtents8"><function>QueryXExtents8</function></link>, 2265ea1d6981Smrg<link linkend="Requests:QueryXExtents16"><function>QueryXExtents16</function></link>, 2266ea1d6981Smrg<link linkend="Requests:QueryXBitmaps8"><function>QueryXBitmaps8</function></link>, 2267ea1d6981Smrg<link linkend="Requests:QueryXBitmaps16"><function>QueryXBitmaps16</function></link> 2268ea1d6981Smrgand 2269ea1d6981Smrg<link linkend="Requests:CloseFont"><function>CloseFont</function></link> 2270ea1d6981Smrgwhich are done under the 2271ea1d6981Smrg<type>AccessContext</type> 2272ea1d6981Smrgof the 2273ea1d6981Smrgcorresponding 2274ea1d6981Smrg<link linkend="Requests:OpenBitmapFont"><function>OpenBitmapFont</function></link> 2275ea1d6981Smrg). 2276ea1d6981SmrgAn <parameter>AC</parameter> of <constant>None</constant> restores the 2277ea1d6981Smrg<type>AccessContext</type> 2278ea1d6981Smrgestablished for the initial connection setup. 2279ea1d6981Smrg </para> 2280ea1d6981Smrg <para> 2281ea1d6981SmrgIf <parameter>AC</parameter> is neither <constant>None</constant> 2282ea1d6981Smrgnor a value associated with a valid <type>AccessContext</type> 2283ea1d6981Smrgpreviously created by 2284ea1d6981Smrg<link linkend="Requests:CreateAC"><function>CreateAC</function></link>, 2285ea1d6981Smrgan 2286ea1d6981Smrg<link linkend="Errors:AccessContext"><errorname>AccessContext</errorname></link> 2287ea1d6981Smrgerror is returned. 2288ea1d6981Smrg </para> 2289ea1d6981Smrg</section> 2290ea1d6981Smrg 2291ea1d6981Smrg<section id="Requests:SetResolution"> 2292ea1d6981Smrg <title><function>SetResolution</function></title> 2293ea1d6981Smrg <indexterm zone="Requests:SetResolution" significance="preferred"><primary>SetResolution</primary></indexterm> 2294ea1d6981Smrg <informaltable frame='none'> 2295ea1d6981Smrg <?dbfo keep-together="always" ?> 2296ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 2297ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 2298ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 2299ea1d6981Smrg <tbody> 2300ea1d6981Smrg <row rowsep='1'><entry><parameter>resolutions</parameter>:</entry><entry><link linkend="Data_Types:RESOLUTION"><type>LISTofRESOLUTION</type></link></entry></row> 2301ea1d6981Smrg <row><entry>Errors:</entry><entry><link linkend="Errors:Resolution"><errorname>Resolution</errorname></link>, 2302ea1d6981Smrg<link linkend="Errors:Alloc"><errorname>Alloc</errorname></link></entry></row> 2303ea1d6981Smrg </tbody> 2304ea1d6981Smrg </tgroup> 2305ea1d6981Smrg </informaltable> 2306ea1d6981Smrg <para> 2307ea1d6981SmrgThis request provides a hint as to the resolution and 2308ea1d6981Smrgpreferred point size of the drawing surfaces for which the 2309ea1d6981Smrgclient will be requesting fonts. The server may use this 2310ea1d6981Smrginformation to set the RESOLUTION_X and RESOLUTION_Y fields 2311ea1d6981Smrgof scalable <acronym>XLFD</acronym> font names, to order sets of names based on 2312ea1d6981Smrgtheir resolutions, and to choose the server-dependent 2313ea1d6981Smrginstance that is used when a partially-specified scalable 2314ea1d6981Smrgfontname is opened. 2315ea1d6981Smrg </para> 2316ea1d6981Smrg <para> 2317ea1d6981SmrgIf a zero-length list of <link linkend="Data_Types:RESOLUTION"><type>RESOLUTION</type></link>s is given, the 2318ea1d6981Smrgserver-dependent default value is restored. Otherwise, if 2319ea1d6981Smrgelements of all of the specified <link linkend="Data_Types:RESOLUTION"><type>RESOLUTION</type></link>s are non-zero, the 2320ea1d6981Smrgdefault resolutions for this client are changed. 2321ea1d6981Smrg </para> 2322ea1d6981Smrg <para> 2323ea1d6981SmrgIf a <link linkend="Data_Types:RESOLUTION"><type>RESOLUTION</type></link> entry contains a zero, 2324ea1d6981Smrga <link linkend="Errors:Resolution"><errorname>Resolution</errorname></link> error is 2325ea1d6981Smrgreturned and the default resolutions are not changed. 2326ea1d6981Smrg </para> 2327ea1d6981Smrg</section> 2328ea1d6981Smrg 2329ea1d6981Smrg<section id="Requests:GetResolution"> 2330ea1d6981Smrg <title><function>GetResolution</function></title> 2331ea1d6981Smrg <indexterm zone="Requests:GetResolution" significance="preferred"><primary>GetResolution</primary></indexterm> 2332ea1d6981Smrg <informaltable frame='none'> 2333ea1d6981Smrg <?dbfo keep-together="always" ?> 2334ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 2335ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 2336ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 2337ea1d6981Smrg <tbody> 2338ea1d6981Smrg <row><entry>▶</entry></row> 2339ea1d6981Smrg <row rowsep='1'><entry><parameter>resolutions</parameter>:</entry><entry><link linkend="Data_Types:RESOLUTION"><type>LISTofRESOLUTION</type></link></entry></row> 2340ea1d6981Smrg <row><entry>Errors:</entry><entry><link linkend="Errors:Alloc"><errorname>Alloc</errorname></link></entry></row> 2341ea1d6981Smrg </tbody> 2342ea1d6981Smrg </tgroup> 2343ea1d6981Smrg </informaltable> 2344ea1d6981Smrg <para> 2345ea1d6981SmrgThis request returns the current list of default resolutions. 2346ea1d6981SmrgIf a client has not performed a 2347ea1d6981Smrg<link linkend="Requests:SetResolution"><function>SetResolution</function></link>, 2348ea1d6981Smrga server-dependent default value is returned. 2349ea1d6981Smrg </para> 2350ea1d6981Smrg</section> 2351ea1d6981Smrg 2352ea1d6981Smrg<section id="Requests:ListFonts"> 2353ea1d6981Smrg <title><function>ListFonts</function></title> 2354ea1d6981Smrg <indexterm zone="Requests:ListFonts" significance="preferred"><primary>ListFonts</primary></indexterm> 2355ea1d6981Smrg <informaltable frame='none'> 2356ea1d6981Smrg <?dbfo keep-together="always" ?> 2357ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 2358ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 2359ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 2360ea1d6981Smrg <tbody> 2361ea1d6981Smrg <row><entry><parameter>pattern</parameter>:</entry><entry><link linkend="Data_Types:STRING8"><type>STRING8</type></link></entry></row> 2362ea1d6981Smrg <row><entry><parameter>max-names</parameter>:</entry><entry><type>CARD32</type></entry></row> 2363ea1d6981Smrg <row><entry>▶+</entry></row> 2364ea1d6981Smrg <row><entry><parameter>replies-following-hint</parameter>:</entry><entry><type>CARD32</type></entry></row> 2365ea1d6981Smrg <row rowsep='1'><entry><parameter>names</parameter>:</entry><entry><link linkend="Data_Types:STRING8"><type>LISTofSTRING8</type></link></entry></row> 2366ea1d6981Smrg <row><entry>Errors:</entry><entry><link linkend="Errors:Alloc"><errorname>Alloc</errorname></link></entry></row> 2367ea1d6981Smrg </tbody> 2368ea1d6981Smrg </tgroup> 2369ea1d6981Smrg </informaltable> 2370ea1d6981Smrg <para> 2371ea1d6981SmrgThis request returns a list of at most <parameter>MAX-NAMES</parameter> 2372ea1d6981Smrgfont names that match the specified <parameter>PATTERN</parameter>, 2373ea1d6981Smrgaccording to matching rules 2374ea1d6981Smrgof the <olink targetdoc='xlfd' targetptr='xlfd'><citetitle>X Logical 2375ea1d6981SmrgFont Description Conventions</citetitle></olink> 2376ea1d6981Smrg<xref linkend="References:xlfd-spec"/>. 2377ea1d6981SmrgIn the pattern (which is encoded in <acronym>ISO</acronym> 8859-1) the 2378ea1d6981Smrg<quote><literal>?</literal></quote> character (octal <literal>77</literal>) 2379ea1d6981Smrgmatches any single character; the 2380ea1d6981Smrg<quote><literal>*</literal></quote> character (octal <literal>52</literal>) 2381ea1d6981Smrgmatches any series of zero or more characters; and 2382ea1d6981Smrgalphabetic characters match either upper- or lowercase. The 2383ea1d6981Smrgreturned <parameter>NAMES</parameter> are encoded in 2384ea1d6981Smrg<acronym>ISO</acronym> 8859-1 and may contain mixed 2385ea1d6981Smrgcharacter cases. Font names are not required to be in <acronym>XLFD</acronym> 2386ea1d6981Smrgformat. 2387ea1d6981Smrg </para> 2388ea1d6981Smrg <para> 2389ea1d6981SmrgIf <parameter>PATTERN</parameter> is of zero length or 2390ea1d6981Smrg<parameter>MAX-NAMES</parameter> is equal to zero, 2391ea1d6981Smrgone reply containing a zero-length list of names is returned. 2392ea1d6981SmrgThis may be used to synchronize the client with the server. 2393ea1d6981Smrg </para> 2394ea1d6981Smrg <para> 2395ea1d6981SmrgServers are free to add or remove fonts to the set returned by 2396ea1d6981Smrg<function>ListFonts</function> 2397ea1d6981Smrgbetween any two requests. This request is not 2398ea1d6981Smrgcumulative; repeated uses are processed in isolation and do 2399ea1d6981Smrgresult in an iteration through the list. 2400ea1d6981Smrg </para> 2401ea1d6981Smrg <para> 2402ea1d6981SmrgTo reduce the amount of buffering needed by the server, the 2403ea1d6981Smrglist of names may be split across several reply packets, so 2404ea1d6981Smrglong as the names arrive in the same order that they would 2405ea1d6981Smrghave appeared had they been in a single packet. The 2406ea1d6981Smrg<parameter>REPLIES-FOLLOWING-HINT</parameter> field in all but the last reply 2407ea1d6981Smrgcontains a positive value that specifies the number of 2408ea1d6981Smrgreplies that are likely, but not required, to follow. In the 2409ea1d6981Smrglast reply, which may contain zero or more names, this field 2410ea1d6981Smrgis set to zero. 2411ea1d6981Smrg </para> 2412ea1d6981Smrg</section> 2413ea1d6981Smrg 2414ea1d6981Smrg<section id="Requests:ListFontsWithXInfo"> 2415ea1d6981Smrg <title><function>ListFontsWithXInfo</function></title> 2416ea1d6981Smrg <indexterm zone="Requests:ListFontsWithXInfo" significance="preferred"><primary>ListFontsWithXInfo</primary></indexterm> 2417ea1d6981Smrg <informaltable frame='none'> 2418ea1d6981Smrg <?dbfo keep-together="always" ?> 2419ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 2420ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 2421ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 2422ea1d6981Smrg <tbody> 2423ea1d6981Smrg <row><entry><parameter>pattern</parameter>:</entry><entry><link linkend="Data_Types:STRING8"><type>STRING8</type></link></entry></row> 2424ea1d6981Smrg <row><entry><parameter>pattern</parameter>:</entry><entry><link linkend="Data_Types:STRING8"><type>STRING8</type></link></entry></row> 2425ea1d6981Smrg <row><entry><parameter>pattern</parameter>:</entry><entry><link linkend="Data_Types:STRING8"><type>STRING8</type></link></entry></row> 2426ea1d6981Smrg <row><entry><parameter>max-names</parameter>:</entry><entry><type>CARD32</type></entry></row> 2427ea1d6981Smrg <row><entry>▶+</entry></row> 2428ea1d6981Smrg <row><entry><parameter>replies-following-hint</parameter>:</entry><entry><type>CARD32</type></entry></row> 2429ea1d6981Smrg <row><entry><parameter>info</parameter>:</entry><entry><link linkend="Data_Types:XFONTINFO"><type>XFONTINFO</type></link></entry></row> 2430ea1d6981Smrg <row rowsep='1'><entry><parameter>name</parameter>:</entry><entry><link linkend="Data_Types:STRING8"><type>STRING8</type></link></entry></row> 2431ea1d6981Smrg <row><entry>Errors:</entry><entry><link linkend="Errors:Alloc"><errorname>Alloc</errorname></link></entry></row> 2432ea1d6981Smrg </tbody> 2433ea1d6981Smrg </tgroup> 2434ea1d6981Smrg </informaltable> 2435ea1d6981Smrg <para> 2436ea1d6981SmrgThis request is similar to 2437ea1d6981Smrg<link linkend="Requests:ListFonts"><function>ListFonts</function></link> 2438ea1d6981Smrgexcept that a separate 2439ea1d6981Smrgreply containing the name, header, and property data is 2440ea1d6981Smrggenerated for each matching font name. Following these 2441ea1d6981Smrgreplies, if any, a final reply containing a zero-length 2442ea1d6981Smrg<parameter>NAME</parameter> and no <parameter>INFO</parameter> is sent. 2443ea1d6981Smrg </para> 2444ea1d6981Smrg <para> 2445ea1d6981SmrgThe <parameter>REPLIES-FOLLOWING-HINT</parameter> field in all but the 2446ea1d6981Smrglast reply contains a positive value that specifies the number of replies 2447ea1d6981Smrgthat are likely, but not required, to follow. In the last 2448ea1d6981Smrgreply, this field is set to zero. 2449ea1d6981Smrg </para> 2450ea1d6981Smrg <para> 2451ea1d6981SmrgIf <parameter>PATTERN</parameter> is of zero length or if 2452ea1d6981Smrg<parameter>MAX-NAMES</parameter> is equal to zero, only the final reply 2453ea1d6981Smrgcontaining a zero-length <parameter>NAME</parameter> and no 2454ea1d6981Smrg<parameter>INFO</parameter> is returned. This may be used to synchronize the 2455ea1d6981Smrgclient with the server. 2456ea1d6981Smrg </para> 2457ea1d6981Smrg</section> 2458ea1d6981Smrg 2459ea1d6981Smrg<section id="Requests:OpenBitmapFont"> 2460ea1d6981Smrg <title><function>OpenBitmapFont</function></title> 2461ea1d6981Smrg <indexterm zone="Requests:OpenBitmapFont" significance="preferred"><primary>OpenBitmapFont</primary></indexterm> 2462ea1d6981Smrg <informaltable frame='none'> 2463ea1d6981Smrg <?dbfo keep-together="always" ?> 2464ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 2465ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 2466ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 2467ea1d6981Smrg <tbody> 2468ea1d6981Smrg <row><entry><parameter>fontid</parameter>:</entry><entry><link linkend="Data_Types:FONTID"><type>FONTID</type></link></entry></row> 2469ea1d6981Smrg <row><entry><parameter>pattern</parameter>:</entry><entry><link linkend="Data_Types:STRING8"><type>STRING8</type></link></entry></row> 2470ea1d6981Smrg <row><entry><parameter>format-mask</parameter>:</entry><entry><link linkend="Data_Types:BITMAPFORMATMASK"><type>BITMAPFORMATMASK</type></link></entry></row> 2471ea1d6981Smrg <row><entry><parameter>format-hint</parameter>:</entry><entry><link linkend="Data_Types:BITMAPFORMAT"><type>BITMAPFORMAT</type></link></entry></row> 2472ea1d6981Smrg <row><entry>▶</entry></row> 2473ea1d6981Smrg <row><entry><parameter>otherid</parameter>:</entry><entry><link linkend="Data_Types:FONTID"><type>FONTID</type></link> or <constant>None</constant></entry></row> 2474ea1d6981Smrg <row><entry><parameter>otherid-valid</parameter>:</entry><entry><link linkend="Data_Types:BOOL"><type>BOOL</type></link></entry></row> 2475ea1d6981Smrg <row rowsep='1'><entry><parameter>cachable</parameter>:</entry><entry><link linkend="Data_Types:BOOL"><type>BOOL</type></link></entry></row> 2476ea1d6981Smrg <row><entry>Errors:</entry><entry> 2477ea1d6981Smrg<link linkend="Errors:IDChoice"><errorname>IDChoice</errorname></link>, 2478ea1d6981Smrg<link linkend="Errors:Name"><errorname>Name</errorname></link>, 2479ea1d6981Smrg<link linkend="Errors:Format"><errorname>Format</errorname></link>, 2480ea1d6981Smrg<link linkend="Errors:AccessContext"><errorname>AccessContext</errorname></link>, 2481ea1d6981Smrg<link linkend="Errors:Alloc"><errorname>Alloc</errorname></link></entry></row> 2482ea1d6981Smrg </tbody> 2483ea1d6981Smrg </tgroup> 2484ea1d6981Smrg </informaltable> 2485ea1d6981Smrg <para> 2486ea1d6981SmrgThis request looks for a server-dependent choice of the 2487ea1d6981Smrgfont names that match the specified <parameter>PATTERN</parameter> 2488ea1d6981Smrgaccording to the rules described for 2489ea1d6981Smrg<link linkend="Requests:ListFonts"><function>ListFonts</function></link>. 2490ea1d6981SmrgIf no matches are found, a 2491ea1d6981Smrg<link linkend="Errors:Name"><errorname>Name</errorname></link> 2492ea1d6981Smrgerror is returned. Otherwise, the server attempts to 2493ea1d6981Smrgopen the font associated with the chosen name. 2494ea1d6981Smrg </para> 2495ea1d6981Smrg <para> 2496ea1d6981SmrgPermission to access the font is determined by the server 2497ea1d6981Smrgaccording the licensing policy used for this font. The server 2498ea1d6981Smrgmay use the client's current 2499ea1d6981Smrg<type>AccessContext</type> 2500ea1d6981Smrg(as set by the most 2501ea1d6981Smrgrecent 2502ea1d6981Smrg<link linkend="Requests:SetAuthorization"><function>SetAuthorization</function></link> 2503ea1d6981Smrgrequest or the original connection 2504ea1d6981Smrgsetup) to determine any client-specific sets of permissions. 2505ea1d6981SmrgAfter the font has been opened, the client is allowed to 2506ea1d6981Smrgspecify a new 2507ea1d6981Smrg<type>AccessContext</type> 2508ea1d6981Smrgwith 2509ea1d6981Smrg<link linkend="Requests:SetAuthorization"><function>SetAuthorization</function></link> 2510ea1d6981Smrgor release 2511ea1d6981Smrgthe 2512ea1d6981Smrg<type>AccessContext</type> 2513ea1d6981Smrgusing 2514ea1d6981Smrg<link linkend="Requests:FreeAC"><function>FreeAC</function></link> 2515ea1d6981Smrg. Subsequent 2516ea1d6981Smrg<link linkend="Requests:QueryXInfo"><function>QueryXInfo</function></link>, 2517ea1d6981Smrg<link linkend="Requests:QueryXExtents8"><function>QueryXExtents8</function></link>, 2518ea1d6981Smrg<link linkend="Requests:QueryXExtents16"><function>QueryXExtents16</function></link>, 2519ea1d6981Smrg<link linkend="Requests:QueryXBitmaps8"><function>QueryXBitmaps8</function></link>, 2520ea1d6981Smrg<link linkend="Requests:QueryXBitmaps16"><function>QueryXBitmaps16</function></link> 2521ea1d6981Smrgand 2522ea1d6981Smrg<link linkend="Requests:CloseFont"><function>CloseFont</function></link> 2523ea1d6981Smrgrequests on this <link linkend="Data_Types:FONTID"><type>FONTID</type></link> are 2524ea1d6981Smrgperformed according to permissions granted at the time of the 2525ea1d6981Smrg<function>OpenBitmapFont</function> 2526ea1d6981Smrgrequest. 2527ea1d6981Smrg </para> 2528ea1d6981Smrg <para> 2529ea1d6981SmrgIf the server is willing and able to detect that the client 2530ea1d6981Smrghas already opened the font successfully (possibly under a 2531ea1d6981Smrgdifferent name), the <parameter>OTHERID</parameter> field 2532ea1d6981Smrgmay be set to one of the 2533ea1d6981Smrgidentifiers previously used to open the font. The 2534ea1d6981Smrg<parameter>OTHERID-VALID</parameter> field indicates whether or not 2535ea1d6981Smrg<parameter>OTHERID</parameter> is still associated with an open font: 2536ea1d6981Smrgif it is <constant>True</constant>, the client may use 2537ea1d6981Smrg<parameter>OTHERID</parameter> as an alternative to 2538ea1d6981Smrg<parameter>FONTID</parameter>. Otherwise, if 2539ea1d6981Smrg<parameter>OTHERID-VALID</parameter> is <constant>False</constant>, 2540ea1d6981Smrg<parameter>OTHERID</parameter> is no longer 2541ea1d6981Smrgopen but has not been reused by a subsequent 2542ea1d6981Smrg<function>OpenBitmapFont</function> 2543ea1d6981Smrgrequest. 2544ea1d6981Smrg </para> 2545ea1d6981Smrg <para> 2546ea1d6981SmrgIf <parameter>OTHERID</parameter> is set to <constant>None</constant>, 2547ea1d6981Smrgthen <parameter>OTHERID-VALID</parameter> should be set 2548ea1d6981Smrgto <constant>False</constant>. 2549ea1d6981Smrg </para> 2550ea1d6981Smrg <para> 2551ea1d6981SmrgThe <parameter>FORMAT-MASK</parameter> indicates which fields in 2552ea1d6981Smrg<parameter>FORMAT-HINT</parameter> 2553ea1d6981Smrgthe client is likely to use in subsequent 2554ea1d6981Smrg<function>GetXBitmaps8</function> 2555ea1d6981Smrgand 2556ea1d6981Smrg<function>GetXBitmaps16</function> 2557ea1d6981Smrgrequests. Servers may wish to use 2558ea1d6981Smrgthis information to precompute certain values. 2559ea1d6981Smrg </para> 2560ea1d6981Smrg <para> 2561ea1d6981SmrgIf <parameter>CACHABLE</parameter> is set to <constant>True</constant>, 2562ea1d6981Smrgthe client may cache the font 2563ea1d6981Smrg(so that redundant opens of the same font may be avoided) 2564ea1d6981Smrgand use it with all 2565ea1d6981Smrg<type>AccessContext</type>s 2566ea1d6981Smrgduring the life of the 2567ea1d6981Smrgclient without violating the font's licensing policy. This 2568ea1d6981Smrgflag is typically set whenever a font is unlicensed or is 2569ea1d6981Smrglicensed on a per-display basis. If <parameter>CACHABLE</parameter> 2570ea1d6981Smrgis <constant>False</constant>, the 2571ea1d6981Smrgclient should reopen the font for each 2572ea1d6981Smrg<type>AccessContext</type>. 2573ea1d6981Smrg </para> 2574ea1d6981Smrg <para> 2575ea1d6981SmrgThe server is permitted to add to or remove from the set of 2576ea1d6981Smrgfonts returned by 2577ea1d6981Smrg<link linkend="Requests:ListFonts"><function>ListFonts</function></link> 2578ea1d6981Smrgbetween any two requests, though 2579ea1d6981Smrgmechanisms outside the protocol. Therefore, it is possible 2580ea1d6981Smrgfor this request (which is atomic) to return a different font 2581ea1d6981Smrgthan would result from separate a 2582ea1d6981Smrg<link linkend="Requests:ListFonts"><function>ListFonts</function></link> 2583ea1d6981Smrgfollowed by an 2584ea1d6981Smrg<function>OpenBitmapFont</function> 2585ea1d6981Smrgwith a non-wildcarded font name. 2586ea1d6981Smrg </para> 2587ea1d6981Smrg <para> 2588ea1d6981SmrgIf <parameter>FONTID</parameter> is not in the range 2589ea1d6981Smrg[1..2<superscript>29</superscript>-1] or if it is already 2590ea1d6981Smrgassociated with an open font, an 2591ea1d6981Smrg<link linkend="Errors:IDChoice"><errorname>IDChoice</errorname></link> 2592ea1d6981Smrgerror is returned. 2593ea1d6981SmrgIf no font is available that matches the specified 2594ea1d6981Smrg<parameter>PATTERN</parameter>, a 2595ea1d6981Smrg<link linkend="Errors:Name"><errorname>Name</errorname></link> 2596ea1d6981Smrgerror is returned. If the font is present but the client 2597ea1d6981Smrgis not permitted access, an 2598ea1d6981Smrg<link linkend="Errors:AccessContext"><errorname>AccessContext</errorname></link> 2599ea1d6981Smrgerror is returned. 2600ea1d6981SmrgIf <parameter>FORMAT-MASK</parameter> has any unspecified bits set or if any 2601ea1d6981Smrgof the fields in <parameter>FORMAT-HINT</parameter> indicated by 2602ea1d6981Smrg<parameter>FORMAT-MASK</parameter> are invalid, a 2603ea1d6981Smrg<link linkend="Errors:Format"><errorname>Format</errorname></link> 2604ea1d6981Smrgerror is returned. 2605ea1d6981Smrg </para> 2606ea1d6981Smrg</section> 2607ea1d6981Smrg 2608ea1d6981Smrg<section id="Requests:QueryXInfo"> 2609ea1d6981Smrg <title><function>QueryXInfo</function></title> 2610ea1d6981Smrg <indexterm zone="Requests:QueryXInfo" significance="preferred"><primary>QueryXInfo</primary></indexterm> 2611ea1d6981Smrg <informaltable frame='none'> 2612ea1d6981Smrg <?dbfo keep-together="always" ?> 2613ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 2614ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 2615ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 2616ea1d6981Smrg <tbody> 2617ea1d6981Smrg <row><entry><parameter>fontid</parameter>:</entry><entry><link linkend="Data_Types:FONTID"><type>FONTID</type></link></entry></row> 2618ea1d6981Smrg <row><entry>▶</entry></row> 2619ea1d6981Smrg <row rowsep='1'><entry><parameter>info</parameter>:</entry><entry><link linkend="Data_Types:XFONTINFO"><type>XFONTINFO</type></link></entry></row> 2620ea1d6981Smrg <row><entry>Errors:</entry><entry><link linkend="Errors:Font"><errorname>Font</errorname></link>, 2621ea1d6981Smrg<link linkend="Errors:Alloc"><errorname>Alloc</errorname></link></entry></row> 2622ea1d6981Smrg </tbody> 2623ea1d6981Smrg </tgroup> 2624ea1d6981Smrg </informaltable> 2625ea1d6981Smrg <para> 2626ea1d6981SmrgThis request returns the font header and property information 2627ea1d6981Smrgfor the open font associated with <parameter>FONTID</parameter>. 2628ea1d6981Smrg </para> 2629ea1d6981Smrg <para> 2630ea1d6981SmrgIf <parameter>FONTID</parameter> is not associated with any open fonts, a 2631ea1d6981Smrg<link linkend="Errors:Font"><errorname>Font</errorname></link> 2632ea1d6981Smrgerror 2633ea1d6981Smrgis returned. 2634ea1d6981Smrg </para> 2635ea1d6981Smrg</section> 2636ea1d6981Smrg 2637ea1d6981Smrg<section id="Requests:QueryXExtents8"> 2638ea1d6981Smrg <title><function>QueryXExtents8</function></title> 2639ea1d6981Smrg <indexterm zone="Requests:QueryXExtents8" significance="preferred"><primary>QueryXExtents8</primary></indexterm> 2640ea1d6981Smrg <informaltable frame='none'> 2641ea1d6981Smrg <?dbfo keep-together="always" ?> 2642ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 2643ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 2644ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 2645ea1d6981Smrg <tbody> 2646ea1d6981Smrg <row><entry><parameter>fontid</parameter>:</entry><entry><link linkend="Data_Types:FONTID"><type>FONTID</type></link></entry></row> 2647ea1d6981Smrg <row><entry><parameter>range</parameter>:</entry><entry><link linkend="Data_Types:BOOL"><type>BOOL</type></link></entry></row> 2648ea1d6981Smrg <row><entry><parameter>chars</parameter>:</entry><entry><link linkend="Data_Types:STRING8"><type>STRING8</type></link></entry></row> 2649ea1d6981Smrg <row><entry>▶</entry></row> 2650ea1d6981Smrg <row rowsep='1'><entry><parameter>extents</parameter>:</entry><entry><link linkend="Data_Types:XCHARINFO"><type>LISTofXCHARINFO</type></link></entry></row> 2651ea1d6981Smrg <row><entry>Errors:</entry><entry><link linkend="Errors:Font"><errorname>Font</errorname></link>, 2652ea1d6981Smrg<link linkend="Errors:Range"><errorname>Range</errorname></link>, 2653ea1d6981Smrg<link linkend="Errors:Alloc"><errorname>Alloc</errorname></link></entry></row> 2654ea1d6981Smrg </tbody> 2655ea1d6981Smrg </tgroup> 2656ea1d6981Smrg </informaltable> 2657ea1d6981Smrg <para> 2658ea1d6981SmrgThis request is equivalent to 2659ea1d6981Smrg<link linkend="Requests:QueryXExtents16"><function>QueryXExtents16</function></link> 2660ea1d6981Smrgexcept that it 2661ea1d6981Smrguses 1-byte character codes. 2662ea1d6981Smrg </para> 2663ea1d6981Smrg</section> 2664ea1d6981Smrg 2665ea1d6981Smrg<section id="Requests:QueryXExtents16"> 2666ea1d6981Smrg <title><function>QueryXExtents16</function></title> 2667ea1d6981Smrg <indexterm zone="Requests:QueryXExtents16" significance="preferred"><primary>QueryXExtents16</primary></indexterm> 2668ea1d6981Smrg <informaltable frame='none'> 2669ea1d6981Smrg <?dbfo keep-together="always" ?> 2670ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 2671ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 2672ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 2673ea1d6981Smrg <tbody> 2674ea1d6981Smrg <row><entry><parameter>fontid</parameter>:</entry><entry><link linkend="Data_Types:FONTID"><type>FONTID</type></link></entry></row> 2675ea1d6981Smrg <row><entry><parameter>range</parameter>:</entry><entry><link linkend="Data_Types:BOOL"><type>BOOL</type></link></entry></row> 2676ea1d6981Smrg <row><entry><parameter>chars</parameter>:</entry><entry><link linkend="Data_Types:CHAR2B"><type>LISTofCHAR2B</type></link></entry></row> 2677ea1d6981Smrg <row><entry>▶</entry></row> 2678ea1d6981Smrg <row rowsep='1'><entry><parameter>extents</parameter>:</entry><entry><link linkend="Data_Types:XCHARINFO"><type>LISTofXCHARINFO</type></link></entry></row> 2679ea1d6981Smrg <row><entry>Errors:</entry><entry><link linkend="Errors:Font"><errorname>Font</errorname></link>, 2680ea1d6981Smrg<link linkend="Errors:Range"><errorname>Range</errorname></link>, 2681ea1d6981Smrg<link linkend="Errors:Alloc"><errorname>Alloc</errorname></link></entry></row> 2682ea1d6981Smrg </tbody> 2683ea1d6981Smrg </tgroup> 2684ea1d6981Smrg </informaltable> 2685ea1d6981Smrg <para> 2686ea1d6981SmrgThis request returns a list of glyph extents from the open 2687ea1d6981Smrgfont associated with FONTID for the series of characters 2688ea1d6981Smrgspecified by <parameter>RANGE</parameter> and <parameter>CHARS</parameter>. 2689ea1d6981Smrg </para> 2690ea1d6981Smrg <para> 2691ea1d6981SmrgIf <parameter>RANGE</parameter> is <constant>True</constant>, 2692ea1d6981Smrgeach succeeding pair of elements in <parameter>CHARS</parameter> is 2693ea1d6981Smrgtreated as a range of characters for which extents should be 2694ea1d6981Smrgreturned. If <parameter>CHARS</parameter> contains an odd number of elements, 2695ea1d6981Smrgthe font's <structfield>XFONTINFO.CHAR-RANGE.MAX-CHAR</structfield> 2696ea1d6981Smrgis implicitly appended to 2697ea1d6981Smrgthe list. If <parameter>CHARS</parameter> contains no elements, the list is 2698ea1d6981Smrgimplicitly replaced with the font's 2699ea1d6981Smrg<structfield>XFONTINFO.CHAR-RANGE.</structfield> If 2700ea1d6981Smrgany of the resulting character ranges are invalid, a 2701ea1d6981Smrg<link linkend="Errors:Range"><errorname>Range</errorname></link> 2702ea1d6981Smrgerror is returned. Otherwise, the character ranges are 2703ea1d6981Smrgconcatenated in the order given by <parameter>CHARS</parameter> to produce 2704ea1d6981Smrga set of character codes for which extents are returned. 2705ea1d6981Smrg </para> 2706ea1d6981Smrg <para> 2707ea1d6981SmrgIf <parameter>RANGE</parameter> is <constant>False</constant>, 2708ea1d6981Smrgthen <parameter>CHARS</parameter> specifies the set of character 2709ea1d6981Smrgcodes for which extents are returned. If <parameter>CHARS</parameter> is of 2710ea1d6981Smrgzero length, then a zero-length list of extents is returned. 2711ea1d6981Smrg </para> 2712ea1d6981Smrg <para> 2713ea1d6981SmrgThe extents for each character code in the resulting set (which 2714ea1d6981Smrgmay contain duplicates) are returned in the order in 2715ea1d6981Smrgwhich the character codes appear in the set. 2716ea1d6981SmrgAt least one metric for each character shall be non-zero 2717ea1d6981Smrgunless the character is not encoded in the font, in which case 2718ea1d6981Smrgall-zero metrics are returned. 2719ea1d6981SmrgA blank, zero-width character can be encoded 2720ea1d6981Smrgwith non-zero but equal left and right bearings. 2721ea1d6981Smrg </para> 2722ea1d6981Smrg <para> 2723ea1d6981SmrgIf <parameter>FONTID</parameter> is not associated with any open fonts, a 2724ea1d6981Smrg<link linkend="Errors:Font"><errorname>Font</errorname></link> 2725ea1d6981Smrgerror is 2726ea1d6981Smrgreturned. If <parameter>RANGE</parameter> is <constant>True</constant> 2727ea1d6981Smrgand <parameter>CHARS</parameter> contains any invalid ranges, a 2728ea1d6981Smrg<link linkend="Errors:Range"><errorname>Range</errorname></link> 2729ea1d6981Smrgerror is returned. 2730ea1d6981Smrg </para> 2731ea1d6981Smrg</section> 2732ea1d6981Smrg 2733ea1d6981Smrg<section id="Requests:QueryXBitmaps8"> 2734ea1d6981Smrg <title><function>QueryXBitmaps8</function></title> 2735ea1d6981Smrg <indexterm zone="Requests:QueryXBitmaps8" significance="preferred"><primary>QueryXBitmaps8</primary></indexterm> 2736ea1d6981Smrg <informaltable frame='none'> 2737ea1d6981Smrg <?dbfo keep-together="always" ?> 2738ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 2739ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 2740ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 2741ea1d6981Smrg <tbody> 2742ea1d6981Smrg <row><entry><parameter>fontid</parameter>:</entry><entry><link linkend="Data_Types:FONTID"><type>FONTID</type></link></entry></row> 2743ea1d6981Smrg <row><entry><parameter>range</parameter>:</entry><entry><link linkend="Data_Types:BOOL"><type>BOOL</type></link></entry></row> 2744ea1d6981Smrg <row><entry><parameter>chars</parameter>:</entry><entry><link linkend="Data_Types:STRING8"><type>STRING8</type></link></entry></row> 2745ea1d6981Smrg <row><entry><parameter>format</parameter>:</entry><entry><link linkend="Data_Types:BITMAPFORMAT"><type>BITMAPFORMAT</type></link></entry></row> 2746ea1d6981Smrg <row><entry>▶+</entry></row> 2747ea1d6981Smrg <row><entry><parameter>replies-following-hint</parameter>:</entry><entry><type>CARD32</type></entry></row> 2748ea1d6981Smrg <row><entry><parameter>offsets</parameter>:</entry><entry><link linkend="Data_Types:OFFSET32"><type>LISTofOFFSET32</type></link></entry></row> 2749ea1d6981Smrg <row><entry><parameter>bitmaps</parameter>:</entry><entry><link linkend="Data_Types:BYTE"><type>LISTofBYTE</type></link></entry></row> 2750ea1d6981Smrg <row rowsep='1'><entry>Errors:</entry><entry><link linkend="Errors:Font"><errorname>Font</errorname></link>, 2751ea1d6981Smrg<link linkend="Errors:Range"><errorname>Range</errorname></link>, 2752ea1d6981Smrg<link linkend="Errors:Format"><errorname>Format</errorname></link>, 2753ea1d6981Smrg<link linkend="Errors:Alloc"><errorname>Alloc</errorname></link></entry></row> 2754ea1d6981Smrg </tbody> 2755ea1d6981Smrg </tgroup> 2756ea1d6981Smrg </informaltable> 2757ea1d6981Smrg <para> 2758ea1d6981SmrgThis request is equivalent to 2759ea1d6981Smrg<link linkend="Requests:QueryXBitmaps16"><function>QueryXBitmaps16</function></link> 2760ea1d6981Smrgexcept that it 2761ea1d6981Smrguses 1-byte character codes. 2762ea1d6981Smrg </para> 2763ea1d6981Smrg</section> 2764ea1d6981Smrg 2765ea1d6981Smrg<section id="Requests:QueryXBitmaps16"> 2766ea1d6981Smrg <title><function>QueryXBitmaps16</function></title> 2767ea1d6981Smrg <indexterm zone="Requests:QueryXBitmaps16" significance="preferred"><primary>QueryXBitmaps16</primary></indexterm> 2768ea1d6981Smrg <informaltable frame='none'> 2769ea1d6981Smrg <?dbfo keep-together="always" ?> 2770ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 2771ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 2772ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 2773ea1d6981Smrg <tbody> 2774ea1d6981Smrg <row><entry><parameter>fontid</parameter>:</entry><entry><link linkend="Data_Types:FONTID"><type>FONTID</type></link></entry></row> 2775ea1d6981Smrg <row><entry><parameter>range</parameter>:</entry><entry><link linkend="Data_Types:BOOL"><type>BOOL</type></link></entry></row> 2776ea1d6981Smrg <row><entry><parameter>chars</parameter>:</entry><entry><link linkend="Data_Types:CHAR2B"><type>LISTofCHAR2B</type></link></entry></row> 2777ea1d6981Smrg <row><entry><parameter>format</parameter>:</entry><entry><link linkend="Data_Types:BITMAPFORMAT"><type>BITMAPFORMAT</type></link></entry></row> 2778ea1d6981Smrg <row><entry>▶+</entry></row> 2779ea1d6981Smrg <row><entry><parameter>replies-following-hint</parameter>:</entry><entry><type>CARD32</type></entry></row> 2780ea1d6981Smrg <row><entry><parameter>offsets</parameter>:</entry><entry><link linkend="Data_Types:OFFSET32"><type>LISTofOFFSET32</type></link></entry></row> 2781ea1d6981Smrg <row rowsep='1'><entry><parameter>bitmaps</parameter>:</entry><entry><link linkend="Data_Types:BYTE"><type>LISTofBYTE</type></link></entry></row> 2782ea1d6981Smrg <row><entry>Errors:</entry><entry><link linkend="Errors:Font"><errorname>Font</errorname></link>, 2783ea1d6981Smrg <link linkend="Errors:Range"><errorname>Range</errorname></link>, 2784ea1d6981Smrg <link linkend="Errors:Format"><errorname>Format</errorname></link>, 2785ea1d6981Smrg <link linkend="Errors:Alloc"><errorname>Alloc</errorname></link></entry></row> 2786ea1d6981Smrg </tbody> 2787ea1d6981Smrg </tgroup> 2788ea1d6981Smrg </informaltable> 2789ea1d6981Smrg <para> 2790ea1d6981SmrgThis request returns a list of glyph bitmaps from the open font associated 2791ea1d6981Smrgwith <parameter>FONTID</parameter> for the series of characters 2792ea1d6981Smrgspecified by <parameter>RANGE</parameter> and <parameter>CHARS</parameter>. 2793ea1d6981Smrg </para> 2794ea1d6981Smrg <para> 2795ea1d6981SmrgIf <parameter>RANGE</parameter> is <constant>True</constant>, each succeeding 2796ea1d6981Smrgpair of elements in <parameter>CHARS</parameter> is 2797ea1d6981Smrgtreated as a range of characters for which bitmaps should be 2798ea1d6981Smrgreturned. If <parameter>CHARS</parameter> contains an odd number of elements, 2799ea1d6981Smrgthe font's <structfield>XFONTINFO.CHAR-RANGE.MAX-CHAR</structfield> 2800ea1d6981Smrgis implicitly appended to 2801ea1d6981Smrgthe list. If <parameter>CHARS</parameter> contains no elements, the list is 2802ea1d6981Smrgimplicitly replaced with the font's 2803ea1d6981Smrg<structfield>XFONTINFO.CHAR-RANGE.</structfield> If 2804ea1d6981Smrgany of the resulting character ranges are invalid, a <link linkend="Errors:Range"><errorname>Range</errorname></link> 2805ea1d6981Smrgerror is returned. Otherwise, the character ranges are 2806ea1d6981Smrgconcatenated in the order given by <parameter>CHARS</parameter> to produce 2807ea1d6981Smrga set of character codes for which bitmaps are returned. 2808ea1d6981Smrg </para> 2809ea1d6981Smrg <para> 2810ea1d6981SmrgIf <parameter>RANGE</parameter> is <constant>False</constant>, 2811ea1d6981Smrgthen <parameter>CHARS</parameter> specifies the set of character 2812ea1d6981Smrgcodes for which bitmaps are returned. If <parameter>CHARS</parameter> 2813ea1d6981Smrgis of zero length, then a single reply containing a zero-length list of 2814ea1d6981Smrgoffsets and bitmaps is returned. 2815ea1d6981Smrg </para> 2816ea1d6981Smrg <para> 2817ea1d6981SmrgIf any of the resulting character ranges are invalid, a 2818ea1d6981Smrg<link linkend="Errors:Range"><errorname>Range</errorname></link> 2819ea1d6981Smrgerror is returned. Otherwise, the resulting character ranges 2820ea1d6981Smrgare concatenated in the order given by <parameter>CHARS</parameter> 2821ea1d6981Smrgto produce a set of character codes for which bitmaps are returned. 2822ea1d6981Smrg </para> 2823ea1d6981Smrg <para> 2824ea1d6981SmrgThe server is free to return the glyph bitmaps in multiple 2825ea1d6981Smrgreplies to reduce the amount of buffering that is necessary. 2826ea1d6981SmrgIn this situation, the set of characters obtained above is 2827ea1d6981Smrgpartitioned into an implementation-dependent number of 2828ea1d6981Smrgordered, non-overlapping subsets containing runs of one or 2829ea1d6981Smrgmore consecutive characters. The global ordering of 2830ea1d6981Smrgcharacters must be maintained such that concatenating the 2831ea1d6981Smrgsubsets in order that they were produced yields the original 2832ea1d6981Smrgset. A reply is generated for each subset, in the order that 2833ea1d6981Smrgit was produced. 2834ea1d6981Smrg </para> 2835ea1d6981Smrg <para> 2836ea1d6981SmrgFor each character in a subset, an image of that character's 2837ea1d6981Smrgglyph is described by a rectangle of bits corresponding to the 2838ea1d6981Smrgpixels specified by FORMAT.IMAGE-RECT. Within the image, set 2839ea1d6981Smrgand clear bits represent inked and non-inked pixels, 2840ea1d6981Smrgrespectively. 2841ea1d6981Smrg </para> 2842ea1d6981Smrg <para> 2843ea1d6981SmrgEach scanline of a glyph image, from top to bottom, is zero-padded 2844ea1d6981Smrgon the right to a multiple of the number of bits specified by 2845ea1d6981SmrgFORMAT.SCANLINE-PAD. The scanline is then divided from left 2846ea1d6981Smrgto right into a sequence of FORMAT.SCANLINE-UNIT bits. The 2847ea1d6981Smrgbits of each unit are then arranged such that the left-most 2848ea1d6981Smrgpixel is stored in the most- or least-significant bit, 2849ea1d6981Smrgaccording to FORMAT.BIT-ORDER-MSB. The bytes of each unit are 2850ea1d6981Smrgthen arranged such that the most- or least-significant byte, 2851ea1d6981Smrgaccording to FORMAT.BYTE-ORDER-MSB, is transmitted first. 2852ea1d6981SmrgFinally, the units are arranged such that the left-most is 2853ea1d6981Smrgtransmitted first and the right-most is transmitted last. 2854ea1d6981Smrg </para> 2855ea1d6981Smrg <para> 2856ea1d6981SmrgThe individual images within a subset are then concatenated in 2857ea1d6981Smrga server-dependent order to form the <parameter>BITMAPS</parameter> data 2858ea1d6981Smrgof the reply. If a glyph image is duplicated within a reply, the 2859ea1d6981Smrgserver is free to return fewer (but at least one) copies of 2860ea1d6981Smrgthe image. If a character is not encoded within the font, a 2861ea1d6981Smrgzero-length bitmap is substituted for this character. Each 2862ea1d6981Smrgglyph image must begin at a bit position that is a multiple of 2863ea1d6981Smrgthe FORMAT.SCANLINE-UNIT. 2864ea1d6981Smrg </para> 2865ea1d6981Smrg <para> 2866ea1d6981SmrgThe <parameter>OFFSETS</parameter> array in a reply contains one entry 2867ea1d6981Smrgfor each character in the subset being returned, in the order that the 2868ea1d6981Smrgcharacters appear in the subset. Each entry specifies the 2869ea1d6981Smrgstarting location in bytes and size in bytes of the 2870ea1d6981Smrgcorresponding glyph image in the <parameter>BITMAPS</parameter> data of that 2871ea1d6981Smrgreply (i.e. an offset may not refer to data in another reply). 2872ea1d6981Smrg </para> 2873ea1d6981Smrg <para> 2874ea1d6981SmrgThe <parameter>REPLIES-FOLLOWING-HINT</parameter> field in all but the 2875ea1d6981Smrglast reply contains a positive value that specifies the number of replies 2876ea1d6981Smrgthat are likely, but not required, to follow. In the last 2877ea1d6981Smrgreply, which may contain data for zero or more characters, 2878ea1d6981Smrgthis field is set to zero. 2879ea1d6981Smrg </para> 2880ea1d6981Smrg <para> 2881ea1d6981SmrgIf <parameter>FONTID</parameter> is not associated with any open fonts, 2882ea1d6981Smrga <link linkend="Errors:Font"><errorname>Font</errorname></link> 2883ea1d6981Smrgerror is returned. If <parameter>RANGE</parameter> is 2884ea1d6981Smrg<constant>True</constant> and <parameter>CHARS</parameter> contains any 2885ea1d6981Smrginvalid ranges, a 2886ea1d6981Smrg<link linkend="Errors:Range"><errorname>Range</errorname></link> error 2887ea1d6981Smrgis returned. If <parameter>FORMAT</parameter> is invalid, a 2888ea1d6981Smrg<link linkend="Errors:Format"><errorname>Format</errorname></link> error 2889ea1d6981Smrgis returned. 2890ea1d6981Smrg </para> 2891ea1d6981Smrg</section> 2892ea1d6981Smrg 2893ea1d6981Smrg<section id="Requests:CloseFont"> 2894ea1d6981Smrg <title><function>CloseFont</function></title> 2895ea1d6981Smrg <indexterm zone="Requests:CloseFont" significance="preferred"><primary>CloseFont</primary></indexterm> 2896ea1d6981Smrg <informaltable frame='none'> 2897ea1d6981Smrg <?dbfo keep-together="always" ?> 2898ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 2899ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 2900ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 2901ea1d6981Smrg <tbody> 2902ea1d6981Smrg <row rowsep='1'><entry><parameter>fontid</parameter>:</entry><entry><link linkend="Data_Types:FONTID"><type>FONTID</type></link></entry></row> 2903ea1d6981Smrg <row><entry>Errors:</entry><entry><link linkend="Errors:Font"><errorname>Font</errorname></link>, <link linkend="Errors:Alloc"><errorname>Alloc</errorname></link></entry></row> 2904ea1d6981Smrg </tbody> 2905ea1d6981Smrg </tgroup> 2906ea1d6981Smrg </informaltable> 2907ea1d6981Smrg <para> 2908ea1d6981SmrgThis request indicates that the specified <parameter>FONTID</parameter> 2909ea1d6981Smrgshould no longer be associated with an open font. The server is free to 2910ea1d6981Smrgrelease any client-specific storage or licenses allocated for 2911ea1d6981Smrgthe font. The client may reuse the value of <parameter>FONTID</parameter> 2912ea1d6981Smrgin a subsequent 2913ea1d6981Smrg<link linkend="Requests:OpenBitmapFont"><function>OpenBitmapFont</function></link> 2914ea1d6981Smrgrequest. 2915ea1d6981Smrg </para> 2916ea1d6981Smrg <para> 2917ea1d6981SmrgIf <parameter>FONTID</parameter> is not associated with any open fonts, a 2918ea1d6981Smrg<link linkend="Errors:Font"><errorname>Font</errorname></link> 2919ea1d6981Smrgerror is returned. 2920ea1d6981Smrg </para> 2921ea1d6981Smrg</section> 2922ea1d6981Smrg 2923ea1d6981Smrg<section id="Requests:close_connection"> 2924ea1d6981Smrg <title>close connection</title> 2925ea1d6981Smrg <indexterm zone="Requests:close_connection" significance="preferred"><primary>close connection</primary></indexterm> 2926ea1d6981Smrg 2927ea1d6981Smrg <para> 2928ea1d6981SmrgWhen a connection is closed, a 2929ea1d6981Smrg<link linkend="Requests:CloseFont"><function>CloseFont</function></link> 2930ea1d6981Smrgis done on all fonts 2931ea1d6981Smrgthat are open on the connection. In addition, the server is 2932ea1d6981Smrgfree to release any storage or licenses allocated on behalf of 2933ea1d6981Smrgthe client that made the connection. 2934ea1d6981Smrg </para> 2935ea1d6981Smrg</section> 2936ea1d6981Smrg</section> 2937ea1d6981Smrg 2938ea1d6981Smrg<section id='Errors'> 2939ea1d6981Smrg<title>Errors</title> 2940ea1d6981Smrg<!-- .XS --> 2941ea1d6981Smrg<!-- (SN Errors --> 2942ea1d6981Smrg<!-- .XE --> 2943ea1d6981Smrg<para> 2944ea1d6981SmrgAll errors are at least 16 bytes long and contain the following fields: 2945ea1d6981Smrg</para> 2946ea1d6981Smrg <informaltable frame='none'> 2947ea1d6981Smrg <?dbfo keep-together="always" ?> 2948ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 2949ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 2950ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 2951ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 2952ea1d6981Smrg <tbody> 2953ea1d6981Smrg <row><entry><parameter>type</parameter>:</entry><entry><type>CARD8</type></entry><entry>value of 1</entry></row> 2954ea1d6981Smrg <row><entry><parameter>error-code</parameter>:</entry><entry><type>CARD8</type></entry></row> 2955ea1d6981Smrg <row><entry><parameter>sequence-number</parameter>:</entry><entry><type>CARD16</type></entry></row> 2956ea1d6981Smrg <row><entry><parameter>length</parameter>:</entry><entry><type>CARD32</type></entry></row> 2957ea1d6981Smrg <row><entry><parameter>timestamp</parameter>:</entry><entry><link linkend="Data_Types:TIMESTAMP"><type>TIMESTAMP</type></link></entry></row> 2958ea1d6981Smrg <row><entry><parameter>major-opcode</parameter>:</entry><entry><type>CARD8</type></entry></row> 2959ea1d6981Smrg <row><entry><parameter>minor-opcode</parameter>:</entry><entry><type>CARD8</type></entry></row> 2960ea1d6981Smrg <row><entry><parameter>data-or-unused</parameter>:</entry><entry><type>CARD16</type></entry></row> 2961ea1d6981Smrg </tbody> 2962ea1d6981Smrg </tgroup> 2963ea1d6981Smrg </informaltable> 2964ea1d6981Smrg<para> 2965ea1d6981SmrgThe TYPE field has a value of one. The ERROR-CODE field specifies which error 2966ea1d6981Smrgoccurred. Core errors codes are in the range 0 through 127, extension error 2967ea1d6981Smrgcodes are in the range 128 through 255. The SEQUENCE-NUMBER field contains the 2968ea1d6981Smrgleast significant 16 bits of the sequence number of the request that caused the 2969ea1d6981Smrgerror. The LENGTH field specifies the length of the error packet in 4-byte 2970ea1d6981Smrgunits and must have a value of at least 4. The TIMESTAMP specifies the server 2971ea1d6981Smrgtime when the error occurred. The MAJOR-OPCODE and MINOR-OPCODE (zero for core 2972ea1d6981Smrgrequests) fields specify the type of request that generated the error. The 2973ea1d6981SmrgDATA-OR-UNUSED field may be used for 16 bits of error-specific information. If 2974ea1d6981SmrgLENGTH is greater than four, these fields are followed by (LENGTH - 4) * 4 2975ea1d6981Smrgbytes of extra data. 2976ea1d6981Smrg</para> 2977ea1d6981Smrg<para> 2978ea1d6981SmrgThe following errors are defined for the core protocol: 2979ea1d6981Smrg</para> 2980ea1d6981Smrg 2981ea1d6981Smrg<section id="Errors:Request"> 2982ea1d6981Smrg <title><errorname>Request</errorname></title> 2983ea1d6981Smrg <indexterm zone="Errors:Request" significance="preferred"><primary>Error Codes</primary><secondary><errorname>Request</errorname></secondary></indexterm> 2984ea1d6981Smrg <informaltable frame='none'> 2985ea1d6981Smrg <?dbfo keep-together="always" ?> 2986ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 2987ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 2988ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 2989ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 2990ea1d6981Smrg <tbody> 2991ea1d6981Smrg <row><entry><parameter>data-or-unused</parameter>:</entry><entry><type>CARD16</type></entry><entry>unused</entry></row> 2992ea1d6981Smrg </tbody> 2993ea1d6981Smrg </tgroup> 2994ea1d6981Smrg </informaltable> 2995ea1d6981Smrg <para> 2996ea1d6981SmrgThis error is generated by any request that has an unknown 2997ea1d6981Smrgcombination of major and minor request numbers, or by any 2998ea1d6981Smrgextension request that is issued before a 2999ea1d6981Smrg<link linkend="Requests:QueryExtension"><function>QueryExtension</function></link> 3000ea1d6981Smrgof that extension. 3001ea1d6981Smrg </para> 3002ea1d6981Smrg</section> 3003ea1d6981Smrg 3004ea1d6981Smrg<section id="Errors:Format"> 3005ea1d6981Smrg <title><errorname>Format</errorname></title> 3006ea1d6981Smrg <indexterm zone="Errors:Format" significance="preferred"><primary>Error Codes</primary><secondary><errorname>Format</errorname></secondary></indexterm> 3007ea1d6981Smrg <informaltable frame='none'> 3008ea1d6981Smrg <?dbfo keep-together="always" ?> 3009ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 3010ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 3011ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3012ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3013ea1d6981Smrg <tbody> 3014ea1d6981Smrg <row><entry><parameter>data-or-unused</parameter>:</entry><entry><type>CARD16</type></entry><entry>unused</entry></row> 3015ea1d6981Smrg <row><entry><parameter>format</parameter>:</entry><entry><link linkend="Data_Types:BITMAPFORMAT"><type>BITMAPFORMAT</type></link></entry><entry>bad format value</entry></row> 3016ea1d6981Smrg </tbody> 3017ea1d6981Smrg </tgroup> 3018ea1d6981Smrg </informaltable> 3019ea1d6981Smrg <para> 3020ea1d6981SmrgThis error is generated by the use of an invalid <link linkend="Data_Types:BITMAPFORMAT"><type>BITMAPFORMAT</type></link> 3021ea1d6981Smrgin the 3022ea1d6981Smrg<link linkend="Requests:OpenBitmapFont"><function>OpenBitmapFont</function></link>, 3023ea1d6981Smrg<link linkend="Requests:QueryXBitmaps8"><function>QueryXBitmaps8</function></link>, and 3024ea1d6981Smrg<link linkend="Requests:QueryXBitmaps16"><function>QueryXBitmaps16</function></link> 3025ea1d6981Smrgrequests. 3026ea1d6981SmrgThe value that caused the error is included as extra data. 3027ea1d6981Smrg </para> 3028ea1d6981Smrg</section> 3029ea1d6981Smrg 3030ea1d6981Smrg<section id="Errors:Font"> 3031ea1d6981Smrg <title><errorname>Font</errorname></title> 3032ea1d6981Smrg <indexterm zone="Errors:Font" significance="preferred"><primary>Error Codes</primary><secondary><errorname>Font</errorname></secondary></indexterm> 3033ea1d6981Smrg <informaltable frame='none'> 3034ea1d6981Smrg <?dbfo keep-together="always" ?> 3035ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 3036ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 3037ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3038ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3039ea1d6981Smrg <tbody> 3040ea1d6981Smrg <row><entry><parameter>data-or-unused</parameter>:</entry><entry><type>CARD16</type></entry><entry>unused</entry></row> 3041ea1d6981Smrg <row><entry><parameter>fontid</parameter>:</entry><entry><link linkend="Data_Types:FONTID"><type>FONTID</type></link></entry><entry>bad font identifier</entry></row> 3042ea1d6981Smrg </tbody> 3043ea1d6981Smrg </tgroup> 3044ea1d6981Smrg </informaltable> 3045ea1d6981Smrg <para> 3046ea1d6981SmrgThis error is generated by an invalid <link linkend="Data_Types:FONTID"><type>FONTID</type></link> in the 3047ea1d6981Smrg<link linkend="Requests:QueryXInfo"><function>QueryXInfo</function></link>, 3048ea1d6981Smrg<link linkend="Requests:QueryXExtents8"><function>QueryXExtents8</function></link>, 3049ea1d6981Smrg<link linkend="Requests:QueryXExtents16"><function>QueryXExtents16</function></link>, 3050ea1d6981Smrg<link linkend="Requests:QueryXBitmaps8"><function>QueryXBitmaps8</function></link>, 3051ea1d6981Smrg<link linkend="Requests:QueryXBitmaps16"><function>QueryXBitmaps16</function></link> 3052ea1d6981Smrgand 3053ea1d6981Smrg<link linkend="Requests:CloseFont"><function>CloseFont</function></link> 3054ea1d6981Smrgrequests. The value that caused 3055ea1d6981Smrgthe error is included as extra data. 3056ea1d6981Smrg </para> 3057ea1d6981Smrg</section> 3058ea1d6981Smrg 3059ea1d6981Smrg<section id="Errors:Range"> 3060ea1d6981Smrg <title><errorname>Range</errorname></title> 3061ea1d6981Smrg <indexterm zone="Errors:Range" significance="preferred"><primary>Error Codes</primary><secondary><errorname>Range</errorname></secondary></indexterm> 3062ea1d6981Smrg <informaltable frame='none'> 3063ea1d6981Smrg <?dbfo keep-together="always" ?> 3064ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 3065ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 3066ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3067ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3068ea1d6981Smrg <tbody> 3069ea1d6981Smrg <row><entry><parameter>data-or-unused</parameter>:</entry><entry><type>CARD16</type></entry><entry>unused</entry></row> 3070ea1d6981Smrg <row><entry><parameter>range</parameter>:</entry><entry><link linkend="Data_Types:RANGE"><type>RANGE</type></link></entry><entry>bad range</entry></row> 3071ea1d6981Smrg </tbody> 3072ea1d6981Smrg </tgroup> 3073ea1d6981Smrg </informaltable> 3074ea1d6981Smrg <para> 3075ea1d6981SmrgThis error is generated by an invalid <link linkend="Data_Types:RANGE"><type>RANGE</type></link> in the 3076ea1d6981Smrg<link linkend="Requests:QueryXExtents8"><function>QueryXExtents8</function></link>, 3077ea1d6981Smrg<link linkend="Requests:QueryXExtents16"><function>QueryXExtents16</function></link>, 3078ea1d6981Smrg<link linkend="Requests:QueryXBitmaps8"><function>QueryXBitmaps8</function></link> 3079ea1d6981Smrgand 3080ea1d6981Smrg<link linkend="Requests:QueryXBitmaps16"><function>QueryXBitmaps16</function></link> 3081ea1d6981Smrgrequests. The 3082ea1d6981Smrgvalue that caused the error is included as extra data. 3083ea1d6981Smrg </para> 3084ea1d6981Smrg</section> 3085ea1d6981Smrg 3086ea1d6981Smrg<section id="Errors:EventMask"> 3087ea1d6981Smrg <title><errorname>EventMask</errorname></title> 3088ea1d6981Smrg <indexterm zone="Errors:EventMask" significance="preferred"><primary>Error Codes</primary><secondary><errorname>EventMask</errorname></secondary></indexterm> 3089ea1d6981Smrg <informaltable frame='none'> 3090ea1d6981Smrg <?dbfo keep-together="always" ?> 3091ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 3092ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 3093ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3094ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3095ea1d6981Smrg <tbody> 3096ea1d6981Smrg <row><entry><parameter>data-or-unused</parameter>:</entry><entry><type>CARD16</type></entry><entry>unused</entry></row> 3097ea1d6981Smrg <row><entry><parameter>event-mask</parameter>:</entry><entry><link linkend="Data_Types:EVENTMASK"><type>EVENTMASK</type></link></entry><entry>bad event mask</entry></row> 3098ea1d6981Smrg </tbody> 3099ea1d6981Smrg </tgroup> 3100ea1d6981Smrg </informaltable> 3101ea1d6981Smrg <para> 3102ea1d6981SmrgThis error is generated by an invalid <link linkend="Data_Types:EVENTMASK"><type>EVENTMASK</type></link> in the 3103ea1d6981Smrg<link linkend="Requests:SetEventMask"><function>SetEventMask</function></link> 3104ea1d6981Smrgrequest. The value that caused the error is 3105ea1d6981Smrgincluded as extra data. 3106ea1d6981Smrg </para> 3107ea1d6981Smrg</section> 3108ea1d6981Smrg 3109ea1d6981Smrg<section id="Errors:AccessContext"> 3110ea1d6981Smrg <title><errorname>AccessContext</errorname></title> 3111ea1d6981Smrg <indexterm zone="Errors:AccessContext" significance="preferred"><primary>Error Codes</primary><secondary><errorname>AccessContext</errorname></secondary></indexterm> 3112ea1d6981Smrg <informaltable frame='none'> 3113ea1d6981Smrg <?dbfo keep-together="always" ?> 3114ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 3115ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 3116ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3117ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3118ea1d6981Smrg <tbody> 3119ea1d6981Smrg <row><entry><parameter>data-or-unused</parameter>:</entry><entry><type>CARD16</type></entry><entry>unused</entry></row> 3120ea1d6981Smrg <row><entry><parameter>ac</parameter>:</entry><entry><link linkend="Data_Types:ACCESSCONTEXT"><type>ACCESSCONTEXT</type></link></entry><entry>unaccepted <type>AccessContext</type></entry></row> 3121ea1d6981Smrg </tbody> 3122ea1d6981Smrg </tgroup> 3123ea1d6981Smrg </informaltable> 3124ea1d6981Smrg <para> 3125ea1d6981SmrgThis error is generated by an invalid <link linkend="Data_Types:ACCESSCONTEXT"><type>ACCESSCONTEXT</type></link> in the 3126ea1d6981Smrg<link linkend="Requests:FreeAC"><function>FreeAC</function></link> 3127ea1d6981Smrgor 3128ea1d6981Smrg<link linkend="Requests:SetAuthorization"><function>SetAuthorization</function></link> 3129ea1d6981Smrgrequest or by an 3130ea1d6981Smrg<link linkend="Requests:OpenBitmapFont"><function>OpenBitmapFont</function></link> 3131ea1d6981Smrgrequest performed without sufficient authorization. In the 3132ea1d6981Smrgfirst two cases, the <link linkend="Data_Types:ACCESSCONTEXT"><type>ACCESSCONTEXT</type></link> of the errant request is 3133ea1d6981Smrgreturned as extra data. In the third case, the current 3134ea1d6981Smrg<link linkend="Data_Types:ACCESSCONTEXT"><type>ACCESSCONTEXT</type></link> is returned as extra data. 3135ea1d6981Smrg </para> 3136ea1d6981Smrg</section> 3137ea1d6981Smrg 3138ea1d6981Smrg<section id="Errors:IDChoice"> 3139ea1d6981Smrg <title><errorname>IDChoice</errorname></title> 3140ea1d6981Smrg <indexterm zone="Errors:IDChoice" significance="preferred"><primary>Error Codes</primary><secondary><errorname>IDChoice</errorname></secondary></indexterm> 3141ea1d6981Smrg <informaltable frame='none'> 3142ea1d6981Smrg <?dbfo keep-together="always" ?> 3143ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 3144ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 3145ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3146ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3147ea1d6981Smrg <tbody> 3148ea1d6981Smrg <row><entry><parameter>data-or-unused</parameter>:</entry><entry><type>CARD16</type></entry><entry>unused</entry></row> 3149ea1d6981Smrg <row><entry><parameter>id</parameter>:</entry><entry><link linkend="Data_Types:ID"><type>ID</type></link></entry><entry>bad identifier</entry></row> 3150ea1d6981Smrg </tbody> 3151ea1d6981Smrg </tgroup> 3152ea1d6981Smrg </informaltable> 3153ea1d6981Smrg <para> 3154ea1d6981SmrgThis error is generated by an invalid or already associated 3155ea1d6981Smrg<link linkend="Data_Types:ACCESSCONTEXT"><type>ACCESSCONTEXT</type></link> identifier in a 3156ea1d6981Smrg<link linkend="Requests:CreateAC"><function>CreateAC</function></link> 3157ea1d6981Smrgrequest or <link linkend="Data_Types:FONTID"><type>FONTID</type></link> identifier 3158ea1d6981Smrgin an 3159ea1d6981Smrg<link linkend="Requests:OpenBitmapFont"><function>OpenBitmapFont</function></link> 3160ea1d6981Smrgrequest. The value that caused the error 3161ea1d6981Smrgis included as extra data. 3162ea1d6981Smrg </para> 3163ea1d6981Smrg</section> 3164ea1d6981Smrg 3165ea1d6981Smrg<section id="Errors:Name"> 3166ea1d6981Smrg <title><errorname>Name</errorname></title> 3167ea1d6981Smrg <indexterm zone="Errors:Name" significance="preferred"><primary>Error Codes</primary><secondary><errorname>Name</errorname></secondary></indexterm> 3168ea1d6981Smrg <informaltable frame='none'> 3169ea1d6981Smrg <?dbfo keep-together="always" ?> 3170ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 3171ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 3172ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3173ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3174ea1d6981Smrg <tbody> 3175ea1d6981Smrg <row><entry><parameter>data-or-unused</parameter>:</entry><entry><type>CARD16</type></entry><entry>unused</entry></row> 3176ea1d6981Smrg </tbody> 3177ea1d6981Smrg </tgroup> 3178ea1d6981Smrg </informaltable> 3179ea1d6981Smrg <para> 3180ea1d6981SmrgThis error is generated by a font name pattern that matches 3181ea1d6981Smrgno fonts in an 3182ea1d6981Smrg<link linkend="Requests:OpenBitmapFont"><function>OpenBitmapFont</function></link> 3183ea1d6981Smrgrequest or no catalogue names in a 3184ea1d6981Smrg<link linkend="Requests:SetCatalogues"><function>SetCatalogues</function></link> 3185ea1d6981Smrgrequest. 3186ea1d6981Smrg </para> 3187ea1d6981Smrg</section> 3188ea1d6981Smrg 3189ea1d6981Smrg<section id="Errors:Resolution"> 3190ea1d6981Smrg <title><errorname>Resolution</errorname></title> 3191ea1d6981Smrg <indexterm zone="Errors:Resolution" significance="preferred"><primary>Error Codes</primary><secondary><errorname>Resolution</errorname></secondary></indexterm> 3192ea1d6981Smrg <informaltable frame='none'> 3193ea1d6981Smrg <?dbfo keep-together="always" ?> 3194ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 3195ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 3196ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3197ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3198ea1d6981Smrg <tbody> 3199ea1d6981Smrg <row><entry><parameter>data-or-unused</parameter>:</entry><entry><type>CARD16</type></entry><entry>X value of errant resolution</entry></row> 3200ea1d6981Smrg <row><entry><parameter>y-resolution</parameter>:</entry><entry><type>CARD16</type></entry><entry>Y value of errant resolution</entry></row> 3201ea1d6981Smrg <row><entry><parameter>point-size</parameter>:</entry><entry><type>CARD16</type></entry><entry>point size of errant resolution</entry></row> 3202ea1d6981Smrg </tbody> 3203ea1d6981Smrg </tgroup> 3204ea1d6981Smrg </informaltable> 3205ea1d6981Smrg <para> 3206ea1d6981SmrgThis error is generated in response to an invalid <link linkend="Data_Types:RESOLUTION"><type>RESOLUTION</type></link> 3207ea1d6981Smrgstructure in a 3208ea1d6981Smrg<link linkend="Requests:SetResolution"><function>SetResolution</function></link> 3209ea1d6981Smrgrequest. The value that caused the 3210ea1d6981Smrgerror is included in the DATA-OR-UNUSED field and as extra data. 3211ea1d6981Smrg </para> 3212ea1d6981Smrg</section> 3213ea1d6981Smrg 3214ea1d6981Smrg<section id="Errors:Alloc"> 3215ea1d6981Smrg <title><errorname>Alloc</errorname></title> 3216ea1d6981Smrg <indexterm zone="Errors:Length" significance="preferred"><primary>Error Codes</primary><secondary><errorname>Alloc</errorname></secondary></indexterm> 3217ea1d6981Smrg <informaltable frame='none'> 3218ea1d6981Smrg <?dbfo keep-together="always" ?> 3219ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 3220ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 3221ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3222ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3223ea1d6981Smrg <tbody> 3224ea1d6981Smrg <row><entry><parameter>data-or-unused</parameter>:</entry><entry><type>CARD16</type></entry><entry>unused</entry></row> 3225ea1d6981Smrg </tbody> 3226ea1d6981Smrg </tgroup> 3227ea1d6981Smrg </informaltable> 3228ea1d6981Smrg <para> 3229ea1d6981SmrgThis error is generated by any request for which the server 3230ea1d6981Smrglacks sufficient resources (especially memory). 3231ea1d6981Smrg </para> 3232ea1d6981Smrg</section> 3233ea1d6981Smrg 3234ea1d6981Smrg<section id="Errors:Length"> 3235ea1d6981Smrg <title><errorname>Length</errorname></title> 3236ea1d6981Smrg <indexterm zone="Errors:Length" significance="preferred"><primary>Error Codes</primary><secondary><errorname>Length</errorname></secondary></indexterm> 3237ea1d6981Smrg <informaltable frame='none'> 3238ea1d6981Smrg <?dbfo keep-together="always" ?> 3239ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 3240ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 3241ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3242ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3243ea1d6981Smrg <tbody> 3244ea1d6981Smrg <row><entry><parameter>data-or-unused</parameter>:</entry><entry><type>CARD16</type></entry><entry>unused</entry></row> 3245ea1d6981Smrg <row><entry><parameter>length</parameter>:</entry><entry><type>CARD32</type></entry><entry>bad length value</entry></row> 3246ea1d6981Smrg </tbody> 3247ea1d6981Smrg </tgroup> 3248ea1d6981Smrg </informaltable> 3249ea1d6981Smrg <para> 3250ea1d6981SmrgThis error is generated by any request that has a length field 3251ea1d6981Smrggreater than (MAXIMUM-REQUEST-LENGTH * 4) bytes. The value that 3252ea1d6981Smrgcaused the error is included as extra data. 3253ea1d6981Smrg </para> 3254ea1d6981Smrg</section> 3255ea1d6981Smrg 3256ea1d6981Smrg<section id="Errors:Implementation"> 3257ea1d6981Smrg <title><errorname>Implementation</errorname></title> 3258ea1d6981Smrg <indexterm zone="Errors:Implementation" significance="preferred"><primary>Error Codes</primary><secondary><errorname>Implementation</errorname></secondary></indexterm> 3259ea1d6981Smrg <informaltable frame='none'> 3260ea1d6981Smrg <?dbfo keep-together="always" ?> 3261ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 3262ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 3263ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3264ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3265ea1d6981Smrg <tbody> 3266ea1d6981Smrg <row><entry><parameter>data-or-unused</parameter>:</entry><entry><type>CARD16</type></entry><entry>unused</entry></row> 3267ea1d6981Smrg </tbody> 3268ea1d6981Smrg </tgroup> 3269ea1d6981Smrg </informaltable> 3270ea1d6981Smrg <para> 3271ea1d6981SmrgThis error may be generated in response to any request that 3272ea1d6981Smrgthe server is unable to process because it is deficient. Use 3273ea1d6981Smrgof this error is highly discouraged and indicates lack of 3274ea1d6981Smrgconformance to the protocol. 3275ea1d6981Smrg </para> 3276ea1d6981Smrg</section> 3277ea1d6981Smrg<section id="Errors:Extensions"> 3278ea1d6981Smrg <title>Extensions</title> 3279ea1d6981Smrg <para> 3280ea1d6981SmrgAdditional errors may be defined by extensions. 3281ea1d6981Smrg </para> 3282ea1d6981Smrg</section> 3283ea1d6981Smrg</section> 3284ea1d6981Smrg 3285ea1d6981Smrg<section id='Events'> 3286ea1d6981Smrg<title>Events</title> 3287ea1d6981Smrg<!-- .XS --> 3288ea1d6981Smrg<!-- (SN Events --> 3289ea1d6981Smrg<!-- .XE --> 3290ea1d6981Smrg<para> 3291ea1d6981SmrgEvents may be generated in response to requests or at the server's discretion 3292ea1d6981Smrgafter the initial connection setup information has been exchanged. Each event 3293ea1d6981Smrgis at least 12 bytes long and contains the following fields: 3294ea1d6981Smrg <informaltable frame='none'> 3295ea1d6981Smrg <?dbfo keep-together="always" ?> 3296ea1d6981Smrg <tgroup cols='3' align='left' colsep='0' rowsep='0'> 3297ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 3298ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3299ea1d6981Smrg <colspec colname='c3' colwidth='1.0*'/> 3300ea1d6981Smrg <tbody> 3301ea1d6981Smrg <row><entry><parameter>type</parameter>:</entry><entry><type>CARD8</type></entry><entry>value of 2</entry></row> 3302ea1d6981Smrg <row><entry><parameter>event-code</parameter>:</entry><entry><type>CARD8</type></entry></row> 3303ea1d6981Smrg <row><entry><parameter>sequence-number</parameter>:</entry><entry><type>CARD16</type></entry></row> 3304ea1d6981Smrg <row><entry><parameter>length</parameter>:</entry><entry><type>CARD32</type></entry></row> 3305ea1d6981Smrg <row><entry><parameter>timestamp</parameter>:</entry><entry><link linkend="Data_Types:TIMESTAMP"><type>TIMESTAMP</type></link></entry></row> 3306ea1d6981Smrg </tbody> 3307ea1d6981Smrg </tgroup> 3308ea1d6981Smrg </informaltable> 3309ea1d6981Smrg</para> 3310ea1d6981Smrg<para> 3311ea1d6981SmrgThe TYPE field contains the value 2. The EVENT-CODE field specifies the number 3312ea1d6981Smrgof the event and is in the range 0-127 for core events or the range 128-255 for 3313ea1d6981Smrgextensions. The SEQUENCE-NUMBER field specifies the least significant 16 bits 3314ea1d6981Smrgof the sequence number of the last request to have been processed by the 3315ea1d6981Smrgserver. The LENGTH field specifies the number of 4-byte units in this event 3316ea1d6981Smrgpacket and must always have a value of at least 3. The <link linkend="Data_Types:TIMESTAMP"><type>TIMESTAMP</type></link> field 3317ea1d6981Smrgspecifies the server time when the event occurred. If LENGTH is greater than 3318ea1d6981Smrgthree, these fields are followed by (LENGTH - 3) * 4 bytes of additional data. 3319ea1d6981Smrg</para> 3320ea1d6981Smrg<para> 3321ea1d6981SmrgEvents are described using the following syntax: 3322ea1d6981Smrg <blockquote><para> 3323ea1d6981Smrg <emphasis role="bold"><function>EventName</function></emphasis> 3324ea1d6981Smrg <informaltable frame='none'> 3325ea1d6981Smrg <?dbfo keep-together="always" ?> 3326ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 3327ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 3328ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3329ea1d6981Smrg <tbody> 3330ea1d6981Smrg <row><entry><parameter>arg1</parameter>:</entry><entry><type>type1</type></entry></row> 3331ea1d6981Smrg <row><entry> ...</entry></row> 3332ea1d6981Smrg <row><entry><parameter>argN</parameter>:</entry><entry><type>typeN</type></entry></row> 3333ea1d6981Smrg </tbody> 3334ea1d6981Smrg </tgroup> 3335ea1d6981Smrg </informaltable> 3336ea1d6981Smrg Description 3337ea1d6981Smrg </para></blockquote> 3338ea1d6981Smrg</para> 3339ea1d6981Smrg<para> 3340ea1d6981SmrgIf an event does not provide any extra arguments, the 3341ea1d6981Smrg<parameter>arg1</parameter>...<parameter>argN</parameter> 3342ea1d6981Smrglines are omitted from the description. 3343ea1d6981Smrg</para> 3344ea1d6981Smrg<para> 3345ea1d6981SmrgThe core X Font Service protocol defines the following events: 3346ea1d6981Smrg</para> 3347ea1d6981Smrg 3348ea1d6981Smrg<section id="Events:KeepAlive"> 3349ea1d6981Smrg <title><function>KeepAlive</function></title> 3350ea1d6981Smrg <indexterm zone="Events:KeepAlive" significance="preferred"><primary>KeepAlive</primary></indexterm> 3351ea1d6981Smrg <para> 3352ea1d6981SmrgThis unsolicited, nonmaskable event may be sent by the 3353ea1d6981Smrgserver to verify that the connection has not been broken 3354ea1d6981Smrg(for transports that do not provide this information). 3355ea1d6981SmrgClients should acknowledge receipt of this request 3356ea1d6981Smrgby sending any request (such as 3357ea1d6981Smrg<link linkend="Requests:NoOp"><function>NoOp</function></link> 3358ea1d6981Smrg). 3359ea1d6981Smrg </para> 3360ea1d6981Smrg</section> 3361ea1d6981Smrg 3362ea1d6981Smrg<section id="Events:CatalogueListNotify"> 3363ea1d6981Smrg <title><function>CatalogueListNotify</function></title> 3364ea1d6981Smrg <indexterm zone="Events:CatalogueListNotify" significance="preferred"><primary>CatalogueListNotify</primary></indexterm> 3365ea1d6981Smrg <informaltable frame='none'> 3366ea1d6981Smrg <?dbfo keep-together="always" ?> 3367ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 3368ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 3369ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3370ea1d6981Smrg <tbody> 3371ea1d6981Smrg <row><entry><parameter>added</parameter>:</entry><entry><link linkend="Data_Types:BOOL"><type>BOOL</type></link></entry></row> 3372ea1d6981Smrg <row><entry><parameter>deleted</parameter>:</entry><entry><link linkend="Data_Types:BOOL"><type>BOOL</type></link></entry></row> 3373ea1d6981Smrg </tbody> 3374ea1d6981Smrg </tgroup> 3375ea1d6981Smrg </informaltable> 3376ea1d6981Smrg <para> 3377ea1d6981SmrgThis event is sent to clients that have included 3378ea1d6981Smrg<function><constant>CatalogueListChangeMask</constant></function> 3379ea1d6981Smrgin their core event mask 3380ea1d6981Smrgwhenever the list of catalogues that are available has 3381ea1d6981Smrgchanged. The ADDED field is <constant>True</constant> if new catalogues have 3382ea1d6981Smrgbeen added to the server, otherwise it is <constant>False</constant>. The 3383ea1d6981SmrgDELETED field is <constant>True</constant> if any existing catalogues have 3384ea1d6981Smrgbeen removed from the server, otherwise it is <constant>False</constant>. 3385ea1d6981Smrg </para> 3386ea1d6981Smrg</section> 3387ea1d6981Smrg 3388ea1d6981Smrg<section id="Events:FontListNotify"> 3389ea1d6981Smrg <title><function>FontListNotify</function></title> 3390ea1d6981Smrg <indexterm zone="Events:FontListNotify" significance="preferred"><primary>FontListNotify</primary></indexterm> 3391ea1d6981Smrg <informaltable frame='none'> 3392ea1d6981Smrg <?dbfo keep-together="always" ?> 3393ea1d6981Smrg <tgroup cols='2' align='left' colsep='0' rowsep='0'> 3394ea1d6981Smrg <colspec colname='c1' colwidth='1.0*'/> 3395ea1d6981Smrg <colspec colname='c2' colwidth='1.0*'/> 3396ea1d6981Smrg <tbody> 3397ea1d6981Smrg <row><entry><parameter>added</parameter>:</entry><entry><link linkend="Data_Types:BOOL"><type>BOOL</type></link></entry></row> 3398ea1d6981Smrg <row><entry><parameter>deleted</parameter>:</entry><entry><link linkend="Data_Types:BOOL"><type>BOOL</type></link></entry></row> 3399ea1d6981Smrg </tbody> 3400ea1d6981Smrg </tgroup> 3401ea1d6981Smrg </informaltable> 3402ea1d6981Smrg <para> 3403ea1d6981SmrgThis event is sent to clients that have included 3404ea1d6981Smrg<function><constant>FontListChangeMask</constant></function> 3405ea1d6981Smrgin their event mask whenever the 3406ea1d6981Smrglist of fonts that are provided by the currently selected 3407ea1d6981Smrgcatalogues has changed. The ADDED field is <constant>True</constant> if new 3408ea1d6981Smrgfonts have been added to any of the catalogues currently 3409ea1d6981Smrgused by the client, otherwise it is <constant>False</constant>. The DELETED 3410ea1d6981Smrgfield is <constant>True</constant> if any existing fonts have been removed 3411ea1d6981Smrgfrom any of catalogues used by the client, otherwise it 3412ea1d6981Smrgis <constant>False</constant>. 3413ea1d6981Smrg </para> 3414ea1d6981Smrg</section> 3415ea1d6981Smrg<section id="Events:Extensions"> 3416ea1d6981Smrg <title>Extensions</title> 3417ea1d6981Smrg <para> 3418ea1d6981SmrgAdditional events may be defined by extensions. 3419ea1d6981Smrg </para> 3420ea1d6981Smrg</section> 3421ea1d6981Smrg</section> 3422ea1d6981Smrg</chapter> 3423ea1d6981Smrg 3424ea1d6981Smrg<chapter id='Protocol_Encoding'> 3425ea1d6981Smrg<title>Protocol Encoding</title> 3426ea1d6981Smrg<!-- .XS --> 3427ea1d6981Smrg<!-- (SN Protocol Encoding --> 3428ea1d6981Smrg<!-- .XE --> 3429ea1d6981Smrg<para> 3430ea1d6981SmrgNumbers that are prefixed with <quote><literal>#x</literal></quote> 3431ea1d6981Smrgare in hexadecimal (base 16). All other 3432ea1d6981Smrgnumbers are in decimal. Requests, replies, errors, events, and compound types 3433ea1d6981Smrgare described using the syntax: 3434ea1d6981Smrg</para> 3435ea1d6981Smrg<!-- .RS --> 3436ea1d6981Smrg<literallayout class="monospaced"> 3437ea1d6981Smrg 3438ea1d6981Smrg Name 3439ea1d6981Smrg <emphasis remap='I'>count</emphasis> <emphasis remap='I'>contents</emphasis> <emphasis remap='I'>name</emphasis> 3440ea1d6981Smrg ... 3441ea1d6981Smrg <emphasis remap='I'>count</emphasis> <emphasis remap='I'>contents</emphasis> <emphasis remap='I'>name</emphasis> 3442ea1d6981Smrg</literallayout> 3443ea1d6981Smrg 3444ea1d6981Smrg<!-- .RE --> 3445ea1d6981Smrg<para> 3446ea1d6981Smrgwhere COUNT is the number of bytes in the data stream occupied by this 3447ea1d6981Smrgfield, CONTENTS is the name of the type as given in 3448ea1d6981Smrg<link linkend='Data_Types'>Section 4</link> or the value if 3449ea1d6981Smrgthis field contains a constant, and NAME is a description of this field. 3450ea1d6981Smrg</para> 3451ea1d6981Smrg<para> 3452ea1d6981SmrgObjects containing counted lists use a lowercase single-letter variable (whose 3453ea1d6981Smrgscope is limited to the request, reply, event, or error in which it is found) 3454ea1d6981Smrgto represent the number of objects in the list. These variables, and any 3455ea1d6981Smrgexpressions in which they are used, should be treated as unsigned integers. 3456ea1d6981SmrgMultiple copies of an object are indicated by CONTENTS prefix 3457ea1d6981Smrg<quote>LISTof</quote>. 3458ea1d6981Smrg</para> 3459ea1d6981Smrg<para> 3460ea1d6981SmrgUnused bytes (whose value is undefined) will have a blank CONTENTS field and a 3461ea1d6981SmrgNAME field of <quote>unused</quote>. Zeroed bytes (whose value must be zero) 3462ea1d6981Smrgwill have a blank CONTENTS field and a NAME field of <quote>zero</quote>. 3463ea1d6981SmrgThe expression pad(e) refers to the number of bytes 3464ea1d6981Smrgneeded to round a value <quote>e</quote> up to the closed 3465ea1d6981Smrgmultiple of four: 3466ea1d6981Smrg</para> 3467ea1d6981Smrg<!-- .RS --> 3468ea1d6981Smrg<literallayout class="monospaced"> 3469ea1d6981Smrg 3470ea1d6981Smrg pad(e) = (4 - (e mod 4)) mod 4 3471ea1d6981Smrg</literallayout> 3472ea1d6981Smrg 3473ea1d6981Smrg<section id='Encoding::Data_Types'> 3474ea1d6981Smrg<title>Data Types</title> 3475ea1d6981Smrg<!-- .XS --> 3476ea1d6981Smrg<!-- (SN Data Types --> 3477ea1d6981Smrg<!-- .XE --> 3478ea1d6981Smrg<literallayout class="monospaced"> 3479ea1d6981Smrg<link linkend="Data_Types:ACCESSCONTEXT"><type>ACCESSCONTEXT</type></link> 3480ea1d6981Smrg4 <type>CARD32</type> access context 3481ea1d6981Smrg 3482ea1d6981Smrg with at least one of the following bits set: 3483ea1d6981Smrg 3484ea1d6981Smrg #x1fffffff 3485ea1d6981Smrg 3486ea1d6981Smrg but none of the following bits set: 3487ea1d6981Smrg 3488ea1d6981Smrg #xe0000000 zero 3489ea1d6981Smrg 3490ea1d6981Smrg 3491ea1d6981Smrg<link linkend="Data_Types:ALTERNATESERVER"><type>ALTERNATESERVER</type></link> 3492ea1d6981Smrg1 <type>BOOL</type> subset 3493ea1d6981Smrg1 n length of name 3494ea1d6981Smrgn <type>STRING8</type> name 3495ea1d6981Smrgp unused, p=pad(n+2) 3496ea1d6981Smrg 3497ea1d6981Smrg<link linkend="Data_Types:AUTH"><type>AUTH</type></link> 3498ea1d6981Smrg2 n length of name 3499ea1d6981Smrg2 d length of data 3500ea1d6981Smrgn <type>STRING8</type> name 3501ea1d6981Smrgp unused, p=pad(n) 3502ea1d6981Smrgd <type>STRING8</type> data 3503ea1d6981Smrgq unused, q=pad(d) 3504ea1d6981Smrg 3505ea1d6981Smrg 3506ea1d6981Smrg<link linkend="Data_Types:BITMAPFORMAT"><type>BITMAPFORMAT</type></link> 3507ea1d6981Smrg4 <type>CARD32</type> value, union of the following bits: 3508ea1d6981Smrg 3509ea1d6981Smrg #x00000001 ByteOrderMSB 3510ea1d6981Smrg #x00000002 BitOrderMSB 3511ea1d6981Smrg #x00000000 <constant>ImageRectMin</constant> 3512ea1d6981Smrg #x00000004 <constant>ImageRectMaxWidth</constant> 3513ea1d6981Smrg #x00000008 <constant>ImageRectMax</constant> 3514ea1d6981Smrg #x00000000 <constant>ScanlinePad8</constant> 3515ea1d6981Smrg #x00000100 <constant>ScanlinePad16</constant> 3516ea1d6981Smrg #x00000200 <constant>ScanlinePad32</constant> 3517ea1d6981Smrg #x00000300 <constant>ScanlinePad64</constant> 3518ea1d6981Smrg #x00000000 <constant>ScanlineUnit8</constant> 3519ea1d6981Smrg #x00001000 <constant>ScanlineUnit16</constant> 3520ea1d6981Smrg #x00002000 <constant>ScanlineUnit32</constant> 3521ea1d6981Smrg #x00003000 <constant>ScanlineUnit64</constant> 3522ea1d6981Smrg 3523ea1d6981Smrg except for the following bits which must be zero: 3524ea1d6981Smrg 3525ea1d6981Smrg #xffffccf0 zero 3526ea1d6981Smrg 3527ea1d6981Smrg and the following of which at most one bit may be set: 3528ea1d6981Smrg 3529ea1d6981Smrg #x0000000c at most one bit can be set 3530ea1d6981Smrg 3531ea1d6981Smrg 3532ea1d6981Smrg<link linkend="Data_Types:BITMAPFORMATMASK"><type>BITMAPFORMATMASK</type></link> 3533ea1d6981Smrg4 <type>CARD32</type> value, mask of the following bits: 3534ea1d6981Smrg 3535ea1d6981Smrg #x00000001 <constant>ByteOrderMask</constant> 3536ea1d6981Smrg #x00000002 <constant>BitOrderMask</constant> 3537ea1d6981Smrg #x00000004 <constant>ImageRectMask</constant> 3538ea1d6981Smrg #x00000008 <constant>ScanlinePadMask</constant> 3539ea1d6981Smrg #x00000010 <constant>ScanlineUnitMask</constant> 3540ea1d6981Smrg 3541ea1d6981Smrg except for the following bits which must be zero: 3542ea1d6981Smrg 3543ea1d6981Smrg #xffffffe0 zero 3544ea1d6981Smrg 3545ea1d6981Smrg<link linkend="Data_Types:BOOL"><type>BOOL</type></link> 3546ea1d6981Smrg1 <type>BOOL</type> boolean, one of the following values: 3547ea1d6981Smrg 0 <constant>False</constant> 3548ea1d6981Smrg 1 <constant>True</constant> 3549ea1d6981Smrg 3550ea1d6981Smrg<link linkend="Data_Types:BYTE"><type>BYTE</type></link> 3551ea1d6981Smrg1 <type>BYTE</type> unsigned byte of data 3552ea1d6981Smrg 3553ea1d6981Smrg<type>CARD8</type> 3554ea1d6981Smrg1 <type>CARD8</type> 8-bit unsigned integer 3555ea1d6981Smrg 3556ea1d6981Smrg<type>CARD16</type> 3557ea1d6981Smrg2 <type>CARD16</type> 16-bit unsigned integer 3558ea1d6981Smrg 3559ea1d6981Smrg<type>CARD32</type> 3560ea1d6981Smrg4 <type>CARD32</type> 32-bit unsigned integer 3561ea1d6981Smrg 3562ea1d6981Smrg<link linkend="Data_Types:CHAR2B"><type>CHAR2B</type></link> 3563ea1d6981Smrg1 <type>CARD8</type> byte1 3564ea1d6981Smrg1 <type>CARD8</type> byte2 3565ea1d6981Smrg 3566ea1d6981Smrg<link linkend="Data_Types:EVENTMASK"><type>EVENTMASK</type></link> 3567ea1d6981Smrg4 <type>CARD32</type> event mask 3568ea1d6981Smrg 3569ea1d6981Smrg for core events, this is union of the following bits: 3570ea1d6981Smrg 3571ea1d6981Smrg #00000001 <constant>CatalogueListChangeMask</constant> 3572ea1d6981Smrg #00000002 <constant>FontListChangeMask</constant> 3573ea1d6981Smrg 3574ea1d6981Smrg but none of the following bits set: 3575ea1d6981Smrg 3576ea1d6981Smrg #fffffffc 3577ea1d6981Smrg 3578ea1d6981Smrg extensions define their own sets of bits 3579ea1d6981Smrg 3580ea1d6981Smrg<link linkend="Data_Types:FONTID"><type>FONTID</type></link> 3581ea1d6981Smrg4 <type>CARD32</type> font identifier 3582ea1d6981Smrg 3583ea1d6981Smrg with at least one of the following bits set: 3584ea1d6981Smrg 3585ea1d6981Smrg #x1fffffff 3586ea1d6981Smrg 3587ea1d6981Smrg but none of the following bits set: 3588ea1d6981Smrg 3589ea1d6981Smrg #xe0000000 zero 3590ea1d6981Smrg 3591ea1d6981Smrg<type>INT8</type> 3592ea1d6981Smrg1 <type>INT8</type> 8-bit signed integer 3593ea1d6981Smrg 3594ea1d6981Smrg<type>INT16</type> 3595ea1d6981Smrg2 <type>INT16</type> 16-bit signed integer 3596ea1d6981Smrg 3597ea1d6981Smrg<type>INT32</type> 3598ea1d6981Smrg4 <type>INT32</type> 32-bit signed integer 3599ea1d6981Smrg 3600ea1d6981Smrg<link linkend="Data_Types:OFFSET32"><type>OFFSET32</type></link> 3601ea1d6981Smrg4 <type>CARD32</type> position (or integer value) 3602ea1d6981Smrg4 <type>CARD32</type> length 3603ea1d6981Smrg 3604ea1d6981Smrg<link linkend="Data_Types:PROPINFO"><type>PROPINFO</type></link> 3605ea1d6981Smrg4 n number of <type>PROPOFFSET</type> components 3606ea1d6981Smrg4 m number of bytes of property data 3607ea1d6981Smrg20*n <type>PROPOFFSET</type> property offsets into data block 3608ea1d6981Smrgm <type>LISTofBYTE</type> property data block 3609ea1d6981Smrg 3610ea1d6981Smrg<link linkend="Data_Types:PROPOFFSET"><type>PROPOFFSET</type></link> 3611ea1d6981Smrg8 <type>OFFSET32</type> name in data block 3612ea1d6981Smrg8 <type>OFFSET32</type> value in data block 3613ea1d6981Smrg1 <type>CARD8</type> type, one of the following values: 3614ea1d6981Smrg 0 <constant>String</constant> 3615ea1d6981Smrg 1 <constant>Unsigned</constant> 3616ea1d6981Smrg 2 <constant>Signed</constant> 3617ea1d6981Smrg 3 zero 3618ea1d6981Smrg 3619ea1d6981Smrg<link linkend="Data_Types:RANGE"><type>RANGE</type></link> 3620ea1d6981Smrg2 <type>CHAR2B</type> minimum character code 3621ea1d6981Smrg2 <type>CHAR2B</type> maximum character code 3622ea1d6981Smrg 3623ea1d6981Smrg<link linkend="Data_Types:RESOLUTION"><type>RESOLUTION</type></link> 3624ea1d6981Smrg2 <type>CARD16</type> x resolution in pixels per inch 3625ea1d6981Smrg2 <type>CARD16</type> y resolution in pixels per inch 3626ea1d6981Smrg2 <type>CARD16</type> point size in decipoints 3627ea1d6981Smrg 3628ea1d6981SmrgSTRNAME 3629ea1d6981Smrg1 n length of name 3630ea1d6981Smrgn <type>STRING8</type> name 3631ea1d6981Smrg 3632ea1d6981Smrg<link linkend="Data_Types:STRING8"><type>STRING8</type></link> 3633ea1d6981Smrgn <type>LISTofBYTE</type> array of 8-bit character values 3634ea1d6981Smrg 3635ea1d6981Smrg<link linkend="Data_Types:TIMESTAMP"><type>TIMESTAMP</type></link> 3636ea1d6981Smrg4 <type>CARD32</type> milliseconds since server time origin 3637ea1d6981Smrg 3638ea1d6981Smrg<link linkend="Data_Types:XCHARINFO"><type>XCHARINFO</type></link> 3639ea1d6981Smrg2 <type>INT16</type> left bearing 3640ea1d6981Smrg2 <type>INT16</type> right bearing 3641ea1d6981Smrg2 <type>INT16</type> width 3642ea1d6981Smrg2 <type>INT16</type> ascent 3643ea1d6981Smrg2 <type>INT16</type> descent 3644ea1d6981Smrg2 <type>CARD16</type> attributes 3645ea1d6981Smrg 3646ea1d6981Smrg<link linkend="Data_Types:XFONTINFO"><type>XFONTINFO</type></link> 3647ea1d6981Smrg4 <type>CARD32</type> flags, union of the following bits: 3648ea1d6981Smrg 3649ea1d6981Smrg #x00000001 <constant>AllCharactersExist</constant> 3650ea1d6981Smrg #x00000002 <constant>InkInside</constant> 3651ea1d6981Smrg #x00000004 <constant>HorizontalOverlap</constant> 3652ea1d6981Smrg 3653ea1d6981Smrg but none of the following bits set: 3654ea1d6981Smrg 3655ea1d6981Smrg #xfffffff8 zero 3656ea1d6981Smrg 3657ea1d6981Smrg4 <type>RANGE</type> range of characters in font 3658ea1d6981Smrg1 <type>CARD8</type> drawing direction 3659ea1d6981Smrg 0 <constant>LeftToRight</constant> 3660ea1d6981Smrg 1 <constant>RightToLeft</constant> 3661ea1d6981Smrg1 unused 3662ea1d6981Smrg2 <type>CHAR2B</type> default character 3663ea1d6981Smrg12 <type>XCHARINFO</type> minimum bounds 3664ea1d6981Smrg12 <type>XCHARINFO</type> maximum bounds 3665ea1d6981Smrg2 <type>INT16</type> font ascent 3666ea1d6981Smrg2 <type>INT16</type> font descent 3667ea1d6981Smrgn <type>PROPINFO</type> property data 3668ea1d6981Smrg</literallayout> 3669ea1d6981Smrg</section> 3670ea1d6981Smrg 3671ea1d6981Smrg<section id='Encoding::Requests'> 3672ea1d6981Smrg<title>Requests</title> 3673ea1d6981Smrg<para><link linkend="Requests:open_connection"><emphasis role="bold">open connection</emphasis></link></para> 3674ea1d6981Smrg<literallayout class="monospaced"> 3675ea1d6981Smrg1 <type>BYTE</type> byteorder, one of the values: 3676ea1d6981Smrg #x42 MostSignificant Byte first 3677ea1d6981Smrg #x6c LeastSignificant Byte first 3678ea1d6981Smrg1 <type>CARD8</type> numberof auth in auth-data 3679ea1d6981Smrg2 2 client-major-protocol-version 3680ea1d6981Smrg2 0 client-minor-protocol-version 3681ea1d6981Smrg2 a/4 lengthof auth-data 3682ea1d6981Smrga <type>LISTofAUTH</type> auth-data 3683ea1d6981Smrg▶ 3684ea1d6981Smrg2 <type>CARD16</type> status 3685ea1d6981Smrg 0 <constant>Success</constant> 3686ea1d6981Smrg 1 <constant>Continue</constant> 3687ea1d6981Smrg 2 <constant>Busy</constant> 3688ea1d6981Smrg 3 <constant>Denied</constant> 3689ea1d6981Smrg2 2 major version 3690ea1d6981Smrg2 0 version 3691ea1d6981Smrg1 <type>CARD8</type> numberof alternate-servers-hint 3692ea1d6981Smrg1 <type>CARD8</type> authorization-index 3693ea1d6981Smrg2 a/4 lengthof alternate-servers-hint 3694ea1d6981Smrg2 (d+q)/4 lengthof authorization-data 3695ea1d6981Smrga <type>LISTofALTERNATESERVER</type> alternate-servers-hint 3696ea1d6981Smrgd <type>LISTofBYTE</type> authorization-data 3697ea1d6981Smrgq unused, q=pad(d) 3698ea1d6981Smrg</literallayout> 3699ea1d6981Smrg 3700ea1d6981Smrg<para> 3701ea1d6981SmrgIf STATUS is <constant>Busy</constant> or <constant>Denied</constant>, the protocol stops and the connection is 3702ea1d6981Smrgclosed. If STATUS is <constant>Continue</constant>, the client is expected to respond with 3703ea1d6981Smrgadditional data, to which the server responds with 3704ea1d6981Smrga new status value and more data. This dialog continues until the status 3705ea1d6981Smrgis set to <constant>Success</constant>, or until the server sets STATUS to <constant>Busy</constant> or <constant>Denied</constant> 3706ea1d6981Smrgand closes the connection: 3707ea1d6981Smrg</para> 3708ea1d6981Smrg 3709ea1d6981Smrg<literallayout class="monospaced"> 3710ea1d6981Smrg◀ 3711ea1d6981Smrg4 1+(d+q)/4 length 3712ea1d6981Smrgd <type>LISTofBYTE</type> more-authorization-data 3713ea1d6981Smrgq unused, q=pad(d) 3714ea1d6981Smrg▶ 3715ea1d6981Smrg4 2+(d+q)/4 length 3716ea1d6981Smrg2 <type>CARD16</type> status 3717ea1d6981Smrg 0 <constant>Success</constant> 3718ea1d6981Smrg 1 <constant>Continue</constant> 3719ea1d6981Smrg 2 <constant>Busy</constant> 3720ea1d6981Smrg 3 <constant>Denied</constant> 3721ea1d6981Smrg2 unused 3722ea1d6981Smrgd <type>LISTofBYTE</type> more-authorization-data 3723ea1d6981Smrgq unused, q=pad(d) 3724ea1d6981Smrg</literallayout> 3725ea1d6981Smrg<para> 3726ea1d6981SmrgWhen STATUS is <constant>Success</constant>, the protocol resumes with the following 3727ea1d6981Smrgsent by the server: 3728ea1d6981Smrg</para> 3729ea1d6981Smrg 3730ea1d6981Smrg<literallayout class="monospaced"> 3731ea1d6981Smrg4 3+(v+w)/4 length of rest of data 3732ea1d6981Smrg2 <type>CARD16</type> maximum-request-length 3733ea1d6981Smrg2 v length of vendor string 3734ea1d6981Smrg4 <type>CARD32</type> release-number 3735ea1d6981Smrgv <type>STRING8</type> vendor-string 3736ea1d6981Smrgw unused, w=pad(v) 3737ea1d6981Smrg</literallayout> 3738ea1d6981Smrg<para> 3739ea1d6981SmrgOnce the connection has been established, the client may send the 3740ea1d6981Smrgfollowing requests: 3741ea1d6981Smrg</para> 3742ea1d6981Smrg 3743ea1d6981Smrg<literallayout class="monospaced"> 3744ea1d6981Smrg<link linkend="Requests:NoOp"><emphasis role="bold"><function>NoOp</function></emphasis></link> 3745ea1d6981Smrg1 0 major-opcode 3746ea1d6981Smrg1 unused 3747ea1d6981Smrg2 1 length 3748ea1d6981Smrg 3749ea1d6981Smrg<link linkend="Requests:ListExtensions"><emphasis role="bold"><function>ListExtensions</function></emphasis></link> 3750ea1d6981Smrg1 1 major-opcode 3751ea1d6981Smrg1 unused 3752ea1d6981Smrg2 1 length 3753ea1d6981Smrg▶ 3754ea1d6981Smrg1 0 type reply 3755ea1d6981Smrg1 <type>CARD8</type> numberof names 3756ea1d6981Smrg2 <type>CARD16</type> sequence-number 3757ea1d6981Smrg4 2+(n+p)/4 length 3758ea1d6981Smrgn LISTofSTRNAME names 3759ea1d6981Smrgp unused, p=pad(n) 3760ea1d6981Smrg 3761ea1d6981Smrg<link linkend="Requests:QueryExtension"><emphasis role="bold"><function>QueryExtension</function></emphasis></link> 3762ea1d6981Smrg1 2 major-opcode 3763ea1d6981Smrg1 n length of name 3764ea1d6981Smrg2 1+(n+p)/4 length 3765ea1d6981Smrgn <type>STRING8</type> name 3766ea1d6981Smrgp unused, p=pad(n) 3767ea1d6981Smrg▶ 3768ea1d6981Smrg1 0 type reply 3769ea1d6981Smrg1 <type>BOOL</type> present 3770ea1d6981Smrg2 <type>CARD16</type> sequence-number 3771ea1d6981Smrg4 5 length 3772ea1d6981Smrg2 <type>CARD16</type> major-version 3773ea1d6981Smrg2 <type>CARD16</type> minor-version 3774ea1d6981Smrg1 <type>CARD8</type> major-opcode 3775ea1d6981Smrg1 <type>CARD8</type> first-event 3776ea1d6981Smrg1 <type>CARD8</type> number-events 3777ea1d6981Smrg1 <type>CARD8</type> first-error 3778ea1d6981Smrg1 <type>CARD8</type> number-errors 3779ea1d6981Smrg3 unused 3780ea1d6981Smrg 3781ea1d6981Smrg<link linkend="Requests:ListCatalogues"><emphasis role="bold"><function>ListCatalogues</function></emphasis></link> 3782ea1d6981Smrg1 3 major-opcode 3783ea1d6981Smrg1 unused 3784ea1d6981Smrg2 3+(n+p)/4 length 3785ea1d6981Smrg4 <type>CARD32</type> max-names 3786ea1d6981Smrg2 n length of pattern 3787ea1d6981Smrg2 unused 3788ea1d6981Smrgn <type>STRING8</type> pattern 3789ea1d6981Smrgp unused, p=pad(n) 3790ea1d6981Smrg▶+ 3791ea1d6981Smrg1 0 type reply 3792ea1d6981Smrg1 unused 3793ea1d6981Smrg2 <type>CARD16</type> sequence-number 3794ea1d6981Smrg4 4+(n+p)/4 length 3795ea1d6981Smrg4 <type>CARD32</type> replies-following-hint 3796ea1d6981Smrg4 <type>CARD32</type> numberof catalogue-names 3797ea1d6981Smrgn LISTofSTRNAME catalogue-names 3798ea1d6981Smrgp unused, p=pad(n) 3799ea1d6981Smrg 3800ea1d6981Smrg<link linkend="Requests:SetCatalogues"><emphasis role="bold"><function>SetCatalogues</function></emphasis></link> 3801ea1d6981Smrg1 4 major-opcode 3802ea1d6981Smrg1 <type>CARD8</type> numberof catalogue-names 3803ea1d6981Smrg2 1+(n+p)/4 length 3804ea1d6981Smrgn LISTofSTRNAME catalogue-names 3805ea1d6981Smrgp unused, p=pad(n) 3806ea1d6981Smrg 3807ea1d6981Smrg<link linkend="Requests:GetCatalogues"><emphasis role="bold"><function>GetCatalogues</function></emphasis></link> 3808ea1d6981Smrg1 5 major-opcode 3809ea1d6981Smrg1 unused 3810ea1d6981Smrg2 1 length 3811ea1d6981Smrg▶ 3812ea1d6981Smrg1 0 type reply 3813ea1d6981Smrg1 <type>CARD8</type> numberof catalogue-names 3814ea1d6981Smrg2 <type>CARD16</type> sequence-number 3815ea1d6981Smrg4 2+(n+p)/4 length 3816ea1d6981Smrgn LISTofSTRNAME catalogue-names 3817ea1d6981Smrgp unused, p=pad(n) 3818ea1d6981Smrg 3819ea1d6981Smrg<link linkend="Requests:SetEventMask"><emphasis role="bold"><function>SetEventMask</function></emphasis></link> 3820ea1d6981Smrg1 6 major-opcode 3821ea1d6981Smrg1 <type>CARD8</type> extension-opcode 3822ea1d6981Smrg2 2 length 3823ea1d6981Smrg4 <type>EVENTMASK</type> event-mask 3824ea1d6981Smrg 3825ea1d6981Smrg<link linkend="Requests:GetEventMask"><emphasis role="bold"><function>GetEventMask</function></emphasis></link> 3826ea1d6981Smrg1 7 major-opcode 3827ea1d6981Smrg1 <type>CARD8</type> extension-opcode 3828ea1d6981Smrg2 1 length 3829ea1d6981Smrg▶ 3830ea1d6981Smrg1 0 type reply 3831ea1d6981Smrg1 unused 3832ea1d6981Smrg2 <type>CARD16</type> sequence-number 3833ea1d6981Smrg4 3 length 3834ea1d6981Smrg4 <type>EVENTMASK</type> event-mask 3835ea1d6981Smrg 3836ea1d6981Smrg<link linkend="Requests:CreateAC"><emphasis role="bold"><function>CreateAC</function></emphasis></link> 3837ea1d6981Smrg1 8 major-opcode 3838ea1d6981Smrg1 <type>CARD8</type> numberof authorization-protocols 3839ea1d6981Smrg2 2+a/4 length 3840ea1d6981Smrg4 <type>ACCESSCONTEXT</type> ac 3841ea1d6981Smrga <type>LISTofAUTH</type> authorization-protocols 3842ea1d6981Smrg▶ 3843ea1d6981Smrg1 0 type reply 3844ea1d6981Smrg1 <type>CARD8</type> authorization-index 3845ea1d6981Smrg2 <type>CARD16</type> sequence-number 3846ea1d6981Smrg4 3+(d+q)/4 length 3847ea1d6981Smrg2 <type>CARD16</type> status 3848ea1d6981Smrg 0 <constant>Success</constant> 3849ea1d6981Smrg 1 <constant>Continue</constant> 3850ea1d6981Smrg 2 <constant>Busy</constant> 3851ea1d6981Smrg 3 <constant>Denied</constant> 3852ea1d6981Smrg2 unused 3853ea1d6981Smrgd <type>LISTofBYTE</type> authorization-data 3854ea1d6981Smrgq unused, q=pad(d) 3855ea1d6981Smrg</literallayout> 3856ea1d6981Smrg 3857ea1d6981Smrg<para> 3858ea1d6981SmrgIf STATUS is <constant>Continue</constant>, the client is expected to respond with additional 3859ea1d6981Smrgdata, to which the server 3860ea1d6981Smrgresponds with a new status value and more data. This dialog continues 3861ea1d6981Smrguntil the status is set to 3862ea1d6981Smrg<constant>Success</constant>, <constant>Busy</constant>, or <constant>Denied</constant> at which point the request is finished. 3863ea1d6981Smrg</para> 3864ea1d6981Smrg 3865ea1d6981Smrg<literallayout class="monospaced"> 3866ea1d6981Smrg◀ 3867ea1d6981Smrg4 1+(d+q)/4 length 3868ea1d6981Smrgd <type>LISTofBYTE</type> more-authorization-data 3869ea1d6981Smrgq unused, q=pad(d) 3870ea1d6981Smrg▶ 3871ea1d6981Smrg4 2+(d+q)/4 length 3872ea1d6981Smrg2 <type>CARD16</type> status 3873ea1d6981Smrg 0 <constant>Success</constant> 3874ea1d6981Smrg 1 <constant>Continue</constant> 3875ea1d6981Smrg 2 <constant>Busy</constant> 3876ea1d6981Smrg 3 <constant>Denied</constant> 3877ea1d6981Smrg2 unused 3878ea1d6981Smrgd <type>LISTofBYTE</type> authorization-data 3879ea1d6981Smrgq unused, q=pad(d) 3880ea1d6981Smrg 3881ea1d6981Smrg<link linkend="Requests:FreeAC"><emphasis role="bold"><function>FreeAC</function></emphasis></link> 3882ea1d6981Smrg1 9 major-opcode 3883ea1d6981Smrg1 unused 3884ea1d6981Smrg2 2 length 3885ea1d6981Smrg4 <type>ACCESSCONTEXT</type> ac 3886ea1d6981Smrg 3887ea1d6981Smrg<link linkend="Requests:SetAuthorization"><emphasis role="bold"><function>SetAuthorization</function></emphasis></link> 3888ea1d6981Smrg1 10 major-opcode 3889ea1d6981Smrg1 unused 3890ea1d6981Smrg2 2 length 3891ea1d6981Smrg4 <type>ACCESSCONTEXT</type> ac 3892ea1d6981Smrg 3893ea1d6981Smrg<link linkend="Requests:SetResolution"><emphasis role="bold"><function>SetResolution</function></emphasis></link> 3894ea1d6981Smrg1 11 major-opcode 3895ea1d6981Smrg1 n number of resolutions 3896ea1d6981Smrg2 1+(6*n+p)/4 length 3897ea1d6981Smrg6*n <type>LISTofRESOLUTION</type> resolutions 3898ea1d6981Smrgp p=pad(6*n) 3899ea1d6981Smrg 3900ea1d6981Smrg<link linkend="Requests:GetResolution"><emphasis role="bold"><function>GetResolution</function></emphasis></link> 3901ea1d6981Smrg1 12 major-opcode 3902ea1d6981Smrg1 unused 3903ea1d6981Smrg2 1 length 3904ea1d6981Smrg▶ 3905ea1d6981Smrg1 0 type reply 3906ea1d6981Smrg1 n number of resolutions 3907ea1d6981Smrg2 <type>CARD16</type> sequence-number 3908ea1d6981Smrg4 2+(6*n+p)/4 length 3909ea1d6981Smrg6*n <type>LISTofRESOLUTION</type> resolutions 3910ea1d6981Smrgp p=pad(6*n) 3911ea1d6981Smrg 3912ea1d6981Smrg<link linkend="Requests:ListFonts"><emphasis role="bold"><function>ListFonts</function></emphasis></link> 3913ea1d6981Smrg1 13 major-opcode 3914ea1d6981Smrg1 unused 3915ea1d6981Smrg2 3+(n+p)/4 length 3916ea1d6981Smrg4 <type>CARD32</type> max-names 3917ea1d6981Smrg2 n length of pattern 3918ea1d6981Smrg2 unused 3919ea1d6981Smrgn <type>STRING8</type> pattern 3920ea1d6981Smrgp unused, p=pad(n) 3921ea1d6981Smrg▶+ 3922ea1d6981Smrg1 0 type reply 3923ea1d6981Smrg1 unused 3924ea1d6981Smrg2 <type>CARD16</type> sequence-number 3925ea1d6981Smrg4 4+(n+p)/4 length 3926ea1d6981Smrg4 <type>CARD32</type> replies-following-hint 3927ea1d6981Smrg4 <type>CARD32</type> numberof font-names 3928ea1d6981Smrgn LISTofSTRNAME font-names 3929ea1d6981Smrgp unused, p=pad(n) 3930ea1d6981Smrg 3931ea1d6981Smrg<link linkend="Requests:ListFontsWithXInfo"><emphasis role="bold"><function>ListFontsWithXInfo</function></emphasis></link> 3932ea1d6981Smrg1 14 major-opcode 3933ea1d6981Smrg1 unused 3934ea1d6981Smrg2 3+(n+p)/4 length 3935ea1d6981Smrg4 <type>CARD32</type> max-names 3936ea1d6981Smrg2 n length of pattern 3937ea1d6981Smrg2 unused 3938ea1d6981Smrgn <type>STRING8</type> pattern 3939ea1d6981Smrgp unused, p=pad(n) 3940ea1d6981Smrg▶+ (except for last in series) 3941ea1d6981Smrg1 0 type reply 3942ea1d6981Smrg1 n length of name 3943ea1d6981Smrg2 <type>CARD16</type> sequence-number 3944ea1d6981Smrg4 3+(n+p+f)/4 length 3945ea1d6981Smrg4 <type>CARD32</type> replies-hint 3946ea1d6981Smrgf <type>XFONTINFO</type> fontinfo 3947ea1d6981Smrgn <type>STRING8</type> name 3948ea1d6981Smrgp unused, p=pad(n) 3949ea1d6981Smrg▶ (last in series) 3950ea1d6981Smrg1 0 type reply 3951ea1d6981Smrg1 0 last-reply indicator 3952ea1d6981Smrg2 <type>CARD16</type> sequence-number 3953ea1d6981Smrg4 2 reply length 3954ea1d6981Smrg 3955ea1d6981Smrg<link linkend="Requests:OpenBitmapFont"><emphasis role="bold"><function>OpenBitmapFont</function></emphasis></link> 3956ea1d6981Smrg1 15 major-opcode 3957ea1d6981Smrg1 unused 3958ea1d6981Smrg2 4+(n+p)/4 length 3959ea1d6981Smrg4 <type>FONTID</type> fontid 3960ea1d6981Smrg4 <type>BITMAPFORMATMASK</type> format-mask 3961ea1d6981Smrg4 <type>BITMAPFORMAT</type> format 3962ea1d6981Smrgn STRNAME pattern 3963ea1d6981Smrgp unused, p=pad(n) 3964ea1d6981Smrg▶ 3965ea1d6981Smrg1 0 type reply 3966ea1d6981Smrg1 <type>BOOL</type> otherid-valid 3967ea1d6981Smrg2 <type>CARD16</type> sequence-number 3968ea1d6981Smrg4 4 length 3969ea1d6981Smrg4 <type>FONTID</type> otherid 3970ea1d6981Smrg1 <type>BOOL</type> cachable 3971ea1d6981Smrg3 unused 3972ea1d6981Smrg 3973ea1d6981Smrg<link linkend="Requests:QueryXInfo"><emphasis role="bold"><function>QueryXInfo</function></emphasis></link> 3974ea1d6981Smrg1 16 major-opcode 3975ea1d6981Smrg1 unused 3976ea1d6981Smrg2 2 length 3977ea1d6981Smrg4 <type>FONTID</type> fontid 3978ea1d6981Smrg▶ 3979ea1d6981Smrg1 0 type reply 3980ea1d6981Smrg1 unused 3981ea1d6981Smrg2 <type>CARD16</type> sequence-number 3982ea1d6981Smrg4 2+f/4 length 3983ea1d6981Smrgf <type>XFONTINFO</type> fontinfo 3984ea1d6981Smrgp unused, p=pad(f) 3985ea1d6981Smrg 3986ea1d6981Smrg<link linkend="Requests:QueryXExtents8"><emphasis role="bold"><function>QueryXExtents8</function></emphasis></link> 3987ea1d6981Smrg1 17 major-opcode 3988ea1d6981Smrg1 <type>BOOL</type> range 3989ea1d6981Smrg2 3+(n+p)/4 length 3990ea1d6981Smrg4 <type>FONTID</type> fontid 3991ea1d6981Smrg4 n number chars entries 3992ea1d6981Smrgn <type>STRING8</type> chars 3993ea1d6981Smrgp unused, p=pad(n) 3994ea1d6981Smrg▶ 3995ea1d6981Smrg1 0 type reply 3996ea1d6981Smrg1 unused 3997ea1d6981Smrg2 <type>CARD16</type> sequence-number 3998ea1d6981Smrg4 3+3*n length 3999ea1d6981Smrg4 n number of extents 4000ea1d6981Smrg12*n <type>LISTofXCHARINFO</type> extents 4001ea1d6981Smrg 4002ea1d6981Smrg<link linkend="Requests:QueryXExtents16"><emphasis role="bold"><function>QueryXExtents16</function></emphasis></link> 4003ea1d6981Smrg1 18 major-opcode 4004ea1d6981Smrg1 <type>BOOL</type> range 4005ea1d6981Smrg2 3+(2*n+p)/4 length 4006ea1d6981Smrg4 <type>FONTID</type> fontid 4007ea1d6981Smrg4 n number chars entries 4008ea1d6981Smrg2*n <type>LISTofCHAR2B</type> chars 4009ea1d6981Smrgp unused, p=pad(2*n) 4010ea1d6981Smrg▶ 4011ea1d6981Smrg1 0 type reply 4012ea1d6981Smrg1 unused 4013ea1d6981Smrg2 <type>CARD16</type> sequence-number 4014ea1d6981Smrg4 3+3*n length 4015ea1d6981Smrg4 n number of extents 4016ea1d6981Smrg12*n <type>LISTofXCHARINFO</type> extents 4017ea1d6981Smrg 4018ea1d6981Smrg<link linkend="Requests:QueryXBitmaps8"><emphasis role="bold"><function>QueryXBitmaps8</function></emphasis></link> 4019ea1d6981Smrg1 19 major-opcode 4020ea1d6981Smrg1 <type>BOOL</type> range 4021ea1d6981Smrg2 4+(n+p)/4 length 4022ea1d6981Smrg4 <type>FONTID</type> fontid 4023ea1d6981Smrg4 <type>BITMAPFORMAT</type> format 4024ea1d6981Smrg4 n number of chars entries 4025ea1d6981Smrgn <type>STRING8</type> chars 4026ea1d6981Smrgp unused, p=pad(n) 4027ea1d6981Smrg▶+ 4028ea1d6981Smrg1 0 type reply 4029ea1d6981Smrg1 unused 4030ea1d6981Smrg2 <type>CARD16</type> sequence-number 4031ea1d6981Smrg4 5+2*n+(m+p)/4 length 4032ea1d6981Smrg4 <type>CARD32</type> replies-following-hint 4033ea1d6981Smrg4 n number of offsets 4034ea1d6981Smrg4 m number of bytes of glyph images 4035ea1d6981Smrg8*n <type>LISTofOFFSET32</type> offsets 4036ea1d6981Smrgm <type>LISTofBYTE</type> glyphimages 4037ea1d6981Smrgp unused, p=pad(m) 4038ea1d6981Smrg 4039ea1d6981Smrg<link linkend="Requests:QueryXBitmaps16"><emphasis role="bold"><function>QueryXBitmaps16</function></emphasis></link> 4040ea1d6981Smrg1 20 major-opcode 4041ea1d6981Smrg1 <type>BOOL</type> range 4042ea1d6981Smrg2 4+(2*n+p)/4 length 4043ea1d6981Smrg4 <type>FONTID</type> fontid 4044ea1d6981Smrg4 <type>BITMAPFORMAT</type> format 4045ea1d6981Smrg4 n number of chars entries 4046ea1d6981Smrg2*n <type>LISTofCHAR2B</type> chars 4047ea1d6981Smrgp unused, p=pad(2*n) 4048ea1d6981Smrg▶ 4049ea1d6981Smrg1 0 type reply 4050ea1d6981Smrg1 unused 4051ea1d6981Smrg2 <type>CARD16</type> sequence-number 4052ea1d6981Smrg4 5+2*n+(m+p)/4 length 4053ea1d6981Smrg4 <type>CARD32</type> replies-following-hint 4054ea1d6981Smrg4 n number of offsets 4055ea1d6981Smrg4 m number of bytes of glyph images 4056ea1d6981Smrg8*n <type>LISTofOFFSET32</type> offsets 4057ea1d6981Smrgm <type>LISTofBYTE</type> glyphimages 4058ea1d6981Smrgp unused, p=pad(m) 4059ea1d6981Smrg 4060ea1d6981Smrg<link linkend="Requests:CloseFont"><emphasis role="bold"><function>CloseFont</function></emphasis></link> 4061ea1d6981Smrg1 21 major-opcode 4062ea1d6981Smrg1 unused 4063ea1d6981Smrg2 2 length 4064ea1d6981Smrg4 <type>FONTID</type> fontid 4065ea1d6981Smrg</literallayout> 4066ea1d6981Smrg</section> 4067ea1d6981Smrg 4068ea1d6981Smrg<section id='Encoding::Errors'> 4069ea1d6981Smrg<title>Errors</title> 4070ea1d6981Smrg<literallayout class="monospaced"> 4071ea1d6981Smrg 4072ea1d6981Smrg<link linkend="Errors:Request"><emphasis role="bold"><errorname>Request</errorname></emphasis></link> 4073ea1d6981Smrg1 1 type error 4074ea1d6981Smrg1 0 <errorname>Request</errorname> 4075ea1d6981Smrg2 <type>CARD16</type> sequence-number 4076ea1d6981Smrg4 4 length 4077ea1d6981Smrg4 <type>TIMESTAMP</type> timestamp 4078ea1d6981Smrg1 <type>CARD8</type> major-opcode 4079ea1d6981Smrg1 <type>CARD8</type> minor-opcode 4080ea1d6981Smrg2 unused 4081ea1d6981Smrg 4082ea1d6981Smrg<link linkend="Errors:Format"><emphasis role="bold"><errorname>Format</errorname></emphasis></link> 4083ea1d6981Smrg1 1 type error 4084ea1d6981Smrg1 1 <errorname>Format</errorname> 4085ea1d6981Smrg2 <type>CARD16</type> sequence-number 4086ea1d6981Smrg4 5 length 4087ea1d6981Smrg4 <type>TIMESTAMP</type> timestamp 4088ea1d6981Smrg1 <type>CARD8</type> major-opcode 4089ea1d6981Smrg1 <type>CARD8</type> minor-opcode 4090ea1d6981Smrg2 unused 4091ea1d6981Smrg4 <type>BITMAPFORMAT</type> bad-format 4092ea1d6981Smrg 4093ea1d6981Smrg<link linkend="Errors:Font"><emphasis role="bold"><errorname>Font</errorname></emphasis></link> 4094ea1d6981Smrg1 1 type error 4095ea1d6981Smrg1 2 <errorname>Font</errorname> 4096ea1d6981Smrg2 <type>CARD16</type> sequence-number 4097ea1d6981Smrg4 5 length 4098ea1d6981Smrg4 <type>TIMESTAMP</type> timestamp 4099ea1d6981Smrg1 <type>CARD8</type> major-opcode 4100ea1d6981Smrg1 <type>CARD8</type> minor-opcode 4101ea1d6981Smrg2 unused 4102ea1d6981Smrg4 <type>FONTID</type> bad-fontid 4103ea1d6981Smrg 4104ea1d6981Smrg<link linkend="Errors:Range"><emphasis role="bold"><errorname>Range</errorname></emphasis></link> 4105ea1d6981Smrg1 1 type error 4106ea1d6981Smrg1 3 <errorname>Range</errorname> 4107ea1d6981Smrg2 <type>CARD16</type> sequence-number 4108ea1d6981Smrg4 5 length 4109ea1d6981Smrg4 <type>TIMESTAMP</type> timestamp 4110ea1d6981Smrg1 <type>CARD8</type> major-opcode 4111ea1d6981Smrg1 <type>CARD8</type> minor-opcode 4112ea1d6981Smrg2 unused 4113ea1d6981Smrg4 <type>RANGE</type> bad-range 4114ea1d6981Smrg 4115ea1d6981Smrg<link linkend="Errors:EventMask"><emphasis role="bold"><errorname>EventMask</errorname></emphasis></link> 4116ea1d6981Smrg1 1 type error 4117ea1d6981Smrg1 4 <errorname>EventMask</errorname> 4118ea1d6981Smrg2 <type>CARD16</type> sequence-number 4119ea1d6981Smrg4 5 length 4120ea1d6981Smrg4 <type>TIMESTAMP</type> timestamp 4121ea1d6981Smrg1 <type>CARD8</type> major-opcode 4122ea1d6981Smrg1 <type>CARD8</type> minor-opcode 4123ea1d6981Smrg2 unused 4124ea1d6981Smrg4 <type>EVENTMASK</type> event-mask 4125ea1d6981Smrg 4126ea1d6981Smrg<link linkend="Errors:AccessContext"><emphasis role="bold"><errorname>AccessContext</errorname></emphasis></link> 4127ea1d6981Smrg1 1 type error 4128ea1d6981Smrg1 5 <errorname>AccessContext</errorname> 4129ea1d6981Smrg2 <type>CARD16</type> sequence-number 4130ea1d6981Smrg4 5 length 4131ea1d6981Smrg4 <type>TIMESTAMP</type> timestamp 4132ea1d6981Smrg1 <type>CARD8</type> major-opcode 4133ea1d6981Smrg1 <type>CARD8</type> minor-opcode 4134ea1d6981Smrg2 unused 4135ea1d6981Smrg4 <type>ACCESSCONTEXT</type> access context 4136ea1d6981Smrg 4137ea1d6981Smrg<link linkend="Errors:IDChoice"><emphasis role="bold"><errorname>IDChoice</errorname></emphasis></link> 4138ea1d6981Smrg1 1 type error 4139ea1d6981Smrg1 6 <errorname>IDChoice</errorname> 4140ea1d6981Smrg2 <type>CARD16</type> sequence-number 4141ea1d6981Smrg4 5 length 4142ea1d6981Smrg4 <type>TIMESTAMP</type> timestamp 4143ea1d6981Smrg1 <type>CARD8</type> major-opcode 4144ea1d6981Smrg1 <type>CARD8</type> minor-opcode 4145ea1d6981Smrg2 unused 4146ea1d6981Smrg4 <type>FONTID</type> bad-fontid 4147ea1d6981Smrg 4148ea1d6981Smrg<link linkend="Errors:Name"><emphasis role="bold"><errorname>Name</errorname></emphasis></link> 4149ea1d6981Smrg1 1 type error 4150ea1d6981Smrg1 7 <errorname>Name</errorname> 4151ea1d6981Smrg2 <type>CARD16</type> sequence-number 4152ea1d6981Smrg4 4 length 4153ea1d6981Smrg4 <type>TIMESTAMP</type> timestamp 4154ea1d6981Smrg1 <type>CARD8</type> major-opcode 4155ea1d6981Smrg1 <type>CARD8</type> minor-opcode 4156ea1d6981Smrg2 unused 4157ea1d6981Smrg 4158ea1d6981Smrg<link linkend="Errors:Resolution"><emphasis role="bold"><errorname>Resolution</errorname></emphasis></link> 4159ea1d6981Smrg1 1 type error 4160ea1d6981Smrg1 8 <errorname>Resolution</errorname> 4161ea1d6981Smrg2 <type>CARD16</type> sequence-number 4162ea1d6981Smrg4 5 length 4163ea1d6981Smrg4 <type>TIMESTAMP</type> timestamp 4164ea1d6981Smrg1 <type>CARD8</type> major-opcode 4165ea1d6981Smrg1 <type>CARD8</type> minor-opcode 4166ea1d6981Smrg6 <type>RESOLUTION</type> resolution 4167ea1d6981Smrg 4168ea1d6981Smrg<link linkend="Errors:Alloc"><emphasis role="bold"><errorname>Alloc</errorname></emphasis></link> 4169ea1d6981Smrg1 1 type error 4170ea1d6981Smrg1 9 <errorname>Alloc</errorname> 4171ea1d6981Smrg2 <type>CARD16</type> sequence-number 4172ea1d6981Smrg4 4 length 4173ea1d6981Smrg4 <type>TIMESTAMP</type> timestamp 4174ea1d6981Smrg1 <type>CARD8</type> major-opcode 4175ea1d6981Smrg1 <type>CARD8</type> minor-opcode 4176ea1d6981Smrg2 unused 4177ea1d6981Smrg 4178ea1d6981Smrg<link linkend="Errors:Length"><emphasis role="bold"><errorname>Length</errorname></emphasis></link> 4179ea1d6981Smrg1 1 type error 4180ea1d6981Smrg1 10 <errorname>Length</errorname> 4181ea1d6981Smrg2 <type>CARD16</type> sequence-number 4182ea1d6981Smrg4 5 length 4183ea1d6981Smrg4 <type>TIMESTAMP</type> timestamp 4184ea1d6981Smrg1 <type>CARD8</type> major-opcode 4185ea1d6981Smrg1 <type>CARD8</type> minor-opcode 4186ea1d6981Smrg2 unused 4187ea1d6981Smrg4 <type>CARD32</type> bad-length 4188ea1d6981Smrg 4189ea1d6981Smrg<link linkend="Errors:Implementation"><emphasis role="bold"><errorname>Implementation</errorname></emphasis></link> 4190ea1d6981Smrg1 1 type error 4191ea1d6981Smrg1 11 <errorname>Implementation</errorname> 4192ea1d6981Smrg2 <type>CARD16</type> sequence-number 4193ea1d6981Smrg4 4 length 4194ea1d6981Smrg4 <type>TIMESTAMP</type> timestamp 4195ea1d6981Smrg1 <type>CARD8</type> major-opcode 4196ea1d6981Smrg1 <type>CARD8</type> minor-opcode 4197ea1d6981Smrg2 unused 4198ea1d6981Smrg 4199ea1d6981Smrg</literallayout> 4200ea1d6981Smrg</section> 4201ea1d6981Smrg 4202ea1d6981Smrg<section id='Encoding::Events'> 4203ea1d6981Smrg<title>Events</title> 4204ea1d6981Smrg<literallayout class="monospaced"> 4205ea1d6981Smrg<link linkend="Events:KeepAlive"><emphasis role="bold"><function>KeepAlive</function></emphasis></link> 4206ea1d6981Smrg1 2 type event 4207ea1d6981Smrg1 0 event KeepAlive 4208ea1d6981Smrg2 <type>CARD16</type> sequence-number 4209ea1d6981Smrg4 3 length 4210ea1d6981Smrg4 <type>TIMESTAMP</type> timestamp 4211ea1d6981Smrg 4212ea1d6981Smrg<link linkend="Events:CatalogueListNotify"><emphasis role="bold"><function>CatalogueListNotify</function></emphasis></link> 4213ea1d6981Smrg1 2 type event 4214ea1d6981Smrg1 1 event CatalogueListNotify 4215ea1d6981Smrg2 <type>CARD16</type> sequence-number 4216ea1d6981Smrg4 4 length 4217ea1d6981Smrg4 <type>TIMESTAMP</type> timestamp 4218ea1d6981Smrg1 <type>BOOL</type> added 4219ea1d6981Smrg1 <type>BOOL</type> deleted 4220ea1d6981Smrg2 unused 4221ea1d6981Smrg 4222ea1d6981Smrg<link linkend="Events:FontListNotify"><emphasis role="bold"><function>FontListNotify</function></emphasis></link> 4223ea1d6981Smrg1 2 type event 4224ea1d6981Smrg1 2 event FontListNotify 4225ea1d6981Smrg2 <type>CARD16</type> sequence-number 4226ea1d6981Smrg4 4 length 4227ea1d6981Smrg4 <type>TIMESTAMP</type> timestamp 4228ea1d6981Smrg1 <type>BOOL</type> added 4229ea1d6981Smrg1 <type>BOOL</type> deleted 4230ea1d6981Smrg2 unused 4231ea1d6981Smrg 4232ea1d6981Smrg</literallayout> 4233ea1d6981Smrg</section> 4234ea1d6981Smrg</chapter> 4235ea1d6981Smrg 4236ea1d6981Smrg<chapter id='Acknowledgements'> 4237ea1d6981Smrg<title>Acknowledgements</title> 4238ea1d6981Smrg<!-- .XS --> 4239ea1d6981Smrg<!-- (SN Acknowledgements --> 4240ea1d6981Smrg<!-- .XE --> 4241ea1d6981Smrg<para> 4242ea1d6981SmrgThis document represents the culmination of several years of debate and 4243ea1d6981Smrgexperiments done under the auspices of the 4244ea1d6981Smrg<orgname class="consortium">MIT X Consortium</orgname> font working group. 4245ea1d6981SmrgAlthough this was a group effort, the author remains responsible for any errors 4246ea1d6981Smrgor omissions. The protocol presented here was primarily designed by 4247ea1d6981Smrg<personname><firstname>Jim</firstname><surname>Fulton</surname></personname>, 4248ea1d6981Smrg<personname><firstname>Keith</firstname><surname>Packard</surname></personname>, 4249ea1d6981Smrgand 4250ea1d6981Smrg<personname><firstname>Bob</firstname><surname>Scheifler</surname></personname>. 4251ea1d6981SmrgSpecial thanks goes to 4252ea1d6981Smrg<personname><firstname>Ned</firstname><surname>Batchelder</surname></personname>, 4253ea1d6981Smrg<personname><firstname>Jim</firstname><surname>Flowers</surname></personname>, 4254ea1d6981Smrgand 4255ea1d6981Smrg<personname><firstname>Axel</firstname><surname>Deininger</surname></personname> 4256ea1d6981Smrgfor their invigorating comments 4257ea1d6981Smrgwhich never failed to make this a better document. 4258ea1d6981Smrg<personname><firstname>Stephen</firstname><surname>Gildea</surname></personname> 4259ea1d6981Smrgedited version 2 of this document. Finally, 4260ea1d6981Smrg<personname><firstname>David</firstname><surname>Lemke</surname></personname> 4261ea1d6981Smrgdeserves great credit for designing and coding the sample implementation. 4262ea1d6981Smrg</para> 4263ea1d6981Smrg</chapter> 4264ea1d6981Smrg 4265ea1d6981Smrg<bibliography id='References'> 4266ea1d6981Smrg<title>References</title> 4267ea1d6981Smrg<para> 4268ea1d6981SmrgAll of the following documents are X Consortium standards available from 4269ea1d6981Smrgthe X Consortium. 4270ea1d6981Smrg</para> 4271ea1d6981Smrg<biblioentry id='References:x11proto'> 4272ea1d6981Smrg <abbrev>1</abbrev> 4273ea1d6981Smrg <title><olink targetdoc='x11protocol' targetptr='x11protocol'>X Window System Protocol Version 11</olink></title> 4274ea1d6981Smrg <author><firstname>Robert W.</firstname><surname>Scheifler</surname></author> 4275ea1d6981Smrg</biblioentry> 4276ea1d6981Smrg 4277ea1d6981Smrg<biblioentry id='References:bdf-spec'> 4278ea1d6981Smrg <abbrev>2</abbrev> 4279ea1d6981Smrg <corpauthor>Adobe Systems</corpauthor> 4280ea1d6981Smrg <title>Bitmap Distribution Format 2.1</title> 4281ea1d6981Smrg</biblioentry> 4282ea1d6981Smrg 4283ea1d6981Smrg<biblioentry id='References:xlfd-spec'> 4284ea1d6981Smrg <abbrev>3</abbrev> 4285ea1d6981Smrg <corpauthor>X Consortium</corpauthor> 4286ea1d6981Smrg <title><olink targetdoc='xlfd' targetptr='xlfd'>X Logical Font 4287ea1d6981Smrg Description Conventions, Version 1.5</olink></title> 4288ea1d6981Smrg</biblioentry> 4289ea1d6981Smrg 4290ea1d6981Smrg</bibliography> 4291ea1d6981Smrg 4292ea1d6981Smrg<appendix id="suggested_licensing_policies"> 4293ea1d6981Smrg<title>Suggested Licensing Policies</title> 4294ea1d6981Smrg<para> 4295ea1d6981SmrgThe authorization data passed by the client in the initial connection 4296ea1d6981Smrgsetup information may be used by the font server to implement restrictions 4297ea1d6981Smrgon which fonts may be accessed. Furthermore, the font server is free to 4298ea1d6981Smrgrefuse new connections at any time. 4299ea1d6981Smrg</para> 4300ea1d6981Smrg<para> 4301ea1d6981SmrgConfiguration or management of the license restrictions is outside the scope of 4302ea1d6981Smrgthe font service protocol and is done in a server-dependent manner. Possible 4303ea1d6981Smrgpolicies might include, but are not limited to, combinations of the following: 4304ea1d6981Smrg 4305ea1d6981Smrg<variablelist> 4306ea1d6981Smrg <?dbhtml list-presentation="list"?> 4307ea1d6981Smrg <varlistentry> 4308ea1d6981Smrg <term>No restrictions</term> 4309ea1d6981Smrg <listitem> 4310ea1d6981Smrg <para> 4311ea1d6981Smrganyone may access any fonts. The server neither refuses any connections 4312ea1d6981Smrgnor generates <link linkend="Errors:AccessContext"><errorname>AccessContext</errorname></link> errors on any 4313ea1d6981Smrgfonts. For environments without specially-licensed fonts, this is 4314ea1d6981Smrgsufficient. 4315ea1d6981Smrg </para> 4316ea1d6981Smrg </listitem> 4317ea1d6981Smrg </varlistentry> 4318ea1d6981Smrg <varlistentry> 4319ea1d6981Smrg <term>Per-machine</term> 4320ea1d6981Smrg <listitem> 4321ea1d6981Smrg <para> 4322ea1d6981Smrgonly those clients connecting from a known set of 4323ea1d6981Smrgmachines are permitted access. The server could get the address 4324ea1d6981Smrgof the connection and look in a list of allowed machines. 4325ea1d6981Smrg </para> 4326ea1d6981Smrg </listitem> 4327ea1d6981Smrg </varlistentry> 4328ea1d6981Smrg <varlistentry> 4329ea1d6981Smrg <term>Per-user</term> 4330ea1d6981Smrg <listitem> 4331ea1d6981Smrg <para> 4332ea1d6981Smrgonly a known set of users may access the fonts. The 4333ea1d6981Smrgserver can use the authorization data (such as a Kerberos ticket 4334ea1d6981Smrgor a Secure RPC credential) to verify the identity of the user 4335ea1d6981Smrgand then look in a list of allowed users. 4336ea1d6981Smrg </para> 4337ea1d6981Smrg </listitem> 4338ea1d6981Smrg </varlistentry> 4339ea1d6981Smrg <varlistentry> 4340ea1d6981Smrg <term>Simultaneous Use</term> 4341ea1d6981Smrg <listitem> 4342ea1d6981Smrg <para> 4343ea1d6981Smrgonly a certain number of clients may use a given font at any one time. 4344ea1d6981SmrgAdditional clients would receive <link linkend="Errors:AccessContext"><errorname>AccessContext</errorname></link> 4345ea1d6981Smrgerrors if they attempt to open the font. This is only effective if 4346ea1d6981Smrgthe initial clients keep the font open for the entire time that it 4347ea1d6981Smrgis being used (even if all of the data has been transmitted and is 4348ea1d6981Smrgbeing cached). 4349ea1d6981Smrg </para> 4350ea1d6981Smrg </listitem> 4351ea1d6981Smrg </varlistentry> 4352ea1d6981Smrg <varlistentry> 4353ea1d6981Smrg <term>Postage Meter</term> 4354ea1d6981Smrg <listitem> 4355ea1d6981Smrg <para> 4356ea1d6981Smrga particular font may only be accessed a limited 4357ea1d6981Smrgnumber of times before its license must be renewed. Each time 4358ea1d6981Smrgthe font is opened, the server decrements a counter. When the 4359ea1d6981Smrgcounter reaches zero, all further attempts to open the font 4360ea1d6981Smrgreturn an <link linkend="Errors:AccessContext"><errorname>AccessContext</errorname></link> error. 4361ea1d6981Smrg </para> 4362ea1d6981Smrg </listitem> 4363ea1d6981Smrg </varlistentry> 4364ea1d6981Smrg</variablelist> 4365ea1d6981Smrg</para> 4366ea1d6981Smrg 4367ea1d6981Smrg<para> 4368ea1d6981SmrgIt should be noted that chaining of font servers (obtaining font data from 4369ea1d6981Smrgother font servers) may conflict with certain license policies. 4370ea1d6981Smrg</para> 4371ea1d6981Smrg</appendix> 4372ea1d6981Smrg 4373ea1d6981Smrg<appendix id="implementation_suggestions"> 4374ea1d6981Smrg<title>Implementation Suggestions</title> 4375ea1d6981Smrg<para> 4376ea1d6981SmrgFont server implementations will probably wish to use techniques such as the 4377ea1d6981Smrgfollowing to avoid limits on the number of simultaneous connections: 4378ea1d6981Smrg</para> 4379ea1d6981Smrg<itemizedlist> 4380ea1d6981Smrg <listitem> 4381ea1d6981Smrg <para> 4382ea1d6981SmrgThe initial connection information returned by the font 4383ea1d6981Smrgserver contains the names of other font servers that 4384ea1d6981Smrgmay be used as substitutes. A font server may refuse to 4385ea1d6981Smrgaccept a connection, indicating that the client should 4386ea1d6981Smrgtry one of the alternatives instead. 4387ea1d6981Smrg </para> 4388ea1d6981Smrg </listitem> 4389ea1d6981Smrg <listitem> 4390ea1d6981Smrg <para> 4391ea1d6981SmrgOn operating systems that support processing forking, font 4392ea1d6981Smrgservers might choose to fork so that the child can continue 4393ea1d6981Smrgprocessing the existing connections and the parent can accept 4394ea1d6981Smrgnew connections. Such implementations are encouraged to use 4395ea1d6981Smrgshared memory so that in-memory font databases can be shared. 4396ea1d6981Smrg </para> 4397ea1d6981Smrg </listitem> 4398ea1d6981Smrg <listitem> 4399ea1d6981Smrg <para> 4400ea1d6981SmrgOn operating systems that support passing stream file descriptors 4401ea1d6981Smrgbetween processes, cooperating font servers could collect 4402ea1d6981Smrgconnections in a single process when there are few connections 4403ea1d6981Smrgand spread them among several processes as the load increases. 4404ea1d6981Smrg </para> 4405ea1d6981Smrg </listitem> 4406ea1d6981Smrg <listitem> 4407ea1d6981Smrg <para> 4408ea1d6981SmrgIf a font client is unable to connect to a server (as opposed 4409ea1d6981Smrgto having the connection terminated), it should retry for an 4410ea1d6981Smrgimplementation-dependent length of time (see Xlib's 4411ea1d6981Smrghandling of ECONNREFUSED in XConnDis.c). 4412ea1d6981Smrg </para> 4413ea1d6981Smrg </listitem> 4414ea1d6981Smrg</itemizedlist> 4415ea1d6981Smrg</appendix> 4416ea1d6981Smrg<index id="index" /> 4417ea1d6981Smrg</book> 4418