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 &ldquo;as is&rdquo; 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 &ldquo;Software&rdquo;), 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 &ldquo;AS IS&rdquo;, 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                └─────┬──────┘
190ea1d6981Smrg191ea1d6981Smrg                   network
192ea1d6981Smrg193ea1d6981Smrg┌─────────────────────┴──────────────────────┐
194ea1d6981Smrg│                                            │
195ea1d6981Smrg│                font server 1               │
196ea1d6981Smrg│                                            │
197ea1d6981Smrg├─────┬─────┬─────┬─────┬────┬─────┬───┬─────┤
198ea1d6981Smrg│ bdf │ snf │ pcf │ atm │ f3 │ dwf │ │ │ ... │
199ea1d6981Smrg└─────┴─────┴─────┴─────┴────┴─────┴─│─┴─────┘
200ea1d6981Smrg201ea1d6981Smrg                                  network
202ea1d6981Smrg203ea1d6981Smrg                               ┌─────┴────┐
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>&emsp;<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>&emsp;<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>&emsp;<structfield>byte-order-msb</structfield>:</entry><entry>      1 bit,</entry></row>
512ea1d6981Smrg          <row><entry>&emsp;<structfield>bit-order-msb</structfield>:</entry><entry>       1 bit,</entry></row>
513ea1d6981Smrg          <row><entry>&emsp;<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>&emsp;<structfield>zero-pad</structfield>:</entry><entry>            4 bits,</entry></row>
517ea1d6981Smrg          <row><entry>&emsp;<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>&emsp;<structfield>zero-pad</structfield>:</entry><entry>            2 bits,</entry></row>
522ea1d6981Smrg          <row><entry>&emsp;<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>&emsp;<structfield>zero-pad</structfield>:</entry><entry>            2 bits,</entry></row>
527ea1d6981Smrg          <row><entry>&emsp;<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 &lt;&lt; 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 &lt;&lt; 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 &lt;&lt; 2)</literal></entry></row>
566ea1d6981Smrg          <row><entry><constant>ImageRectMaxWidth</constant></entry><entry><literal>(1 &lt;&lt; 2)</literal></entry></row>
567ea1d6981Smrg          <row><entry><constant>ImageRectMax</constant></entry><entry><literal>(2 &lt;&lt; 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 &lt;&lt; 8)</literal></entry></row>
660ea1d6981Smrg          <row><entry><constant>ScanlinePad16</constant></entry><entry><literal>(1 &lt;&lt; 8)</literal></entry></row>
661ea1d6981Smrg          <row><entry><constant>ScanlinePad32</constant></entry><entry><literal>(2 &lt;&lt; 8)</literal></entry></row>
662ea1d6981Smrg          <row><entry><constant>ScanlinePad64</constant></entry><entry><literal>(3 &lt;&lt; 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 &lt;&lt; 12)</literal></entry></row>
681ea1d6981Smrg          <row><entry><constant>ScanlineUnit16</constant></entry><entry><literal>(1 &lt;&lt; 12)</literal></entry></row>
682ea1d6981Smrg          <row><entry><constant>ScanlineUnit32</constant></entry><entry><literal>(2 &lt;&lt; 12)</literal></entry></row>
683ea1d6981Smrg          <row><entry><constant>ScanlineUnit64</constant></entry><entry><literal>(3 &lt;&lt; 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 &lt;&lt; 0)</literal></entry></row>
721ea1d6981Smrg          <row><entry><constant>BitOrderMask</constant></entry><entry><literal>(1 &lt;&lt; 1)</literal></entry></row>
722ea1d6981Smrg          <row><entry><constant>ImageRectMask</constant></entry><entry><literal>(1 &lt;&lt; 2)</literal></entry></row>
723ea1d6981Smrg          <row><entry><constant>ScanlinePadMask</constant></entry><entry><literal>(1 &lt;&lt; 3)</literal></entry></row>
724ea1d6981Smrg          <row><entry><constant>ScanlineUnitMask</constant></entry><entry><literal>(1 &lt;&lt; 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 &lt;&lt; 0)</literal></entry></row>
875ea1d6981Smrg          <row><entry><constant>FontListChangeMask</constant></entry><entry><literal>(1 &lt;&lt; 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>&emsp;<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>&emsp;<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>&emsp;<structfield>value</structfield>:</entry><entry><link linkend="Data_Types:OFFSET32"><type>OFFSET32</type></link>,</entry></row>
1060ea1d6981Smrg          <row><entry>&emsp;<structfield>type</structfield>:</entry><entry><type>CARD8</type>,</entry></row>
1061ea1d6981Smrg          <row><entry>&emsp;<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>&emsp;<structfield>y-resolution</structfield>:</entry><entry><type>CARD16</type>,</entry></row>
1177ea1d6981Smrg          <row><entry>&emsp;<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>&emsp;<structfield>width</structfield>:</entry><entry><type>INT16</type>,</entry></row>
1255ea1d6981Smrg          <row><entry>&emsp;<structfield>ascent</structfield>, <structfield>descent</structfield>:</entry><entry><type>INT16</type>,</entry></row>
1256ea1d6981Smrg          <row><entry>&emsp;<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> &minus; <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>&emsp;<structfield>drawing-direction</structfield>:</entry><entry>{ <constant>LeftToRight</constant>, <constant>RightToLeft</constant> }</entry></row>
1334ea1d6981Smrg          <row><entry>&emsp;<structfield>char-range</structfield>:</entry><entry><link linkend="Data_Types:RANGE"><type>RANGE</type></link>,</entry></row>
1335ea1d6981Smrg          <row><entry>&emsp;<structfield>default-char</structfield>:</entry><entry><link linkend="Data_Types:CHAR2B"><type>CHAR2B</type></link>,</entry></row>
1336ea1d6981Smrg          <row><entry>&emsp;<structfield>min-bounds</structfield>:</entry><entry><link linkend="Data_Types:XCHARINFO"><type>XCHARINFO</type></link>,</entry></row>
1337ea1d6981Smrg          <row><entry>&emsp;<structfield>max-bounds</structfield>:</entry><entry><link linkend="Data_Types:XCHARINFO"><type>XCHARINFO</type></link>,</entry></row>
1338ea1d6981Smrg          <row><entry>&emsp;<structfield>font-ascent</structfield>:</entry><entry><type>INT16</type>,</entry></row>
1339ea1d6981Smrg          <row><entry>&emsp;<structfield>font-descent</structfield>:</entry><entry><type>INT16</type>,</entry></row>
1340ea1d6981Smrg          <row><entry>&emsp;<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 &lt;&lt; 0)</literal></entry></row>
1359ea1d6981Smrg          <row><entry><constant>InkInside</constant></entry><entry><literal>(1 &lt;&lt; 1)</literal></entry></row>
1360ea1d6981Smrg          <row><entry><constant>HorizontalOverlap</constant></entry><entry><literal>(1 &lt;&lt; 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
3683ea1d6981Smrg3684ea1d6981Smrg2     <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">
3710ea1d6981Smrg3711ea1d6981Smrg4     1+(d+q)/4              length
3712ea1d6981Smrgd     <type>LISTofBYTE</type>             more-authorization-data
3713ea1d6981Smrgq                            unused, q=pad(d)
3714ea1d6981Smrg3715ea1d6981Smrg4     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
3753ea1d6981Smrg3754ea1d6981Smrg1   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)
3767ea1d6981Smrg3768ea1d6981Smrg1   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
3811ea1d6981Smrg3812ea1d6981Smrg1   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
3829ea1d6981Smrg3830ea1d6981Smrg1   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
3842ea1d6981Smrg3843ea1d6981Smrg1   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">
3866ea1d6981Smrg3867ea1d6981Smrg4   1+(d+q)/4                length
3868ea1d6981Smrgd   <type>LISTofBYTE</type>               more-authorization-data
3869ea1d6981Smrgq                            unused, q=pad(d)
3870ea1d6981Smrg3871ea1d6981Smrg4   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
3904ea1d6981Smrg3905ea1d6981Smrg1   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)
3964ea1d6981Smrg3965ea1d6981Smrg1   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
3978ea1d6981Smrg3979ea1d6981Smrg1   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)
3994ea1d6981Smrg3995ea1d6981Smrg1   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)
4010ea1d6981Smrg4011ea1d6981Smrg1   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)
4048ea1d6981Smrg4049ea1d6981Smrg1   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