diff options
author | Gaetan Nadon <memsize@videotron.ca> | 2010-09-09 14:42:50 -0400 |
---|---|---|
committer | Gaetan Nadon <memsize@videotron.ca> | 2010-09-12 13:13:32 -0400 |
commit | 5315569e2de5c37b4b303136d64af51da8ed1149 (patch) | |
tree | 9cb4bc6e303145a784727e33fa7947f65848ea39 | |
parent | 5490e43d4118ee6ef5c2557e5ee338f262dde980 (diff) |
Move Font Service protocol spec to proto/fontsproto/specs
Following the DocBook XML conversion
Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | specs/FSProtocol/protocol.ms | 3602 |
2 files changed, 0 insertions, 3603 deletions
diff --git a/Makefile.am b/Makefile.am index 243a809..e7ad615 100644 --- a/Makefile.am +++ b/Makefile.am @@ -35,7 +35,6 @@ EXTRA_DIST = \ specs/BDF/fig1.ps \ specs/BDF/fig2.ps \ specs/CTEXT/ctext.tbl.ms \ - specs/FSProtocol/protocol.ms \ specs/ICCCM/icccm.ms \ specs/ICCCM/indexmacros.t \ specs/RX/RX.mif \ diff --git a/specs/FSProtocol/protocol.ms b/specs/FSProtocol/protocol.ms deleted file mode 100644 index 52e9b47..0000000 --- a/specs/FSProtocol/protocol.ms +++ /dev/null @@ -1,3602 +0,0 @@ -.\" $Xorg: protocol.ms,v 1.3 2000/08/17 19:42:07 cpqbld Exp $ -.\" $XdotOrg: xc/doc/specs/FSProtocol/protocol.ms,v 1.2 2004/04/23 18:42:15 eich Exp $ -.\" Use tbl, -ms, and macros.t -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 11 -.nr PS 11 -\& -.sp 8 -.ce 50 -\s+3\fBThe X Font Service Protocol\fP\s-3 -.sp -\fBVersion 2.0\fP -\fBX Window System Standard\fR -.sp -\fBX Version 11, Release 6.8\fR -.sp 6 -Jim Fulton -Network Computing Devices, Inc. -.sp 6 -Revised May 2, 1994 -.ce 0 -.bp -.br -\& -.sp 15 -.ps 9 -.nr PS 9 -.LP -Copyright \(co 1991 Network Computing Devices, Inc. -.LP -Permission to use, copy, modify, distribute, and sell this -documentation for any purpose is hereby granted without fee, -provided that the above copyright notice and this permission -notice appear in all copies. Network Computing Devices, Inc. -makes no representations about the suitability for any purpose -of the information in this document. This documentation is -provided ``as is'' without express or implied warranty. -.LP -Copyright \(co 1994 X Consortium -.LP -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the ``Software''), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -.LP -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. -.ps 11 -.nr PS 11 -.bp 1 -.EH '\fBX Font Service Protocol\fP''\fBX11, Release 6.8\fP' -.OH '\fBX Font Service Protocol\fP''\fBX11, Release 6.8\fP' -.EF ''\fB\\\\n(PN\fP'' -.OF ''\fB\\\\n(PN\fP'' -.NH 1 -Introduction -.XS -\*(SN Introduction -.XE -.LP -The management of fonts in large, heterogeneous environments is one of the -hardest aspects of using the X Window System.* -.FS -* \fIX Window System\fP is a trademark of The Open Group. -.FE -Multiple formats and the lack of -a consistent mechanism for exporting font data to all displays on a network -prevent the transparent use of applications across different display platforms. -The X Font Service protocol is designed to address this and other issues, with -specific emphasis on the needs of the core X protocol. Upward-compatible -changes (typically in the form of new requests) are expected as consensus is -reached on new features (particularly outline font support). -.LP -Currently, most X displays use network file protocols such as NFS and TFTP to -obtain raw font data which they parse directly. Since a common binary format -for this data doesn't exist, displays must be able to interpret a variety of -formats if they are to be used with different application hosts. This leads to -wasted code and data space and a loss of interoperability as displays are used -in unforeseen environments. -.LP -By moving the interpretation of font data out of the X server into a separate -service on the network, these problems can be greatly reduced. In addition, -new technologies, such as dynamically generating bitmaps from scaled or outline -fonts, can be provided to all displays transparently. For horizontal text, -caching techniques and increased processor power can potentially make -rasterization more efficient on large, centralized hosts than on individual -displays. -.LP -Each font server provides sets of fonts that may be listed and queried for -header, property, glyph extents, and bitmap information. This data is -transmitted over the network using a binary format (with variations to support -different bit- and byte-orders) designed to minimize the amount of processing -required by the display. Since the font server, rather than the display, is -responsible for parsing the raw font data, new formats can be used by all -displays by modifying a single font server. -.LP -From the user's point of view, font servers are simply a new type of name in -the X font path. Network name services allow descriptive names (such as -DEPARTMENT-FONTS or APPLICATION-FONTS) to be translated into proper network -addresses. X displays send requests to and read replies from the font server -rather than reading directly from files. Since the X Font Service protocol is -designed to allow subsets of the font data to be requested, displays may easily -implement a variety of strategies for fine-grained demand-loading of glyphs. -.NH 1 -Architectural Model -.XS -\*(SN Architectural Model -.XE -.LP -In this document, the words ``client'' and ``server'' refer to the consumer and -provider of a font, respectively, unless otherwise indicated. It is important -to note that in this context, the X server is also a font client. -.LP -The X Font Service protocol does not require any changes to the core X protocol -or to any applications. To the user, font servers are simply additional types -of font path elements. As such, X servers may connect to multiple font -servers, as shown in Figure 2.1. Although the font protocol is geared towards -the X Window System, it may be also used by other consumers of font data (such -as printer drivers). -.DS -.ft C - +--------+ +---------------+ - | X1 |--------------| | - | Server | | Font Server | - +--------+ +-------| 1 | - | +---------------+ - +--------+ | - | X2 |------+ +---------------+ - | Server |--------------| | - +--------+ | Font Server | - +-------| 2 | -+---------+ | +---------------+ -| other | | -| clients |------+ -+---------+ -.ft -.DE -.ce -Figure \*(SN1: Connecting to a Font Server -.LP -Clients communicate with the font server using the request/reply/event model -over any mutually-understood virtual stream connection (such as TCP/IP, DECnet,* -.FS -*DECnet is a trademark of Digital Equipment Corporation. -.FE -etc.). Font servers are responsible for providing data in the bit and byte -orders requested by the client. The set of requests and events provided in the -first version of the X Font Service protocol is limited to supporting the needs -of the bitmap-oriented core X Window System protocol. Extensions are expected -as new needs evolve. -.LP -A font server reads raw font data from a variety of sources (possibly -including other font servers) and converts it into a common format that is -transmitted to the client using the protocol described in Section 4. New font -formats are handled by adding new converters to a font server, as shown in -Figure 2.2. -.DS -.ft C - +------------+ - | client | - | (X server) | - +------------+ - | - network - | -+--------------------------------------------+ -| | -| font server 1 | -| | -+-----+-----+-----+-----+----+-----+---+-----+ -| bdf | snf | pcf | atm | f3 | dwf | | | ... | -+-----+-----+-----+-----+----+-----+-|-+-----+ - | - network - | - +----------+ - | font | - | server 2 | - +----------+ -.ft -.DE -.ce -Figure \*(SN2: Where Font Data Comes From -.LP -The server may choose to provide named sets of fonts called ``catalogues.'' -Clients may specify which of the sets should be used in listing or opening a -font. -.LP -An event mechanism similar to that used in the X protocol is provided for -asynchronous notification of clients by the server. -.LP -Clients may provide authorization data for the server to be used in determining -(according to the server's licensing policy) whether or not access should be -granted to particular fonts. This is particularly useful for clients whose -authorization changes over time (such as an X server that can verify the -identity of the user). -.LP -Implementations that wish to provide additional requests or events may use the -extension mechanism. Adding to the core font service protocol (with the -accompanying change in the major or minor version numbers) is reserved to the X -Consortium. -.NH 1 -Font Server Naming -.XS -\*(SN Font Server Naming -.XE -.LP -Font clients that expose font server names to the user are encouraged to -provide ways of naming font servers symbolically (e.g. DEPARTMENT-FONTS). -However, for environments that lack appropriate name services -transport-specific names are necessary. Since these names do occur in the -protocol, clients and servers should support at least the applicable formats -described below. Formats for additional transports may be registered with the -X Consortium. -.NH 2 -TCP/IP Names -.XS -\*(SN TCP/IP Names -.XE -.LP -The following syntax should be used for TCP/IP names: -.DS - <TCP name> ::= "tcp/" <hostname>":" <ipportnumber> ["/" <cataloguelist>] -.DE -where <hostname> is either symbolic (such as expo.lcs.mit.edu) or numeric -decimal (such as 18.30.0.212). The <ipportnumber> is the port on which the -font server is listening for connections. The <cataloguelist> string at -the end is optional and specifies a plus-separated list of catalogues -that may be requested. For example: -.DS - tcp/expo.lcs.mit.edu:8012/available+special - tcp/18.30.0.212:7890 -.DE -.NH 2 -DECnet Names -.XS -\*(SN DECnet Names -.XE -.LP -The following syntax should be used for DECnet names: -.DS - <DECnet name> ::= "decnet/" <nodename> "::font$" <objname> - ["/" <cataloguelist>] -.DE -where <nodename> is either symbolic (such as SRVNOD) or the numeric decimal -form of the DECnet address (such as 44.70). The <objname> is normal, -case-insensitive DECnet object name. The <cataloguelist> string at the end is -optional and specifies a plus-separated list of catalogues that may be -requested. For example: -.DS - DECNET/SRVNOD::FONT$DEFAULT/AVAILABLE - decnet/44.70::font$other -.DE -.NH 1 -Protocol -.XS -\*(SN Protocol -.XE -.LP -The protocol described below uses the request/reply/error model and is -specified using the same conventions outlined in Section 2 of the core X Window -System protocol [1]: -.IP \(bu 5 -Data type names are spelled in upper case with no word separators, -as in: FONTID -.IP \(bu 5 -Alternate values are capitalized with no word separators, -as in: MaxWidth -.IP \(bu 5 -Structure element declarations are in lower case with hyphens -as word separators, as in: byte-order-msb -.NT -Structure element names are referred to in -upper case (e.g. BYTE-ORDER-MSB) when used in -descriptions to set them off from the surrounding -text. When this document is typeset they will be -printed in lower case in a distinct font. -.NE -.IP \(bu 5 -Type declarations have the form ``name: type'', -as in: CARD8: 8-bit byte -.IP \(bu 5 -Comma-separated lists of alternate values are enclosed in -braces, as in: { Min, MaxWidth, Max } -.IP \(bu 5 -Comma-separated lists of structure elements are enclosed in -brackets, as in: [ byte1: CARD8, byte2: CARD8 ] -.LP -A type with a prefix ``LISTof'' represents a counted list of -elements of that type, as in: LISTofCARD8 -.NH 2 -Data Types -.XS -\*(SN Data Types -.XE -.LP -The following data types are used in the core X Font Server protocol: -.LP -ACCESSCONTEXT: ID -.IP -This value is specified in the CreateAC request as the identifier -to be used when referring to a particular AccessContext resource -within the server. These resources are used by the server to -store client-specified authorization information. This -information may be used by the server to determine whether or not -the client should be granted access to particular font data. -.sp -In order to preserve the integrity of font licensing being performed by -the font server, care must be taken by a client to properly represent the -identity of the true user of the font. Some font clients will in fact -be servers (for example, X servers) requesting fonts for their own clients. -Other font clients may be doing work on behalf of a number of different -users over time (for example, print spoolers). -.sp -.PN AccessContexts -must be created (with -.PN CreateAC ) -and switched among (with -.PN SetAuthorization ) -to represent all of these ``font users'' properly. -.LP -ALTERNATESERVER: [ name: STRING8, -.br - subset: BOOL ] -.IP -This structure specifies the NAME, encoded in ISO 8859-1 according -to Section 3, of another font server that may be useful as a -substitute for this font server. The SUBSET field indicates -whether or not the alternate server is likely to only contain a -subset of the fonts available from this font server. This -information is returned during the initial connection setup and -may be used by the client to find a backup server in case of -failure. -.LP -AUTH: [ name: STRING8, -.br - data: LISTofBYTE ] -.IP -This structure specifies the name of an authorization protocol and -initial data for that protocol. It is used in the authorization -negotiation in the initial connection setup and in the CreateAC -request. -.ne 5 -.LP -BITMAPFORMAT: -.IP -CARD32 containing the following fields defined by the -sets of values given further below -.RS -.DS -.TA .75i .75i .75i .75i -[ - byte-order-msb: 1 bit, - bit-order-msb: 1 bit, - image-rect: 2 bits { Min, - MaxWidth, - Max }, - zero-pad: 4 bits, - scanline-pad: 2 bits { ScanlinePad8, - ScanlinePad16, - ScanlinePad32, - ScanlinePad64 }, - zero-pad: 2 bits, - scanline-unit: 2 bits { ScanlineUnit8, - ScanlineUnit16, - ScanlineUnit32, - ScanlineUnit64 }, - zero-pad: 2 bits, - zero-pad: 16 bits, -] -.DE -.RE -This structure specifies how glyph images are transmitted in -response to -.PN QueryXBitmaps8 -and -.PN QueryXBitmaps16 -requests. -.sp -If the BYTE-ORDER-MSB bit (1 << 0) is set, the Most Significant -Byte of each scanline unit is returned first. Otherwise, the -Least Significant Byte is returned first. -.sp -If the BIT-ORDER-MSB bit (1 << 1) is set, the left-most bit in -each glyph scanline unit is stored in the Most Significant Bit of -each transmitted scanline unit. Otherwise, the left-most bit is -stored in the Least Significant Bit. -.sp -The IMAGE-RECT field specifies a rectangle of pixels within the -glyph image. It contains one of the following alternate values: -.RS -.DS - - ImageRectMin (0 << 2) - ImageRectMaxWidth (1 << 2) - ImageRectMax (2 << 2) -.DE -.RE -For a glyph with extents XCHARINFO in a font with header information -XFONTINFO, the IMAGE-RECT values have the following meanings: -.RS -.in +5n -.IP -.PN ImageRectMin - -This refers to the minimal bounding rectangle -surrounding the inked pixels in the glyph. This is the -most compact representation. The edges of the rectangle -are: -.RS -.DS -.TA .75i .75i .75i .75i - left: XCHARINFO.LBEARING - right: XCHARINFO.RBEARING - top: XCHARINFO.ASCENT - bottom: XCHARINFO.DESCENT -.DE -.RE -.IP -.PN ImageRectMaxWidth - -This refers to the scanlines between the -glyph's ascent and descent, padded on the left to the minimum -left-bearing (or 0, whichever is less) and on the right to -the maximum right-bearing (or logical-width, whichever is -greater). All glyph images share a common horizontal -origin. This is a combination of ImageRectMax in the -horizontal direction and ImageRectMin in the vertical -direction. The edges of the rectangle are: -.RS -.DS -.TA .75i .75i .75i .75i -left: min (XFONTINFO.MIN-BOUNDS.LBEARING, 0) -right: max (XFONTINFO.MAX-BOUNDS.RBEARING, - XFONTINFO.MAX-BOUNDS.WIDTH) -top: XCHARINFO.ASCENT -bottom: XCHARINFO.DESCENT -.DE -.RE -.IP -ImageRectMax - This refers to all scanlines, from the maximum -ascent (or the font ascent, whichever is greater) to the -maximum descent (or the font descent, whichever is greater), -padded to the same horizontal extents as MaxWidth. -All glyph images have the same sized bitmap and share a -common origin. This is the least compact representation, -but may be the easiest or most efficient (particularly for -character cell fonts) for some clients to use. The edges of -the rectangle are: -.RS -.DS -.TA .75i .75i .75i .75i -left: min (XFONTINFO.MIN-BOUNDS.LBEARING, 0) -right: max (XFONTINFO.MAX-BOUNDS.RBEARING, - XFONTINFO.MAX-BOUNDS.WIDTH) -top: max (XFONTINFO.FONT-ASCENT, - XFONTINFO.MAX-BOUNDS.ASCENT) -bottom: max (XFONTINFO.FONT-DESCENT, - XFONTINFO.MAX-BOUNDS.DESCENT) -.DE -.RE -The SCANLINE-PAD field specifies the number of bits (8, 16, 32, -or 64) to which each glyph scanline is padded before transmitting. -It contains one of the following alternate values: -.RS -.DS -.TA .75i .75i .75i .75i - ScanlinePad8 (0 << 8) - ScanlinePad16 (1 << 8) - ScanlinePad32 (2 << 8) - ScanlinePad64 (3 << 8) -.DE -.RE -The SCANLINE-UNIT field specifies the number of bits (8, 16, 32, -or 64) that should be treated as a unit for swapping. This value -must be less than or equal to the number of bits specified by the -SCANLINE-PAD. It contains one of the following alternate values: -.RS -.DS -.TA .75i .75i .75i .75i - ScanlineUnit8 (0 << 12) - ScanlineUnit16 (1 << 12) - ScanlineUnit32 (2 << 12) - ScanlineUnit64 (3 << 12) -.DE -.RE -BITMAPFORMATs are byte-swapped as CARD32s. All unspecified bits -must be zero. -.sp -Use of an invalid BITMAPFORMAT causes a Format error to -be returned. -.in -5n -.RE -.LP -BITMAPFORMATMASK: CARD32 mask -.IP -This is a mask of bits representing the fields in a BITMAPFORMAT: -.RS -.DS -.TA .75i .75i .75i .75i - ByteOrderMask (1 << 0) - BitOrderMask (1 << 1) - ImageRectMask (1 << 2) - ScanlinePadMask (1 << 3) - ScanlineUnitMask (1 << 4) -.DE -.RE -Unspecified bits are required to be zero or else a Format error -is returned. -.LP -BOOL: CARD8 -.IP -This is a boolean value containing one of the following alternate -values: -.RS -.DS -.TA .75i .75i .75i .75i - - False 0 - True 1 -.DE -.RE -.LP -BYTE: 8-bit value -.IP -This is an unsigned byte of data whose encoding -is determined by the context in which it is used. -.sp 12p -.LP -CARD8: 8-bit unsigned integer -.sp 12p -.LP -CARD16: 16-bit unsigned integer -.sp 12p -.LP -CARD32: 32-bit unsigned integer -.IP -These are unsigned numbers. The latter two are byte-swapped when -the server and client have different byte orders. -.sp 12p -.LP -CHAR2B: [ byte1, byte2: CARD8 ] -.IP -This structure specifies an individual character code within -either a 2-dimensional matrix (using BYTE1 and BYTE2 as the row -and column indices, respectively) or a vector (using BYTE1 and -BYTE2 as most- and least-significant bytes, respectively). This -data type is treated as a pair of 8-bit values and is never -byte-swapped. Therefore, the client should always transmit BYTE1 -first. -.sp 12p -.LP -EVENTMASK: CARD32 mask -.IP -This is a mask of bits indicating which of an extension's (or the -core's) maskable events the client would like to receive. Each -bit indicates one or more events, and a bit value of one indicates -interest in a corresponding set of events. The following bits are -defined for event masks specified for the core protocol (i.e. an -EXTENSION-OPCODE of zero in -.PN SetEventMask -and -.PN GetEventMask -requests): -.RS -.DS -.TA .75i .75i .75i .75i - - CatalogueListChangeMask (1 << 0) - FontListChangeMask (1 << 1) -.DE -.RE -If -.PN CatalogueListChangeMask -is set, client is interested in -receiving -.PN CatalogueListNotify -events. If -.PN FontListChangeMask -is set, the client is interested in -receiving -.PN FontListNotify -events. -.sp -Extensions that provide additional events may define their own -event masks. These event masks have their own scope and may use -the same bit values as the core or other extensions. -.sp -All unused bits must be set to zero. In -.PN SetEventMask -requests, if -any bits are set that are not defined for the extension (or core) -for which this EVENTMASK is intended (according to the EXTENSION- -OPCODE given in the -.PN SetEventMask -request), an -.PN EventMask -error is generated. -.sp -This value is swapped as a CARD32. -.LP -FONTID: ID -.IP -This is specified by the client in the request -.PN OpenBitmapFont -as the identifier to be used when referring to a particular open -font. -.LP -ID: CARD32 -.IP -This is a 32-bit value in which the top 3 bits must be clear, and -at least 1 other bit must be set (yielding a range of 1 through -2^29-1). It is specified by the client to represent objects in -the server. Identifiers are scoped according to their type are -private to the client; thus, the same identifier may be used for -both a FONTID and an ACCESSCONTEXT as well as by multiple clients. -.sp -An ID of zero is referred to as None. -.LP -INT8: 8-bit signed integer -.LP -INT16: 16-bit signed integer -.LP -INT32: 32-bit signed integer -.IP -These are signed numbers. The latter two are byte-swapped when -the client and server have different byte orders. -.LP -OFFSET32: [ position: CARD32, -.br - length: CARD32 ] -.IP -This structure indicates a position and length within a block of -data. -.LP -PROPINFO: [ offsets: LISTofPROPOFFSET, -.br - data: LISTofBYTE ] -.IP -This structure describes the list of properties provided by a -font. Strings for all of the properties names and values are -stored within the data block and are located using a table of -offsets and lengths. -.sp -This structure is padded to 32-bit alignment. -.LP -PROPOFFSET: [ name: OFFSET32, -.br - value: OFFSET32, -.br - type: CARD8, -.br - zero-pad3: BYTE, BYTE, BYTE ] -.IP -This structure specifies the position, length, and type of -of data for a property. -.sp -The NAME field specifies the position and length (which must be -greater than zero) of the property name relative to the beginning -of the PROPINFO.DATA block for this font. The interpretation of -the position and length of the VALUE field is determined by the -TYPE field, which contains one of the following alternate values: -.RS -.DS -.TA .75i .75i .75i .75i - String 0 - Unsigned 1 - Signed 2 -.DE -.RE -.IP -which have the following meanings: -.RS -.in +5n -.IP String -.br -This property contains a counted string of bytes. The -data is stored in the PROPINFO.DATA block beginning at -relative byte VALUE.POSITION (beginning with zero), extending -for VALUE.LENGTH (at least zero) bytes. -.IP Unsigned -This property contains a unsigned, 32-bit number stored -as a CARD32 in VALUE.POSITION (VALUE.LENGTH is zero). -.IP Signed -.br -This property contains a signed, 32-bit number stored as -an INT32 in VALUE.POSITION (VALUE.LENGTH is zero). -.in -5n -.RE -.sp -This structure is zero-padded to 32-bit alignment. -.LP -RANGE: [ min-char, max-char: CHAR2B ] -.IP -This structure specifies a range of character codes. A single -character is represented by MIN-CHAR equals MAX-CHAR. If the -linear interpretation of MAX-CHAR is less than that of MIN-CHAR, -or if MIN-CHAR is less than the font's -XFONTINFO.CHAR-RANGE.MIN-CHAR, or if MAX-CHAR is greater than the -font's XFONTINFO.CHAR-RANGE.MAX-CHAR, the range is invalid. -.LP -RESOLUTION: [ x-resolution: CARD16, -.br - y-resolution: CARD16, -.br - decipoint-size: CARD16 ] -.IP -This structure specifies resolution and point size to be used in -resolving partially-specified scaled font names. The X-RESOLUTION -and Y-RESOLUTION are measured in pixels-per-inch and must be -greater than zero. The DECIPOINT-SIZE is the preferred font -size, measured in tenths of a point, and must be greater than zero. -.LP -STRING8: LISTofCARD8 -.IP -This is a counted list of 1-byte character codes, typically -encoded in ISO 8859-1. A character code ``c'' is equivalent to a -CHAR2B structure whose BYTE1 is zero and whose BYTE2 is ``c''. -.LP -TIMESTAMP: CARD32 -.IP -This is the number of milliseconds that have passed since a server- -dependent origin. It is provided in errors and events and is -permitted to wrap. -.LP -XCHARINFO: [ lbearing, rbearing: INT16, -.br - width: INT16, -.br - ascent, descent: INT16, -.br - attributes: CARD16 ] -.IP -This structure specifies the ink extents and horizontal escapement -(also known as the set- or logical width) of an individual -character. The first five values represent directed distances in -a coordinate system whose origin is aligned with the lower-left -edge of the left-most pixel of the glyph baseline (i.e. the -baseline falls between two pixels as shown in Figure 3-1 of the -``Bitmap Distribution Format 2.1'' Consortium standard [2]). -.sp -The LBEARING field specifies the directed distance measured to the -right from the origin to the left edge of the left-most inked -pixel in the glyph. -.sp -The RBEARING field specifies the directed distance (measured to -the right) from the origin to the right edge of the right-most -inked pixel in the glyph. -.sp -The WIDTH field specifies the directed distance (measured to the -right) from the origin to the position where the next character -should appear (called the ``escapement point''). This distance -includes any whitespace used for intercharacter padding and is -also referred to as the ``logical width'' or ``horizontal -escapement.'' -.sp -The ASCENT field specifies the directed distance (measured up) -from the baseline to the top edge of the top-most inked pixel -in the glyph. -.sp -The DESCENT field specifies the directed distance (measured -down) from the baseline to the bottom edge of the bottom-most -inked pixel. -.sp -The ATTRIBUTES field specifies glyph-specific information that -is passed through the application. If this value is not being -used, it should be zero. -.sp -The ink bounding box of a glyph is defined to be the smallest -rectangle that encloses all of the inked pixels. This box has -a width of RBEARING - LBEARING pixels and a height of -ASCENT + DESCENT pixels. -.LP -XFONTINFO: [ flags: CARD32, -.br - drawing-direction: { LeftToRight, RightToLeft } -.br - char-range: RANGE, -.br - default-char: CHAR2B, -.br - min-bounds: XCHARINFO, -.br - max-bounds: XCHARINFO, -.br - font-ascent: INT16, -.br - font-descent: INT16, -.br - properties: PROPINFO ] -.IP -This structure specifies attributes related to the font as a -whole. -.sp -The FLAGS field is a bit mask containing zero or more of the -following boolean values (unspecified bits must be zero): -.RS -.DS -.TA .75i .75i .75i .75i - AllCharactersExist (1 << 0) - InkInside (1 << 1) - HorizontalOverlap (1 << 2) -.DE -.RE -.IP -which have the following meanings: -.RS -.in +5n -.IP AllCharactersExist -If this bit is set, all of the characters -in the range given by CHAR-RANGE have glyphs encoded in -the font. If this bit is clear, some of the characters -may not have encoded glyphs. -.IP InkInside -If this bit is set, the inked pixels of each glyph -fall within the rectangle described by the font's ascent, -descent, origin, and the glyph's escapement point. If -this bit is clear, there may be glyphs whose ink extends -outside this rectangle. -.IP HorizontalOverlap -If this bit is set, the two ink bounding -boxes (smallest rectangle enclosing the inked pixels) of -some pairs of glyphs in the font may overlap when displayed -side-by-side (i.e. the second character is imaged at the -escapement point of the first) on a common baseline. If -this bit is clear, there are no pairs of glyphs whose ink -bounding boxes overlap. -.in -5n -.RE -.IP -The DRAWING-DIRECTION field contains a hint indicating whether -most of the character metrics have a positive (or ``LeftToRight'') -logical width or a negative (``RightToLeft'') logical width. It -contains the following alternate values: -.RS -.DS - - LeftToRight 0 - RightToLeft 1 -.DE -.RE -The CHAR-RANGE.MIN-CHAR and CHAR-RANGE.MAX-CHAR fields specify the -first and last character codes that have glyphs encoded in this font. -All fonts must have at least one encoded glyph (in which case the -MIN-CHAR and MAX-CHAR are equal), but are not required to have glyphs -encoded at all positions between the first and last characters. -.sp -The DEFAULT-CHAR field specifies the character code of the glyph -that the client should substitute for unencoded characters. Requests -for extents or bitmaps for an unencoded character generate zero-filled -metrics and a zero-length glyph bitmap, respectively. -.sp -The MIN-BOUNDS and MAX-BOUNDS fields contain the minimum and maximum -values of each of the extents field of all encoded characters in the -font (i.e. non-existent characters are ignored). -.sp -The FONT-ASCENT and FONT-DESCENT fields specify the font designer's -logical height of the font, above and below the baseline, -respectively. The sum of the two values is often used as the -vertical line spacing of the font. Individual glyphs are permitted -to have ascents and descents that are greater than these values. -.sp -The PROPERTIES field contains the property data associated with -this font. -.sp -This structure is padded to 32-bit alignment. -.NH 2 -Requests -.XS -\*(SN Requests -.XE -.LP -This section describes the requests that may be sent by the client and the -replies or errors that are generated in response. Versions of the protocol -with the same major version are required to be upward-compatible. -.LP -Every request on a given connection is implicitly assigned a sequence number, -starting with 1, that is used in replies, error, and events. Servers are -required to generate replies and errors in the order in which the corresponding -requests are received. Servers are permitted to add or remove fonts to the -list visible to the client between any two requests, but requests must be -processed atomically. Each request packet is at least 4 bytes long and -contains the following fields: -.RS -.DS - major-opcode: CARD8 - minor-opcode: CARD8 - length: CARD16 -.DE -.RE -The MAJOR-OPCODE specifies which core request or extension package this packet -represents. If the MAJOR-OPCODE corresponds to a core request, the -MINOR-OPCODE contains 8 bits of request-specific data. Otherwise, the -MINOR-OPCODE specifies which extension request this packet represents. The -LENGTH field specifies the number of 4-byte units contained within the packet -and must be at least one. If this field contains a value greater than one it -is followed by (LENGTH - 1) * 4 bytes of request-specific data. Unless -otherwise specified, unused bytes are not required to be zero. -.LP -If a request packet contains too little or too much data, the server returns -a Length error. If the server runs out of internal resources (such as -memory) while processing a request, it returns an Alloc error. If a server is -deficient (and therefore non-compliant) and is unable to process a request, it -may return an Implementation error. If a client uses an extension request -without previously having issued a -.PN QueryExtension -request for that extension, the server responds with a -.PN Request -error. If the server encounters a request -with an unknown MAJOR-OPCODE or MINOR-OPCODE, it responds with a -.PN Request -error. -At most one error is generated per request. If more than one error condition -is encountered in processing a requests, the choice of which error is returned -is server-dependent. -.LP -Core requests have MAJOR-OPCODE values between 0 and 127, inclusive. Extension -requests have MAJOR-OPCODE values between 128 and 255, inclusive, that are -assigned by by the server. All MINOR-OPCODE values in extension requests are -between 0 and 255, inclusive. -.LP -Each reply is at least 8 bytes long and contains the following fields: -.RS -.DS -.TA .75i .75i .75i .75i - - type: CARD8 value of 0 - data-or-unused: CARD8 - sequence-number: CARD16 - length: CARD32 -.DE -.RE -The TYPE field has a value of zero. The DATA-OR-UNUSED field may be used to -encode one byte of reply-specific data (see Section 5.2 on request encoding). -The least-significant 16 bits of the sequence number of the request that -generated the reply are stored in the SEQUENCE-NUMBER field. The LENGTH field -specifies the number of 4-byte units in this reply packet, including the fields -described above, and must be at least two. If LENGTH is greater than two, the -fields described above are followed by (LENGTH - 2) * 4 bytes of additional -data. -.LP -Requests that have replies are described using the following syntax: -.RS -.DS - - RequestName - \fIarg1\fP\^: type1 - \fIarg2\fP\^: type2 - ... - \fIargN\fP\^: typeN - => - \fIresult1\fP\^: type1 - \fIresult2\fP\^: type2 - ... - \fIresultM\fP\^: typeM - - Errors: \fIkind1\fR, \fIkind2\fR ..., \fIkindK\fR - - Description -.DE -.RE -If a request does not generate a reply, the``=>'' and result lines are -omitted. If a request may generate multiple replies, the ``=>'' is replaced by -a ``=>+''. In the authorization data exchanges in the initial connection setup -and the CreateAC request, ``->'' indicates data sent by the client in response -to data sent by the server. -.LP -The protocol begins with the establishment of a connection over a -mutually-understood virtual stream: -.RS -.DS - - open connection - byte-order: BYTE - client-major-protocol-version: CARD16 - client-minor-protocol-version: CARD16 - authorization-protocols: LISTofAUTH -.DE -.RE -The initial byte of the connection specifies the BYTE-ORDER in -which subsequent 16-bit and 32-bit numeric values are to be -transmitted. The octal value 102 (ASCII uppercase `B') -indicates that the most-significant byte is to be transmitted -first; the octal value 154 (ASCII lowercase `l') indicates -that the least-significant byte is to be transmitted first. -If any other value is encountered the server closes the -connection without any response. -.IP -The CLIENT-MAJOR-PROTOCOL-VERSION and -CLIENT-MINOR-PROTOCOL-VERSION specify which version of the -font service protocol the client would like to use. If the -client can support multiple versions, the highest version -should be given. This version of the protocol has a -major version of 2 and a minor version of 0. -.IP -The AUTHORIZATION-PROTOCOLS contains a list of protocol names and -optional initial data for which the client can provide -information. The server may use this to determine which -protocol to use or as part of the initial exchange of -authorization data. -.RS -.DS -=> -status: { Success, Continue, - Busy, Denied } -server-major-protocol-version: CARD16 -server-minor-protocol-version: CARD16 -alternate-servers-hint: LISTofALTERNATESERVER -authorization-index: CARD8 -authorization-data: LISTofBYTE -.DE -.RE -The SERVER-MAJOR-PROTOCOL-VERSION and -SERVER-MINOR-PROTOCOL-VERSION specify the version of the font -service protocol that the server expects from the client. If -the server supports the version specified by the client, this -version number should be returned. If the client has -requested a higher version than is supported by the server, -the server's highest version should be returned. Otherwise, -if the client has requested a lower version than is supported -by the server, the server's lowest version should be returned. -It is the client's responsibility to decide whether or not it -can match this version of the protocol. -.IP -The ALTERNATE-SERVERS-HINT is a list of other font servers -that may have related sets of fonts (determined by means -outside this protocol, typically by the system administrator). -Clients may choose to contact these font servers if the -connection is rejected or lost. -.IP -The STATUS field indicates whether the server accepted, -rejected, or would like more information about the connection. -It has one of the following alternate values: -.RS -.DS - - Success 0 - Continue 1 - Busy 2 - Denied 3 -.DE -.RE -If STATUS is Denied, the server has rejected the client's -authorization information. If STATUS is Busy, the server has -simply decided that it cannot provide fonts to this client at -this time (it may be able to at a later time). In both cases, -AUTHORIZATION-INDEX is set to zero, no authorization-data is -returned, and the server closes the connection after sending -the data described so far. -.IP -Otherwise the AUTHORIZATION-INDEX is set to the index -(beginning with 1) into the AUTHORIZATION-PROTOCOLS list of -the protocol that the server will use for this connection. If -the server does not want to use any of the given protocols, -this value is set to zero. The AUTHORIZATION-DATA field is -used to send back authorization protocol-dependent data to the -client (such as a challenge, authentication of the server, -etc.). -.LP -If STATUS is Success, the following section of protocol is -omitted. Otherwise, if STATUS is Continue, the server expects -more authorization data from the client (i.e. the connection -setup is not finished, so no requests or events may be sent): -.RS -.DS --> -more-authorization-data: STRING8 -=> -status: { Success, Continue, - Busy, Denied } -more-authorization-data: LISTofBYTE -.DE -.RE -The values in STATUS have the same meanings as described -above. This section of protocol is repeated until the server -either accepts (sets STATUS to Success) or rejects (sets -STATUS to Denied or Busy) the connection. -.LP -Once the connection has been accepted and STATUS is Success, -an implicit AccessContext is created for the authorization -data and the protocol continues with the following data sent -from the server: -.RS -.DS -=> -remaining-length: CARD32 -maximum-request-length: CARD16 -release-number: CARD32 -vendor: STRING8 -.DE -.RE -The REMAINING-LENGTH specifies the length in 4-byte units of -the remaining data to be transmitted to the client. The -MAXIMUM-REQUEST-LENGTH specifies the largest request size in -4-byte units that is accepted by the server and must have a -value of at least 4096. Requests with a length field larger -than this value are ignored and a Length error is returned. -The VENDOR string specifies the name of the manufacturer of -the font server. The RELEASE-NUMBER specifies the particular -release of the server in a manufacturer-dependent manner. -.LP -After the connection is established and the setup information has been -exchanged, the client may issue any of requests described below: -.LP -.IN "NoOp" "" "@DEF@" -.PN NoOp -.IP -Errors: Alloc -.IP -This request does nothing. It is typically used in response -to a -.PN KeepAlive -event. -.LP -.IN "ListExtensions" "" "@DEF@" -.PN ListExtensions -.LP - => -.IP -\fInames\fP\^: LISTofSTRING8 -.IP -Errors: Alloc -.IP -This request returns the names of the extension packages -that are supported by the server. Extension names are -case-sensitive and are encoded in ISO 8859-1. -.LP -.IN "QueryExtension" "" "@DEF@" -.PN QueryExtension -.IP -\fIname\fP\^: STRING8 -.LP - => -.IP -\fIpresent\fP\^: BOOL -.br -\fImajor-version\fP\^: CARD16 -.br -\fIminor-version\fP\^: CARD16 -.br -\fImajor-opcode\fP\^: CARD8 -.br -\fIfirst-event\fP\^: CARD8 -.br -\fInumber-events\fP\^: CARD8 -.br -\fIfirst-error\fP\^: CARD8 -.br -\fInumber-errors\fP\^: CARD8 -.IP -Errors: -.PN Alloc -.IP -This request determines whether or not the extension package -specified by NAME (encoded in ISO 8859-1) is supported by the -server and that there is sufficient number of major opcode, -event, and error codes available. If so, then PRESENT is set -to True, MAJOR-VERSION and MINOR-VERSION are set to the -respective major and minor version numbers of the protocol -that the server would prefer; MAJOR-OPCODE is set to the value -to use in extension requests; FIRST-EVENT is set to the value -of the first extension-specific event code or zero if the -extension does not have any events; NUMBER-EVENTS is set to -the number of new events that the event defines; FIRST-ERROR -is set to the value of the first extension-specific error code -or zero if the extension does not define any new errors; and -NUMBER-ERRORS is set to the number of new errors the extension -defines. -.sp -Otherwise, PRESENT is set to False and the remaining fields are -set to zero. -.sp -The server is free to return different values to different -clients. Therefore, clients must use this request before -issuing any of the requests in the named extension package or -using the -.PN SetEventMask request to express interest in any of -this extension's events. Otherwise, a -.PN Request -error is returned. -.LP -.IN "ListCatalogues" "" "@DEF@" -.PN ListCatalogues -.IP -\fIpattern\fP\^: STRING8 -\fImax-names\fP\^: CARD32 -.LP - =>+ -.IP -\fIreplies-following-hint\fP\^: CARD32 -.br -\fInames\fP\^: LISTofSTRING8 -.IP -Errors: -.PN Alloc -.IP -This request returns a list of at most MAX-NAMES names -of collections (called catalogues) of fonts that match -the specified PATTERN. In the pattern (which is encoded -in ISO 8859-1), the `?' character (octal 77) matches any -single character; the `*' character (octal 52) matches -any series of zero or more characters; and alphabetic -characters match either upper- or lowercase. The -returned NAMES are encoded in ISO 8859-1 and may contain -mixed character cases. -.sp -If PATTERN is of zero length or MAX-NAMES is equal to zero, -one reply containing a zero-length list of names is returned. -This may be used to synchronize the client with the server. -.sp -Servers are free to add or remove catalogues to the set returned by -.PN ListCatalogues -between any two requests. This request is not -cumulative; repeated uses are processed in isolation and do -result in an iteration through the list. -.sp -To reduce the amount of buffering needed by the server, the -list of names may be split across several reply packets, so -long as the names arrive in the same order that they would -have appeared had they been in a single packet. The -REPLIES-FOLLOWING-HINT field in all but the last reply -contains a positive value that specifies the number of -replies that are likely, but not required, to follow. In the -last reply, which may contain zero or more names, this field -is set to zero. -.LP -.IN "SetCatalogues" "" "@DEF@" -.PN SetCatalogues -.IP -\fInames\fP\^: LISTofSTRING8 -.IP -Errors: -.PN Alloc , -.PN Name -.IP -This request sets the list of catalogues whose fonts should be -visible to the client. The union of the fonts provided by -each of the named catalogues forms the set of fonts whose -names match patterns in -.PN ListFonts , -.PN ListFontsWithXInfo , -and -.PN OpenBitmapFont -requests. The catalogue names are -case-insensitive and are encoded in ISO 8859-1. A zero-length -list resets the client's catalogue list to the -server-dependent default. -.sp -If any of the catalogue names are invalid, a -.PN Name -error is returned and the request is ignored. -.LP -.IN "GetCatalogues" "" "@DEF@" -.PN GetCatalogues -.LP - => -.IP -\fInames\fP\^: LISTofSTRING8 -.IP -Errors: -.PN Alloc -.IP -This request returns the current list of catalogue names -(encoded in ISO 8859-1) associated with the client. These -catalogues determine the set of fonts that are visible -to -.PN ListFonts , -.PN ListFontsWithXInfo , -and -.PN OpenBitmapFont . -A zero-length list indicates the server's default set of -fonts. Catalogue names are case-insensitive and may be -returned in mixed case. -.LP -.IN "SetEventMask" "" "@DEF@" -.PN SetEventMask -.IP -\fIextension-opcode\fP\^: CARD8 -.br -\fIevent-mask\fP\^: EVENTMASK -.IP -Errors: -.PN EventMask , -.PN Request -.IP -This request specifies the set of maskable events that the -extension indicated by EXTENSION-OPCODE (or zero for the core) -should generate for the client. Event masks are limited in -scope to the extension (or core) for which they are defined, -so expressing interest in events from one or more extensions -requires multiple uses of this request. -.sp -The default event mask if -.PN SetEventMask -has not been called -is zero, indicating no interest in any maskable events. -Some events are not maskable and cannot be blocked. -.sp -If EXTENSION-OPCODE is not a valid extension opcode previously -returned by -.PN QueryExtension -or zero, a -.PN Request -error is -returned. If EVENT-MASK contains any bits that do not -correspond to valid events for the specified extension (or -core), an -.PN EventMask -error is returned and the request is -ignored. -.LP -.IN "GetEventMask" "" "@DEF@" -.PN GetEventMask -.IP -\fIextension-opcode\fP\^: CARD8 -.LP - => -.IP -\fIevent-mask\fP\^: EVENTMASK -.IP -Errors: -.PN Request -.IP -This request returns the set of maskable core events the -extension indicated by EXTENSION-OPCODE (or the core if zero) -should generate for the client. Non-maskable events are -always sent to the client. - -If EXTENSION-OPCODE is not a valid extension opcode -previously returned by -.PN QueryExtension -or zero, a -.PN Request -error is returned. -.LP -.IN "CreateAC" "" "@DEF@" -.PN CreateAC -.IP -\fIac\fP\^: ACCESSCONTEXT -.br -\fIauthorization-protocols\fP\^: LISTofAUTH -.LP - => -.IP -\fIstatus\fP\^: { Success, Continue, Denied } -.br -\fIauthorization-index\fP\^: CARD8 -.br -\fIauthorization-data\fP\^: LISTofBYTE -.IP -Errors: -.PN IDChoice -.IP -This request creates a new -.PN AccessContext -object within the -server containing the specified authorization data. When -this -.PN AccessContext -is selected by the client using the -.PN SetAuthorization -request, the data may be used by the server -to determine whether or not the client should be granted -access to particular font information. -.sp -If STATUS is Denied, the server rejects the client's -authorization information and does not associate AC with any -valid -.PN AccessContext . -In this case, AUTHORIZATION-INDEX is set -to zero, and zero bytes of AUTHORIZATION-DATA is returned. -.sp -Otherwise, AUTHORIZATION-INDEX is set to the index (beginning -with 1) into the AUTHORIZATION-PROTOCOLS list of the protocol -that the server will use for this connection. If the server -does not want to use any of the given protocols, this value is -set to zero. The AUTHORIZATION-DATA field is used to send -back authorization protocol-dependent data to the client (such -as a challenge, authentication of the server, etc.). -.sp -If STATUS is Continue, the client is expected to continue -the request by sending the following protocol and receiving -the indicated response from the server. This continues -until STATUS is set to either Success or Denied. -.RS -.DS - \-> - more-authorization-data: STRING8 - => - status: { Success, Continue, Denied } - more-authorization-data: LISTofBYTE -.DE -.RE -Once the connection has been accepted and STATUS is Success, -the request is complete. -.sp -If AC is not in the range [1..2^29-1] or is already associated -with an access context, an IDChoice error is returned. -.LP -.IN "FreeAC" "" "@DEF@" -.PN FreeAC -.IP -\fIac\fP\^: ACCESSCONTEXT -.IP -Errors: -.PN AccessContext , -.PN Alloc -.IP -This request indicates that the specified AC should no longer -be associated with a valid access context. If AC is also the -current -.PN AccessContext -(as set by the -.PN SetAuthorization -request), an implicit -.PN SetAuthorization -of None is done to -restore the -.PN AccessContext -established for the initial -connection setup. Operations on fonts that were opened under -AC are not affected. The client may reuse the value of AC in -a subsequent -.PN CreateAC -request. -.sp -If AC isn't associated with any valid authorization previously -created by -.PN CreateAC , an -.PN AccessContext -error is returned. -.LP -.IN "SetAuthorization" "" "@DEF@" -.PN SetAuthorization -.IP -\fIac\fP\^: ACCESSCONTEXT -.IP -Errors: -.PN AccessContext -.IP -This request sets the -.PN AccessContext -to be used for subsequent -requests (except for -.PN QueryXInfo , -.PN QueryXExtents8 , -.PN QueryXExtents16 , -.PN QueryXBitmaps8 , -.PN QueryXBitmaps16 , -and -.PN CloseFont -which are done under the -.PN AccessContext -of the -corresponding -.PN OpenBitmapFont ")." -An AC of None restores the -.PN AccessContext -established for the initial connection setup. -.sp -If AC is neither None nor a value associated with a valid -.PN AccessContext -previously created by -.PN CreateAC , -an -.PN AccessContext -error is returned. -.LP -.IN "SetResolution" "" "@DEF@" -.PN SetResolution -.IP -\fIresolutions\fP\^: LISTofRESOLUTION -.IP -Errors: -.PN Resolution , -.PN Alloc -.IP -This request provides a hint as to the resolution and -preferred point size of the drawing surfaces for which the -client will be requesting fonts. The server may use this -information to set the RESOLUTION_X and RESOLUTION_Y fields -of scalable XLFD font names, to order sets of names based on -their resolutions, and to choose the server-dependent -instance that is used when a partially-specified scalable -fontname is opened. -.sp -If a zero-length list of RESOLUTIONS is given, the -server-dependent default value is restored. Otherwise, if -elements of all of the specified RESOLUTIONS are non-zero, the -default resolutions for this client are changed. -.sp -If a RESOLUTION entry contains a zero, a Resolution error is -returned and the default resolutions are not changed. -.LP -.IN "GetResolution" "" "@DEF@" -.PN GetResolution -.LP - => -.IP -\fIresolutions\fP\^: LISTofRESOLUTION -.IP -Errors: -.PN Alloc -.IP -This request returns the current list of default resolutions. -If a client has not performed a -.PN SetResolution , -a server-dependent default value is returned. -.LP -.IN "ListFonts" "" "@DEF@" -.PN ListFonts -.IP -\fIpattern\fP\^: STRING8 -\fImax-names\fP\^: CARD32 -.LP - =>+ -.IP -\fIreplies-following-hint\fP\^: CARD32 -.br -\fInames\fP\^: LISTofSTRING8 -.IP -Errors: -.PN Alloc -.IP -This request returns a list of at most MAX-NAMES font names -that match the specified PATTERN, according to matching rules -of the X Logical Font Description Conventions [3]. In the -pattern (which is encoded in ISO 8859-1) the `?' character -(octal 77) matches any single character; the `*' character -(octal 52) matches any series of zero or more characters; and -alphabetic characters match either upper- or lowercase. The -returned NAMES are encoded in ISO 8859-1 and may contain mixed -character cases. Font names are not required to be in XLFD -format. -.sp -If PATTERN is of zero length or MAX-NAMES is equal to zero, -one reply containing a zero-length list of names is returned. -This may be used to synchronize the client with the server. -.sp -Servers are free to add or remove fonts to the set returned by -.PN ListFonts -between any two requests. This request is not -cumulative; repeated uses are processed in isolation and do -result in an iteration through the list. -.sp -To reduce the amount of buffering needed by the server, the -list of names may be split across several reply packets, so -long as the names arrive in the same order that they would -have appeared had they been in a single packet. The -REPLIES-FOLLOWING-HINT field in all but the last reply -contains a positive value that specifies the number of -replies that are likely, but not required, to follow. In the -last reply, which may contain zero or more names, this field -is set to zero. -.LP -.IN "ListFontsWithXInfo" "" "@DEF@" -.PN ListFontsWithXInfo -.IP -\fIpattern\fP\^: STRING8 -.br -\fImax-names\fP\^: CARD32 -.LP - =>+ -.IP -\fIreplies-following-hint\fP\^: CARD32 -.br -\fIinfo\fP\^: XFONTINFO -.br -\fIname\fP\^: STRING8 -.IP -Errors: -.PN Alloc -.IP -This request is similar to -.PN ListFonts -except that a separate -reply containing the name, header, and property data is -generated for each matching font name. Following these -replies, if any, a final reply containing a zero-length NAME -and no INFO is sent. -.sp -The REPLIES-FOLLOWING-HINT field in all but the last reply -contains a positive value that specifies the number of replies -that are likely, but not required, to follow. In the last -reply, this field is set to zero. -.sp -If PATTERN is of zero length or if MAX-NAMES is equal to -zero, only the final reply containing a zero-length NAME and -no INFO is returned. This may be used to synchronize the -client with the server. -.LP -.IN "OpenBitmapFont" "" "@DEF@" -.PN OpenBitmapFont -.IP -\fIfontid\fP\^: FONTID -.br -\fIpattern\fP\^: STRING8 -.br -\fIformat-mask\fP\^: BITMAPFORMATMASK -.br -\fIformat-hint\fP\^: BITMAPFORMAT -.LP - => -.IP -\fIotherid\fP\^: FONTID or None -.br -\fIotherid-valid\fP\^: BOOL -.br -\fIcachable\fP\^: BOOL -.IP -Errors: -.PN IDChoice , -.PN Name , -.PN Format , -.PN AccessContext , -.PN Alloc -.IP -This request looks for a server-dependent choice of the -font names that match the specified PATTERN according to the -rules described for -.PN ListFonts . -If no matches are found, a -.PN Name -error is returned. Otherwise, the server attempts to -open the font associated with the chosen name. -.sp -Permission to access the font is determined by the server -according the licensing policy used for this font. The server -may use the client's current -.PN AccessContext -(as set by the most -recent -.PN SetAuthorization -request or the original connection -setup) to determine any client-specific sets of permissions. -After the font has been opened, the client is allowed to -specify a new -.PN AccessContext -with -.PN SetAuthorization -or release -the -.PN AccessContext -using -.PN FreeAC . Subsequent -.PN QueryXInfo , -.PN QueryXExtents8 , -.PN QueryXExtents16 , -.PN QueryXBitmaps8 , -.PN QueryXBitmaps16 , and -.PN CloseFont -requests on this FONTID are -performed according to permissions granted at the time of the -.PN OpenBitmapFont -request. -.sp -If the server is willing and able to detect that the client -has already opened the font successfully (possibly under a -different name), the OTHERID field may be set to one of the -identifiers previously used to open the font. The -OTHERID-VALID field indicates whether or not OTHERID is -still associated with an open font: if it is True, the -client may use OTHERID as an alternative to FONTID. -Otherwise, if OTHERID-VALID is False, OTHERID is no longer -open but has not been reused by a subsequent -.PN OpenBitmapFont -request. -.sp -If OTHERID is set to None, then OTHERID-VALID should be set -to False. -.sp -The FORMAT-MASK indicates which fields in FORMAT-HINT -the client is likely to use in subsequent -.PN GetXBitmaps8 -and -.PN GetXBitmaps16 -requests. Servers may wish to use -this information to precompute certain values. -.sp -If CACHABLE is set to True, the client may cache the font -(so that redundant opens of the same font may be avoided) -and use it with all -.PN AccessContexts -during the life of the -client without violating the font's licensing policy. This -flag is typically set whenever a font is unlicensed or is -licensed on a per-display basis. If CACHABLE is False, the -client should reopen the font for each -.PN AccessContext . -.sp -The server is permitted to add to or remove from the set of -fonts returned by -.PN ListFonts -between any two requests, though -mechanisms outside the protocol. Therefore, it is possible -for this request (which is atomic) to return a different font -than would result from separate a -.PN ListFonts -followed by an -.PN OpenBitmapFont -with a non-wildcarded font name. -.sp -If FONTID is not in the range [1..2^29-1] or if it is already -associated with an open font, an -.PN IDChoice -error is returned. -If no font is available that matches the specified PATTERN, a -.PN Name -error is returned. If the font is present but the client -is not permitted access, an -.PN AccessContext -error is returned. -If FORMAT-MASK has any unspecified bits set or if any of the -fields in FORMAT-HINT indicated by FORMAT-MASK are invalid, a -.PN Format -error is returned. -.LP -.IN "QueryXInfo" "" "@DEF@" -.PN QueryXInfo -.IP -\fIfontid\fP\^: FONTID -.LP - => -.IP -\fIinfo\fP\^: XFONTINFO -.IP -Errors: -.PN Font , -.PN Alloc -.IP -This request returns the font header and property information -for the open font associated with FONTID. -.sp -If FONTID is not associated with any open fonts, a -.PN Font -error -is returned. -.LP -.IN "QueryXExtents8" "" "@DEF@" -.PN QueryXExtents8 -.IP -\fIfontid\fP\^: FONTID -.br -\fIrange\fP\^: BOOL -.br -\fIchars\fP\^: STRING8 -.LP - => -.IP -\fIextents\fP\^: LISTofXCHARINFO -.IP -Errors: -.PN Font , -.PN Range , -.PN Alloc -.IP -This request is equivalent to -.PN QueryXExtents16 -except that it -uses 1-byte character codes. -.LP -.IN "QueryXExtents16" "" "@DEF@" -.PN QueryXExtents16 -.IP -\fIfontid\fP\^: FONTID -.br -\fIrange\fP\^: BOOL -.br -\fIchars\fP\^: LISTofCHAR2B -.LP - => -.IP -\fIextents\fP\^: LISTofXCHARINFO -.IP -Errors: -.PN Font , -.PN Range , -.PN Alloc -.IP -This request returns a list of glyph extents from the open -font associated with FONTID for the series of characters -specified by RANGE and CHARS. -.sp -If RANGE is True, each succeeding pair of elements in CHARS is -treated as a range of characters for which extents should be -returned. If CHARS contains an odd number of elements, the -font's XFONTINFO.CHAR-RANGE.MAX-CHAR is implicitly appended to -the list. If CHARS contains no elements, the list is -implicitly replaced with the font's XFONTINFO.CHAR-RANGE. If -any of the resulting character ranges are invalid, a Range -error is returned. Otherwise, the character ranges are -concatenated in the order given by CHARS to produce a set of -character codes for which extents are returned. -.sp -If RANGE is False, then CHARS specifies the set of character -codes for which extents are returned. If CHARS is of -zero length, then a zero-length list of extents is returned. -.sp -The extents for each character code in the resulting set (which -may contain duplicates) are returned in the order in -which the character codes appear in the set. -At least one metric for each character shall be non-zero -unless the character is not encoded in the font, in which case -all-zero metrics are returned. -A blank, zero-width character can be encoded -with non-zero but equal left and right bearings. -.sp -If FONTID is not associated with any open fonts, a -.PN Font -error is -returned. If RANGE is True and CHARS contains any invalid -ranges, a -.PN Range -error is returned. -.LP -.IN "QueryXBitmaps8" "" "@DEF@" -.PN QueryXBitmaps8 -.IP -\fIfontid\fP\^: FONTID -.br -\fIrange\fP\^: BOOL -.br -\fIchars\fP\^: STRING8 -.br -\fIformat\fP\^: BITMAPFORMAT -.LP - =>+ -.IP -\fIreplies-following-hint\fP\^: CARD32 -.br -\fIoffsets\fP\^: LISTofOFFSET32 -.br -\fIbitmaps\fP\^: LISTofBYTE -.IP -Errors: -.PN Font , -.PN Range , -.PN Format , -.PN Alloc -.IP -This request is equivalent to -.PN QueryXBitmaps16 -except that it -uses 1-byte character codes. -.LP -.IN "QueryXBitmaps16" "" "@DEF@" -.PN QueryXBitmaps16 -.IP -\fIfontid\fP\^: FONTID -.br -\fIrange\fP\^: BOOL -.br -\fIchars\fP\^: LISTofCHAR2B -.br -\fIformat\fP\^: BITMAPFORMAT -.LP - =>+ -.IP -\fIreplies-following-hint\fP\^: CARD32 -.br -\fIoffsets\fP\^: LISTofOFFSET32 -.br -\fIbitmaps\fP\^: LISTofBYTE -.IP -Errors: -.PN Font , -.PN Range , -.PN Format , -.PN Alloc -.IP -This request returns a list of glyph bitmaps from the open -font associated with FONTID for the series of characters -specified by RANGE and CHARS. -.sp -If RANGE is True, each succeeding pair of elements in CHARS is -treated as a range of characters for which bitmaps should be -returned. If CHARS contains an odd number of elements, the -font's XFONTINFO.CHAR-RANGE.MAX-CHAR is implicitly appended to -the list. If CHARS contains no elements, the list is -implicitly replaced with the font's XFONTINFO.CHAR-RANGE. If -any of the resulting character ranges are invalid, a Range -error is returned. Otherwise, the character ranges are -concatenated in the order given by CHARS to produce a set of -character codes for which bitmaps are returned. -.sp -If RANGE is False, then CHARS specifies the set of character -codes for which bitmaps are returned. If CHARS is of zero -length, then a single reply containing a zero-length list of -offsets and bitmaps is returned. -.sp -If any of the resulting character ranges are invalid, a Range -error is returned. Otherwise, the resulting character ranges -are concatenated in the order given by CHARS to produce a set -of character codes for which bitmaps are returned. -.sp -The server is free to return the glyph bitmaps in multiple -replies to reduce the amount of buffering that is necessary. -In this situation, the set of characters obtained above is -partitioned into an implementation-dependent number of -ordered, non-overlapping subsets containing runs of one or -more consecutive characters. The global ordering of -characters must be maintained such that concatenating the -subsets in order that they were produced yields the original -set. A reply is generated for each subset, in the order that -it was produced. -.sp -For each character in a subset, an image of that character's -glyph is described by a rectangle of bits corresponding to the -pixels specified by FORMAT.IMAGE-RECT. Within the image, set -and clear bits represent inked and non-inked pixels, -respectively. -.sp -Each scanline of a glyph image, from top to bottom, is zero-padded -on the right to a multiple of the number of bits specified by -FORMAT.SCANLINE-PAD. The scanline is then divided from left -to right into a sequence of FORMAT.SCANLINE-UNIT bits. The -bits of each unit are then arranged such that the left-most -pixel is stored in the most- or least-significant bit, -according to FORMAT.BIT-ORDER-MSB. The bytes of each unit are -then arranged such that the most- or least-significant byte, -according to FORMAT.BYTE-ORDER-MSB, is transmitted first. -Finally, the units are arranged such that the left-most is -transmitted first and the right-most is transmitted last. -.sp -The individual images within a subset are then concatenated in -a server-dependent order to form the BITMAPS data of the -reply. If a glyph image is duplicated within a reply, the -server is free to return fewer (but at least one) copies of -the image. If a character is not encoded within the font, a -zero-length bitmap is substituted for this character. Each -glyph image must begin at a bit position that is a multiple of -the FORMAT.SCANLINE-UNIT. -.sp -The OFFSETS array in a reply contains one entry for each -character in the subset being returned, in the order that the -characters appear in the subset. Each entry specifies the -starting location in bytes and size in bytes of the -corresponding glyph image in the BITMAPS data of that reply -(i.e. an offset may not refer to data in another reply). -.sp -The REPLIES-FOLLOWING-HINT field in all but the last reply -contains a positive value that specifies the number of replies -that are likely, but not required, to follow. In the last -reply, which may contain data for zero or more characters, -this field is set to zero. -.sp -If FONTID is not associated with any open fonts, a Font error -is returned. If RANGE is True and CHARS contains any invalid -ranges, a Range error is returned. If FORMAT is invalid, a -Format error is returned. -.LP -.IN "CloseFont" "" "@DEF@" -.PN CloseFont -.IP -\fIfontid\fP\^: FONTID -.IP -Errors: -.PN Font , -.PN Alloc -.IP -This request indicates that the specified FONTID should no -longer be associated with an open font. The server is free to -release any client-specific storage or licenses allocated for -the font. The client may reuse the value of FONTID in a -subsequent -.PN OpenBitmapFont -request. -.sp -If FONTID is not associated with any open fonts, a -.PN Font -error is returned. -.LP -.PN "close connection" -.IN "close connection" "" "@DEF@" -.IP -When a connection is closed, a -.PN CloseFont -is done on all fonts -that are open on the connection. In addition, the server is -free to release any storage or licenses allocated on behalf of -the client that made the connection. -.NH 2 -Errors -.XS -\*(SN Errors -.XE -.LP -All errors are at least 16 bytes long and contain the following fields: -.TA .75i -.ta .75i -.IP -\fItype\fP\^: CARD8 value of 1 -.br -\fIerror-code\fP\^: CARD8 -.br -\fIsequence-number\fP\^: CARD16 -.br -\fIlength\fP\^: CARD32 -.br -\fItimestamp\fP\^: TIMESTAMP -.br -\fImajor-opcode\fP\^: CARD8 -.br -\fIminor-opcode\fP\^: CARD8 -.br -\fIdata-or-unused\fP\^: CARD16 -.LP -The TYPE field has a value of one. The ERROR-CODE field specifies which error -occurred. Core errors codes are in the range 0 through 127, extension error -codes are in the range 128 through 255. The SEQUENCE-NUMBER field contains the -least significant 16 bits of the sequence number of the request that caused the -error. The LENGTH field specifies the length of the error packet in 4-byte -units and must have a value of at least 4. The TIMESTAMP specifies the server -time when the error occurred. The MAJOR-OPCODE and MINOR-OPCODE (zero for core -requests) fields specify the type of request that generated the error. The -DATA-OR-UNUSED field may be used for 16 bits of error-specific information. If -LENGTH is greater than four, these fields are followed by (LENGTH - 4) * 4 -bytes of extra data. -.LP -The following errors are defined for the core protocol: -.LP -.IN "Error Codes" "Request" "@DEF@" -.PN Request -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 unused -.IP -This error is generated by any request that has an unknown -combination of major and minor request numbers, or by any -extension request that is issued before a -.PN QueryExtension -of that extension. -.LP -.IN "Error Codes" "Format" "@DEF@" -.PN Format -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 unused -.br -\fIformat\fP\^: BITMAPFORMAT bad format value -.IP -This error is generated by the use of an invalid BITMAPFORMAT -in the -.PN OpenBitmapFont , -.PN QueryXBitmaps8 , -and -.PN QueryXBitmaps16 -requests. -The value that caused the error is included as extra data. -.LP -.IN "Error Codes" "Font" "@DEF@" -.PN Font -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 unused -.br -\fIfontid\fP\^: FONTID bad font identifier -.IP -This error is generated by an invalid FONTID in the -.PN QueryXInfo , -.PN QueryXExtents8 , -.PN QueryXExtents16 , -.PN QueryXBitmaps8 , -.PN QueryXBitmaps16 , -and -.PN CloseFont -requests. The value that caused -the error is included as extra data. -.LP -.IN "Error Codes" "Range" "@DEF@" -.PN Range -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 unused -.br -\fIrange\fP\^: RANGE bad range -.IP -This error is generated by an invalid RANGE in the -.PN QueryXExtents8 , -.PN QueryXExtents16 , -.PN QueryXBitmaps8 , and -.PN QueryXBitmaps16 -requests. The -value that caused the error is included as extra data. -.LP -.IN "Error Codes" "EventMask" "@DEF@" -.PN EventMask -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 unused -.br -\fIevent-mask\fP\^: EVENTMASK bad event mask -.IP -This error is generated by an invalid EVENTMASK in the -.PN SetEventMask -request. The value that caused the error is -included as extra data. -.LP -.IN "Error Codes" "AccessContext" "@DEF@" -.PN AccessContext -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 unused -.br -\fIac\fP\^: ACCESSCONTEXT unaccepted -.PN AccessContext -.IP -This error is generated by an invalid ACCESSCONTEXT in the -.PN FreeAC -or -.PN SetAuthorization -request or by an -.PN OpenBitmapFont -request performed without sufficient authorization. In the -first two cases, the ACCESSCONTEXT of the errant request is -returned as extra data. In the third case, the current -ACCESSCONTEXT is returned as extra data. -.LP -.IN "Error Codes" "IDChoice" "@DEF@" -.PN IDChoice -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 unused -.br -\fIid\fP\^: ID bad identifier -.IP -This error is generated by an invalid or already associated -ACCESSCONTEXT identifier in a -.PN CreateAC -request or FONTID identifier -in an -.PN OpenBitmapFont -request. The value that caused the error -is included as extra data. -.LP -.IN "Error Codes" "Name" "@DEF@" -.PN Name -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 unused -.IP -This error is generated by a font name pattern that matches -no fonts in an -.PN OpenBitmapFont -request or no catalogue names in a -.PN SetCatalogues -request. -.LP -.IN "Error Codes" "Resolution" "@DEF@" -.PN Resolution -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 X value of errant resolution -.br -\fIy-resolution\fP\^: CARD16 Y value of errant resolution -.br -\fIpoint-size\fP\^: CARD16 point size of errant resolution -.IP -This error is generated in response to an invalid RESOLUTION -structure in a -.PN SetResolution -request. The value that caused the -error is included in the DATA-OR-UNUSED field and as extra data. -.LP -.IN "Error Codes" "Alloc" "@DEF@" -.PN Alloc -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 unused -.IP -This error is generated by any request for which the server -lacks sufficient resources (especially memory). -.LP -.IN "Error Codes" "Length" "@DEF@" -.PN Length -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 unused -.br -\fIlength\fP\^: CARD32 bad length value -.IP -This error is generated by any request that has a length field -greater than (MAXIMUM-REQUEST-LENGTH * 4) bytes. The value that -caused the error is included as extra data. -.LP -.IN "Error Codes" "Implementation" "@DEF@" -.PN Implementation -.IP -.TA .75i .75i .75i .75i -\fIdata-or-unused\fP\^: CARD16 unused -.IP -This error may be generated in response to any request that -the server is unable to process because it is deficient. Use -of this error is highly discouraged and indicates lack of -conformance to the protocol. -.sp -Additional errors may be defined by extensions. -.NH 2 -Events -.XS -\*(SN Events -.XE -.LP -Events may be generated in response to requests or at the server's discretion -after the initial connection setup information has been exchanged. Each event -is at least 12 bytes long and contains the following fields: -.IP -.TA .75i .75i .75i .75i -\fItype\fP\^: CARD8 value of 2 -.br -\fIevent-code\fP\^: CARD8 -.br -\fIsequence-number\fP\^: CARD16 -.br -\fIlength\fP\^: CARD32 -.br -\fItimestamp\fP\^: TIMESTAMP -.LP -The TYPE field contains the value 2. The EVENT-CODE field specifies the number -of the event and is in the range 0-127 for core events or the range 128-255 for -extensions. The SEQUENCE-NUMBER field specifies the least significant 16 bits -of the sequence number of the last request to have been processed by the -server. The LENGTH field specifies the number of 4-byte units in this event -packet and must always have a value of at least 3. The TIMESTAMP field -specifies the server time when the event occurred. If LENGTH is greater than -three, these fields are followed by (LENGTH - 3) * 4 bytes of additional data. -.LP -Events are described using the following syntax: -.LP -.RS -.DS -.TA .75i -.ta .75i -.PN EventName - \fIarg1\fP\^: type1 - ... - \fIargN\fP\^: typeN - - Description -.DE -.RE -If an event does not provide any extra arguments, the \fIarg1\fP...\fIargN\fP -lines are omitted from the description. -.LP -The core X Font Service protocol defines the following events: -.LP -.IN "KeepAlive" "" "@DEF@" -.PN KeepAlive -.IP -This unsolicited, nonmaskable event may be sent by the -server to verify that the connection has not been broken -(for transports that do not provide this information). -Clients should acknowledge receipt of this request -by sending any request (such as -.PN NoOp ")." -.LP -.IN "CatalogueListNotify" "" "@DEF@" -.PN CatalogueListNotify -.IP -\fIadded\fP\^: BOOL -.br -\fIdeleted\fP\^: BOOL -.IP -This event is sent to clients that have included -.PN CatalogueListChangeMask -in their core event mask -whenever the list of catalogues that are available has -changed. The ADDED field is True if new catalogues have -been added to the server, otherwise it is False. The -DELETED field is True if any existing catalogues have -been removed from the server, otherwise it is False. -.LP -.IN "FontListNotify" "" "@DEF@" -.PN FontListNotify -.IP -\fIadded\fP\^: BOOL -.br -\fIdeleted\fP\^: BOOL -.IP -This event is sent to clients that have included -.PN FontListChangeMask -in their event mask whenever the -list of fonts that are provided by the currently selected -catalogues has changed. The ADDED field is True if new -fonts have been added to any of the catalogues currently -used by the client, otherwise it is False. The DELETED -field is True if any existing fonts have been removed -from any of catalogues used by the client, otherwise it -is False. -.sp -Additional events may be defined by extensions. -.NH 1 -Protocol Encoding -.XS -\*(SN Protocol Encoding -.XE -.LP -Numbers that are prefixed with ``#x'' are in hexadecimal (base 16). All other -numbers are in decimal. Requests, replies, errors, events, and compound types -are described using the syntax: -.RS -.DS -.TA .75i .75i .75i .75i - - Name - \fIcount\fP \fIcontents\fP \fIname\fP - ... - \fIcount\fP \fIcontents\fP \fIname\fP -.DE -.RE -where COUNT is the number of bytes in the data stream occupied by this -field, CONTENTS is the name of the type as given in Section 4 or the value if -this field contains a constant, and NAME is a description of this field. -.LP -Objects containing counted lists use a lowercase single-letter variable (whose -scope is limited to the request, reply, event, or error in which it is found) -to represent the number of objects in the list. These variables, and any -expressions in which they are used, should be treated as unsigned integers. -Multiple copies of an object are indicated by CONTENTS prefix ``LISTof''. -.LP -Unused bytes (whose value is undefined) will have a blank CONTENTS field and a -NAME field of ``unused''. Zeroed bytes (whose value must be zero) will have a -blank CONTENTS field and a NAME field of ``zero''. The expression pad(e) -refers to the number of bytes needed to round a value ``e'' up to the closed -multiple of four: -.RS -.DS - - pad(e) = (4 - (e mod 4)) mod 4 -.DE -.RE -.NH 2 -Data Types -.XS -\*(SN Data Types -.XE -.sp 6p -.LP -ACCESSCONTEXT -.sp 6p -.TA .75i .75i .75i .75i -4 CARD32 access context with at least one of the following bits set: -.sp 6p -#x1fffffff -.sp 6p -but none of the following bits set: -.sp 6p -#xe0000000 zero -.sp 18p -.LP -.TS -tab (@) ; -l s s -l l l. -ALTERNATESERVER -.sp 6p -1@BOOL@subset -1@n@length of name -n@STRING8@name -p@@unused, p=pad(n+2) -.TE -.sp 6p -.TS -tab (@) ; -l s s -l l l. -AUTH -.sp 6p -2@n@length of name -2@d@length of data -n@STRING8@name -p@@unused, p=pad(n) -d@STRING8@data -q@@unused, q=pad(d) -.TE -.sp 12p -.LP -BITMAPFORMAT -.TA .75i .75i .75i .75i -.sp 6p -4 CARD32 value, union of the following bits: -.TS -tab (@) ; -n l. -#x00000001@ByteOrderMSB -#x00000002@BitOrderMSB -#x00000000@ImageRectMin -#x00000004@ImageRectMaxWidth -#x00000008@ImageRectMax -#x00000000@ScanlinePad8 -#x00000100@ScanlinePad16 -#x00000200@ScanlinePad32 -#x00000300@ScanlinePad64 -#x00000000@ScanlineUnit8 -#x00001000@ScanlineUnit16 -#x00002000@ScanlineUnit32 -#x00003000@ScanlineUnit64 -.T& -l s -n l. -.sp 6p -except for the following bits which must be zero: -.sp 6p -#xffffccf0@zero -.T& -l s -n l. -.sp 6p -and the following of which at most one bit may be set: -.sp 6p -#x0000000c@at most one bit can be set -.TE -.sp 12p -.LP -BITMAPFORMATMASK -.sp 6p -.TA .75i .75i .75i .75i -4 CARD32 value, mask of the following bits: -.TS -tab (@) ; -n l. -#x00000001@ByteOrderMask -#x00000002@BitOrderMask -#x00000004@ImageRectMask -#x00000008@ScanlinePadMask -#x00000010@ScanlineUnitMask -.T& -l s -n l. -.sp 6p -except for the following bits which must be zero: -.sp 6p -#xffffffe0@zero -.TE -.sp 12p -.KS -.LP -BOOL -.sp 6p -.TA .75i .75i .75i .75i -1 BOOL boolean, one of the following values: -.sp 6p - 0 False -.br - 1 True -.sp 6p -.KE -.sp 18p -.LP -BYTE -.sp 6p -.TA .75i .75i .75i .75i -1 BYTE unsigned byte of data -.sp 18p -.LP -CARD8 -.sp 6p -.TA .75i .75i .75i .75i -1 CARD8 8-bit unsigned integer -.sp 18p -.LP -CARD16 -.sp 6p -.TA .75i .75i .75i .75i -2 CARD16 16-bit unsigned integer -.sp 18p -.LP -CARD32 -.sp 6p -.TA .75i .75i .75i .75i -4 CARD32 32-bit unsigned integer -.sp 18p -.LP -CHAR2B -.sp 6p -.TA .75i .75i .75i .75i -1 CARD8 byte1 -.br -1 CARD8 byte2 -.sp 18p -.LP -EVENTMASK -.sp 6p -.TA .75i .75i .75i .75i -4 CARD32 event mask -.br -.TS -tab (@) ; -l s -n l. -for core events, this is union of the following bits: -.sp 6p -#00000001@CatalogueListChangeMask -#00000002@FontListChangeMask -.T& -l s -n l. -.sp 6p -but none of the following bits set: -.sp 6p -#fffffffc@ -.TE -extensions define their own sets of bits -.sp 18p -.LP -FONTID -.sp 6p -.TA .75i .75i .75i .75i -4 CARD32 font identifier with at least one of -.br - the following bits set: -.TS -tab (@) ; -n l. -#x1fffffff -.sp 6p -.T& -l s -n l. -but none of the following bits set: -.sp 6p -#xe0000000@zero -.TE -.sp 18p -.LP -INT8 -.br -.TA .75i .75i .75i .75i -1 INT8 8-bit signed integer -.sp 18p -.LP -INT16 -.br -.TA .75i .75i .75i .75i -2 INT16 16-bit signed integer -.sp 18p -.LP -INT32 -.br -.TA .75i .75i .75i .75i -4 INT32 32-bit signed integer -.sp 18p -.LP -OFFSET32 -.br -.TA .75i .75i .75i .75i -4 CARD32 position (or integer value) -.br -4 CARD32 length -.sp 18p -.LP -PROPINFO -.br -.TA .75i .75i .75i .75i -4 n number of PROPOFFSET components -.br -4 m number of bytes of property data -.br -20*n PROPOFFSET property offsets into data block -.br -m LISTofBYTE property data block -.sp 18p -.LP -PROPOFFSET -.br -.TA .75i .75i .75i .75i -8 OFFSET32 name in data block -.br -8 OFFSET32 value in data block -.br -1 CARD8 type, one of the following values: -.sp 6p - 0 String -.br - 1 Unsigned -.br - 2 Signed -.br -3 zero -.sp 18p -.LP -RANGE -.sp 6p -.TA .75i .75i .75i .75i -2 CHAR2B minimum character code -.br -2 CHAR2B maximum character code -.sp 18p -.LP -RESOLUTION -.sp 6p -.TA .75i .75i .75i .75i -2 CARD16 x resolution in pixels per inch -.br -2 CARD16 y resolution in pixels per inch -.br -2 CARD16 point size in decipoints -.sp 18p -.LP -STRNAME -.sp 6p -.TA .75i .75i .75i .75i -1 n length of name -.br -n STRING8 name -.sp 18p -.LP -STRING8 -.sp 6p -.TA .75i .75i .75i .75i -n LISTofBYTE array of 8-bit character values -.sp 18p -.LP -TIMESTAMP -.sp 6p -.TA .75i .75i .75i .75i -4 CARD32 milliseconds since server time origin -.sp 18p -.LP -XCHARINFO -.sp 6p -.TA .75i .75i .75i .75i -2 INT16 left bearing -.br -2 INT16 right bearing -.br -2 INT16 width -.br -2 INT16 ascent -.br -2 INT16 descent -.br -2 CARD16 attributes -.sp 18p -.LP -XFONTINFO -.sp 6p -.TA .75i .75i .75i .75i -4 CARD32 flags, union of the following bits: -.TS -n l. -#x00000001 AllCharactersExist -#x00000002 InkInside -#x00000004 HorizontalOverlap -.T& -l s -n l. -.sp 6p -but none of the following bits set: -.sp 6p -#xfffffff8 zero -.TE -.TA .75i .75i .75i .75i -4 RANGE range of characters in font -.br -1 CARD8 drawing direction -.sp 6p - 0 LeftToRight -.br - 1 RightToLeft -.sp 6p -1 unused -.br -2 CHAR2B default character -.br -12 XCHARINFO minimum bounds -.br -12 XCHARINFO maximum bounds -.br -2 INT16 font ascent -.br -2 INT16 font descent -.br -n PROPINFO property data -.NH 2 -Requests -.XS -\*(SN Requests -.XE -.LP -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -open connection -.sp 6p -1@BYTE@byte order, one of the values: -@#x42@Most Significant Byte first -@#x6c@Least Significant Byte first -1@CARD8@number of auth in auth-data -2@2@client-major-protocol-version -2@0@client-minor-protocol-version -2@a/4@length of auth-data -a@LISTofAUTH@auth-data -=>@@ -2@CARD16@status -@0@Success -@1@Continue -@2@Busy -@3@Denied -2@2@major version -2@0@minor version -1@CARD8@number of alternate-servers-hint -1@CARD8@authorization-index -2@a/4@length of alternate-servers-hint -2@(d+q)/4@length of authorization-data -a@LISTofALTERNATESERVER@alternate-servers-hint -d@LISTofBYTE@authorization-data -q@@unused, q=pad(d) -.TE -.LP -If STATUS is Busy or Denied, the protocol stops and -the connection is closed. If STATUS is Continue, the -client is expected to respond with additional data, to -which the server responds with a new status value and -more data. This dialog continues until the status is -set to Success, or until the server sets STATUS to Busy -or Denied and closes the connection: -.LP -.TS -tab (@) ; -lw(.25i) lw(2i) l. --> -4@1+(d+q)/4@length -d@LISTofBYTE@more-authorization-data -q@@unused, q=pad(d) -=> -4@2+(d+q)/4@length -2@CARD16@status -@0@Success -@1@Continue -@2@Busy -@3@Denied -2@@unused -d@LISTofBYTE@more-authorization-data -q@@unused, q=pad(d) -.TE -.LP -When STATUS is Success, the protocol resumes with the -following sent by the server: -.LP -.TS -tab (@) ; -lw(.25i) lw(2i) l. -4@3+(v+w)/4@length of rest of data -2@CARD16@maximum-request-length -2@v@length of vendor string -4@CARD32@release-number -v@STRING8@vendor-string -w@@unused, w=pad(v) -.TE -.LP -Once the connection has been established, the client may send the -following requests: -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -NoOp -.sp 6p -1@0@major-opcode -1@@unused -2@1@length -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -ListExtensions -1@1@major-opcode -1@@unused -2@1@length -=> -1@0@type reply -1@CARD8@number of names -2@CARD16@sequence-number -4@2+(n+p)/4@length -n@LISTofSTRNAME@names -p@@unused, p=pad(n) -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -QueryExtension -.sp 6p -1@2@major-opcode -1@n@length of name -2@1+(n+p)/4@length -n@STRING8@name -p@@unused, p=pad(n) -=> -1@0@type reply -1@BOOL@present -2@CARD16@sequence-number -4@5@length -2@CARD16@major-version -2@CARD16@minor-version -1@CARD8@major-opcode -1@CARD8@first-event -1@CARD8@number-events -1@CARD8@first-error -1@CARD8@number-errors -3@@unused -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -ListCatalogues -1@3@major-opcode -1@@unused -2@3+(n+p)/4@length -4@CARD32@max-names -2@n@length of pattern -2@@unused -n@STRING8@pattern -p@@unused, p=pad(n) -=>+ -1@0@type reply -1@@unused -2@CARD16@sequence-number -4@4+(n+p)/4@length -4@CARD32@replies-following-hint -4@CARD32@number of catalogue-names -n@LISTofSTRNAME@catalogue-names -p@@unused, p=pad(n) -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -SetCatalogues -1@4@major-opcode -1@CARD8@number of catalogue-names -2@1+(n+p)/4@length -n@LISTofSTRNAME@catalogue-names -p@@unused, p=pad(n) -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -GetCatalogues -.sp 6p -1@5@major-opcode -1@@unused -2@1@length -=> -1@0@type reply -1@CARD8@number of catalogue-names -2@CARD16@sequence-number -4@2+(n+p)/4@length -n@LISTofSTRNAME@catalogue-names -p@@unused, p=pad(n) -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -SetEventMask -.sp 6p -1@6@major-opcode -1@CARD8@extension-opcode -2@2@length -4@EVENTMASK@event-mask -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -GetEventMask -.sp 6p -1@7@major-opcode -1@CARD8@extension-opcode -2@1@length -=> -1@0@type reply -1@@unused -2@CARD16@sequence-number -4@3@length -4@EVENTMASK@event-mask -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -CreateAC -.sp 6p -1@8@major-opcode -1@CARD8@number of authorization-protocols -2@2+a/4@length -4@ACCESSCONTEXT@ac -a@LISTofAUTH@authorization-protocols -=> -1@0@type reply -1@CARD8@authorization-index -2@CARD16@sequence-number -4@3+(d+q)/4@length -2@CARD16@status -@0@Success -@1@Continue -@2@Busy -@3@Denied -2@@unused -d@LISTofBYTE@authorization-data -q@@unused, q=pad(d) -.TE -.LP -If STATUS is Continue, the client is expected to respond -with additional data, to which the server responds with -a new status value and more data. This dialog continues -until the status is set to Success, Busy, or Denied at -which point the request is finished. -.LP -.TS -tab (@) ; -lw(.25i) lw(2i) l. --> -4@1+(d+q)/4@length -d@LISTofBYTE@more-authorization-data -q@@unused, q=pad(d) -=> -4@2+(d+q)/4@length -2@CARD16@status -@0@Success -@1@Continue -@2@Busy -@3@Denied -2@@unused -d@LISTofBYTE@authorization-data -q@@unused, q=pad(d) -.TE -.sp 12p -.ne 3 -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -FreeAC -.sp 6p -1@9@major-opcode -1@@unused -2@2@length -4@ACCESSCONTEXT@ac -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -SetAuthorization -.sp 6p -1@10@major-opcode -1@@unused -2@2@length -4@ACCESSCONTEXT@ac -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -SetResolution -.sp 6p -1@11@major-opcode -1@n@number of resolutions -2@1+(6*n+p)/4@length -6*n@LISTofRESOLUTION@resolutions -p@p=pad(6*n) -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -GetResolution -.sp 6p -1@12@major-opcode -1@@unused -2@1@length -=> -1@0@type reply -1@n@number of resolutions -2@CARD16@sequence-number -4@2+(6*n+p)/4@length -6*n@LISTofRESOLUTION@resolutions -p@@p=pad(6*n) -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -ListFonts -.sp 6p -1@13@major-opcode -1@@unused -2@3+(n+p)/4@length -4@CARD32@max-names -2@n@length of pattern -2@@unused -n@STRING8@pattern -p@@unused, p=pad(n) -=>+ -1@0@type reply -1@@unused -2@CARD16@sequence-number -4@4+(n+p)/4@length -4@CARD32@replies-following-hint -4@CARD32@number of font-names -n@LISTofSTRNAME@font-names -p@@unused, p=pad(n) -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -ListFontsWithXInfo -.sp 6p -1@14@major-opcode -1@@unused -2@3+(n+p)/4@length -4@CARD32@max-names -2@n@length of pattern -2@@unused -n@STRING8@pattern -p@@unused, p=pad(n) -.T& -l s s -lw(.25i) lw(2i) l. -=>+(except for last in series) -1@0@type reply -1@n@length of name -2@CARD16@sequence-number -4@3+(n+p+f)/4@length -4@CARD32@replies-hint -f@XFONTINFO@font info -n@STRING8@name -p@@unused, p=pad(n) -@@@ -.T& -l s s -lw(.25i) lw(2i) l. -=>(last in series) -1@0@type reply -1@0@last-reply indicator -2@CARD16@sequence-number -4@2@reply length -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -OpenBitmapFont -.sp 6p -1@15@major-opcode -1@@unused -2@4+(n+p)/4@length -4@FONTID@fontid -4@BITMAPFORMATMASK@format-mask -4@BITMAPFORMAT@format -n@STRNAME@pattern -p@@unused, p=pad(n) -=> -1@0@type reply -1@BOOL@otherid-valid -2@CARD16@sequence-number -4@4@length -4@FONTID@otherid -1@BOOL@cachable -3@@unused -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -QueryXInfo -.sp 6p -1@16@major-opcode -1@@unused -2@2@length -4@FONTID@fontid -=> -1@0@type reply -1@@unused -2@CARD16@sequence-number -4@2+f/4@length -f@XFONTINFO@font info -p@@unused, p=pad(f\^) -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -QueryXExtents8 -.sp 6p -1@17@major-opcode -1@BOOL@range -2@3+(n+p)/4@length -4@FONTID@fontid -4@n@number chars entries -n@STRING8@chars -p@@unused, p=pad(n) -=> -1@0@type reply -1@@unused -2@CARD16@sequence-number -4@3+3*n@length -4@n@number of extents -12*n@LISTofXCHARINFO@extents -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -QueryXExtents16 -.sp 6p -1@18@major-opcode -1@BOOL@range -2@3+(2*n+p)/4@length -4@FONTID@fontid -4@n@number chars entries -2*n@LISTofCHAR2B@chars -p@@unused, p=pad(2*n) -=> -1@0@type reply -1@@unused -2@CARD16@sequence-number -4@3+3*n@length -4@n@number of extents -12*n@LISTofXCHARINFO@extents -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -QueryXBitmaps8 -.sp 6p -1@19@major-opcode -1@BOOL@range -2@4+(n+p)/4@length -4@FONTID@fontid -4@BITMAPFORMAT@format -4@n@number of chars entries -n@STRING8@chars -p@@unused, p=pad(n) -=>+ -1@0@type reply -1@@unused -2@CARD16@sequence-number -4@5+2*n+(m+p)/4@length -4@CARD32@replies-following-hint -4@n@number of offsets -4@m@number of bytes of glyph images -8*n@LISTofOFFSET32@offsets -m@LISTofBYTE@glyph images -p@@unused, p=pad(m) -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -QueryXBitmaps16 -.sp 6p -1@20@major-opcode -1@BOOL@range -2@4+(2*n+p)/4@length -4@FONTID@fontid -4@BITMAPFORMAT@format -4@n@number of chars entries -2*n@LISTofCHAR2B@chars -p@@unused, p=pad(2*n) -=> -1@0@type reply -1@@unused -2@CARD16@sequence-number -4@5+2*n+(m+p)/4@length -4@CARD32@replies-following-hint -4@n@number of offsets -4@m@number of bytes of glyph images -8*n@LISTofOFFSET32@offsets -m@LISTofBYTE@glyph images -p@@unused, p=pad(m) -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -lw(.25i) lw(2i) l. -CloseFont -.sp 6p -1@21@major-opcode -1@@unused -2@2@length -4@FONTID@fontid -.TE -.NH 2 -Errors -.XS -\*(SN Errors -.XE -.LP -.TS -tab (@) ; -lfB s s -n lw(2i) l. -Request -.sp 6p -1@1@type error -1@0@Request -2@CARD16@sequence-number -4@4@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -2@@unused -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -Format -.sp 6p -1@1@type error -1@1@Format -2@CARD16@sequence-number -4@5@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -2@@unused -4@BITMAPFORMAT@bad-format -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -Font -.sp 6p -1@1@type error -1@2@Font -2@CARD16@sequence-number -4@5@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -2@@unused -4@FONTID@bad-fontid -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -Range -.sp 6p -1@1@type error -1@3@Range -2@CARD16@sequence-number -4@5@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -2@@unused -4@RANGE@bad-range -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -EventMask -.sp 6p -1@1@type error -1@4@EventMask -2@CARD16@sequence-number -4@5@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -2@@unused -4@EVENTMASK@event-mask -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -AccessContext -.sp 6p -1@1@type error -1@5@AccessContext -2@CARD16@sequence-number -4@5@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -2@@unused -4@ACCESSCONTEXT@access context -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -IDChoice -.sp 6p -1@1@type error -1@6@IDChoice -2@CARD16@sequence-number -4@5@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -2@@unused -4@FONTID@bad-fontid -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -Name -.sp 6p -1@1@type error -1@7@Name -2@CARD16@sequence-number -4@4@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -2@@unused -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -Resolution -.sp 6p -1@1@type error -1@8@Resolution -2@CARD16@sequence-number -4@5@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -6@RESOLUTION@resolution -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -Alloc -.sp 6p -1@1@type error -1@9@Alloc -2@CARD16@sequence-number -4@4@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -2@@unused -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -Length -.sp 6p -1@1@type error -1@10@Length -2@CARD16@sequence-number -4@5@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -2@@unused -4@CARD32@bad-length -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -Implementation -.sp 6p -1@1@type error -1@11@Implementation -2@CARD16@sequence-number -4@4@length -4@TIMESTAMP@timestamp -1@CARD8@major-opcode -1@CARD8@minor-opcode -2@@unused -.TE -.NH 2 -Events -.XS -\*(SN Events -.XE -.LP -.TS -tab (@) ; -lfB s s -n lw(2i) l. -KeepAlive -.sp 6p -1@2@type event -1@0@event KeepAlive -2@CARD16@sequence-number -4@3@length -4@TIMESTAMP@timestamp -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -CatalogueListNotify -.sp 6p -1@2@type event -1@1@event CatalogueListNotify -2@CARD16@sequence-number -4@4@length -4@TIMESTAMP@timestamp -1@BOOL@added -1@BOOL@deleted -2@@unused -.TE -.sp 12p -.TS -tab (@) ; -lfB s s -n lw(2i) l. -FontListNotify -.sp 6p -1@2@type event -1@2@event FontListNotify -2@CARD16@sequence-number -4@4@length -4@TIMESTAMP@timestamp -1@BOOL@added -1@BOOL@deleted -2@@unused -.TE -.NH 1 -Acknowledgements -.XS -\*(SN Acknowledgements -.XE -.LP -This document represents the culmination of several years of debate and -experiments done under the auspices of the MIT X Consortium font working group. -Although this was a group effort, the author remains responsible for any errors -or omissions. The protocol presented here was primarily designed by Jim -Fulton, Keith Packard, and Bob Scheifler. Special thanks goes to Ned -Batchelder, Jim Flowers, and Axel Deininger for their invigorating comments -which never failed to make this a better document. -Stephen Gildea edited version 2 of this document. -Finally, David Lemke -deserves great credit for designing and coding the sample implementation. -.NH 1 -References -.XS -\*(SN References -.XE -.LP -All of the following documents are X Consortium standards available from -the X Consortium. -.LP -[1] Scheifler, Robert W. ``X Window System Protocol Version 11'' -.LP -[2] Adobe Systems. ``Bitmap Distribution Format 2.1'' -.LP -[3] X Consortium. ``X Logical Font Description Conventions, Version 1.5'' -.bp -.XS -Appendix A \- Suggested Licensing Policies -.XE -.ce 10 -.sp 5 -\s+2\fBAppendix A\fP\s-2 -.sp -\s+1\fBSuggested Licensing Policies\fP\s-1 -.ce 0 -.sp -.LP -The authorization data passed by the client in the initial connection -setup information may be used by the font server to implement restrictions -on which fonts may be accessed. Furthermore, the font server is free to -refuse new connections at any time. -.LP -Configuration or management of the license restrictions is outside the scope of -the font service protocol and is done in a server-dependent manner. Possible -policies might include, but are not limited to, combinations of the following: -.IP "a." -No restrictions - anyone may access any fonts. The server neither -refuses any connections nor generates AccessContext errors on any -fonts. For environments without specially-licensed fonts, this is -sufficient. -.IP "b." -Per-machine - only those clients connecting from a known set of -machines are permitted access. The server could get the address -of the connection and look in a list of allowed machines. -.IP "c." -Per-user - only a known set of users may access the fonts. The -server can use the authorization data (such as a Kerberos ticket -or a Secure RPC credential) to verify the identity of the user -and then look in a list of allowed users. -.IP "d." -Simultaneous Use - only a certain number of clients may use a given -font at any one time. Additional clients would receive AccessContext -errors if they attempt to open the font. This is only effective if -the initial clients keep the font open for the entire time that it -is being used (even if all of the data has been transmitted and is -being cached). -.IP "e." -Postage Meter - a particular font may only be accessed a limited -number of times before its license must be renewed. Each time -the font is opened, the server decrements a counter. When the -counter reaches zero, all further attempts to open the font -return an AccessContext error. -.LP -It should be noted that chaining of font servers (obtaining font data from -other font servers) may conflict with certain license policies. -.bp -.XS -Appendix B \- Implementation Suggestions -.XE -.sp 5 -.ce 10 -\s+2\fBAppendix B\fP\s-2 -.sp -\s+1\fBImplementation Suggestions\s-1\fP -.ce 0 -.sp -.LP -Font server implementations will probably wish to use techniques such as the -following to avoid limits on the number of simultaneous connections: -.IP "a." -The initial connection information returned by the font -server contains the names of other font servers that -may be used as substitutes. A font server may refuse to -accept a connection, indicating that the client should -try one of the alternatives instead. -.IP "b." -On operating systems that support processing forking, font -servers might choose to fork so that the child can continue -processing the existing connections and the parent can accept -new connections. Such implementations are encouraged to use -shared memory so that in-memory font databases can be shared. -.IP "c." -On operating systems that support passing stream file descriptors -between processes, cooperating font servers could collect -connections in a single process when there are few connections -and spread them among several processes as the load increases. -.IP "d." -If a font client is unable to connect to a server (as opposed -to having the connection terminated), it should retry for an -implementation-dependent length of time (see Xlib's -handling of ECONNREFUSED in XConnDis.c). -.\" -.\" print Table of Contents page -.if o .bp \" blank page to make count even -.bp 1 -.af PN i -.PX |