fservestr.h revision 23a0898a
123a0898aSmrg/* $Xorg: fservestr.h,v 1.3 2000/08/17 19:46:36 cpqbld Exp $ */
223a0898aSmrg/*
323a0898aSmrg * Copyright 1990 Network Computing Devices
423a0898aSmrg *
523a0898aSmrg * Permission to use, copy, modify, distribute, and sell this software and
623a0898aSmrg * its documentation for any purpose is hereby granted without fee, provided
723a0898aSmrg * that the above copyright notice appear in all copies and that both that
823a0898aSmrg * copyright notice and this permission notice appear in supporting
923a0898aSmrg * documentation, and that the name of Network Computing Devices not be
1023a0898aSmrg * used in advertising or publicity pertaining to distribution of the
1123a0898aSmrg * software without specific, written prior permission.  Network Computing
1223a0898aSmrg * Devices makes no representations about the suitability of this software
1323a0898aSmrg * for any purpose.  It is provided "as is" without express or implied
1423a0898aSmrg * warranty.
1523a0898aSmrg *
1623a0898aSmrg * NETWORK COMPUTING DEVICES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
1723a0898aSmrg * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
1823a0898aSmrg * IN NO EVENT SHALL NETWORK COMPUTING DEVICES BE LIABLE FOR ANY SPECIAL,
1923a0898aSmrg * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
2023a0898aSmrg * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
2123a0898aSmrg * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
2223a0898aSmrg * OR PERFORMANCE OF THIS SOFTWARE.
2323a0898aSmrg *
2423a0898aSmrg * Author:  	Dave Lemke, Network Computing Devices, Inc
2523a0898aSmrg */
2623a0898aSmrg/* $XFree86: xc/lib/font/fc/fservestr.h,v 3.3 2001/01/17 19:43:29 dawes Exp $ */
2723a0898aSmrg
2823a0898aSmrg#ifndef _FSERVESTR_H_
2923a0898aSmrg#define _FSERVESTR_H_
3023a0898aSmrg
3123a0898aSmrg#include	"fserve.h"
3223a0898aSmrg#include	"fsio.h"
3323a0898aSmrg
3423a0898aSmrg/*
3523a0898aSmrg * font server data structures
3623a0898aSmrg */
3723a0898aSmrg/*
3823a0898aSmrg * font server private storage
3923a0898aSmrg */
4023a0898aSmrg
4123a0898aSmrgtypedef struct _fs_glyph {
4223a0898aSmrg    struct _fs_glyph	*next;
4323a0898aSmrg} FSGlyphRec, *FSGlyphPtr;
4423a0898aSmrg
4523a0898aSmrgtypedef struct _fs_font {
4623a0898aSmrg    CharInfoPtr pDefault;
4723a0898aSmrg    CharInfoPtr encoding;
4823a0898aSmrg    CharInfoPtr inkMetrics;
4923a0898aSmrg    FSGlyphPtr	glyphs;
5023a0898aSmrg}           FSFontRec, *FSFontPtr;
5123a0898aSmrg
5223a0898aSmrg/* FS special data for the font */
5323a0898aSmrgtypedef struct _fs_font_data {
5423a0898aSmrg    long        fontid;
5523a0898aSmrg    int		generation;	/* FS generation when opened */
5623a0898aSmrg    unsigned long glyphs_to_get;	/* # glyphs remaining to be gotten */
5723a0898aSmrg
5823a0898aSmrg    /* Following data needed in case font needs to be reopened. */
5923a0898aSmrg    int		namelen;
6023a0898aSmrg    char       *name;
6123a0898aSmrg    fsBitmapFormat	format;
6223a0898aSmrg    fsBitmapFormatMask	fmask;
6323a0898aSmrg}           FSFontDataRec;
6423a0898aSmrg
6523a0898aSmrgtypedef struct fs_clients_depending {
6623a0898aSmrg    pointer	client;
6723a0898aSmrg    struct fs_clients_depending *next;
6823a0898aSmrg}	FSClientsDependingRec, *FSClientsDependingPtr;
6923a0898aSmrg
7023a0898aSmrg/* OpenFont specific data for blocked request */
7123a0898aSmrgtypedef struct _fs_blocked_font {
7223a0898aSmrg    FontPtr     pfont;		/* must be first for fs_read_glyphs */
7323a0898aSmrg    long        fontid;
7423a0898aSmrg    int         state;		/* how many of the replies have landed */
7523a0898aSmrg    int         flags;
7623a0898aSmrg    Bool	freeFont;	/* free this font on failure */
7723a0898aSmrg    CARD16	queryInfoSequence;
7823a0898aSmrg    CARD16	queryExtentsSequence;
7923a0898aSmrg    CARD16	queryBitmapsSequence;
8023a0898aSmrg    fsBitmapFormat format;
8123a0898aSmrg    FSClientsDependingPtr	clients_depending;
8223a0898aSmrg}           FSBlockedFontRec;
8323a0898aSmrg
8423a0898aSmrg/* LoadGlyphs data for blocked request */
8523a0898aSmrgtypedef struct _fs_blocked_glyphs {
8623a0898aSmrg    FontPtr     pfont;		/* must be first for fs_read_glyphs */
8723a0898aSmrg    int		num_expected_ranges;
8823a0898aSmrg    fsRange     *expected_ranges;
8923a0898aSmrg    FSClientsDependingPtr	clients_depending;
9023a0898aSmrg}           FSBlockedGlyphRec;
9123a0898aSmrg
9223a0898aSmrg/* LoadExtents data for blocked request */
9323a0898aSmrgtypedef struct _fs_blocked_extents {
9423a0898aSmrg    FontPtr     pfont;
9523a0898aSmrg    fsRange    *expected_ranges;
9623a0898aSmrg    int         nranges;
9723a0898aSmrg    unsigned long nextents;
9823a0898aSmrg    fsXCharInfo *extents;
9923a0898aSmrg}           FSBlockedExtentRec;
10023a0898aSmrg
10123a0898aSmrg/* LoadBitmaps data for blocked request */
10223a0898aSmrgtypedef struct _fs_blocked_bitmaps {
10323a0898aSmrg    FontPtr     pfont;
10423a0898aSmrg    fsRange    *expected_ranges;
10523a0898aSmrg    int         nranges;
10623a0898aSmrg    unsigned long size;
10723a0898aSmrg    unsigned long nglyphs;
10823a0898aSmrg    fsOffset32   *offsets;
10923a0898aSmrg    pointer     gdata;
11023a0898aSmrg}           FSBlockedBitmapRec;
11123a0898aSmrg
11223a0898aSmrg/* state for blocked ListFonts */
11323a0898aSmrgtypedef struct _fs_blocked_list {
11423a0898aSmrg    FontNamesPtr names;
11523a0898aSmrg}           FSBlockedListRec;
11623a0898aSmrg
11723a0898aSmrg/* state for blocked ListFontsWithInfo */
11823a0898aSmrgtypedef struct _fs_blocked_list_info {
11923a0898aSmrg    int         status;
12023a0898aSmrg    int         namelen;
12123a0898aSmrg    FontInfoRec info;
12223a0898aSmrg    char	name[256];
12323a0898aSmrg    int         remaining;
12423a0898aSmrg}           FSBlockedListInfoRec;
12523a0898aSmrg
12623a0898aSmrg/* state for blocked request */
12723a0898aSmrgtypedef struct _fs_block_data {
12823a0898aSmrg    int			    type;	    /* Open Font, LoadGlyphs, ListFonts,
12923a0898aSmrg					     * ListWithInfo */
13023a0898aSmrg    pointer		    client;	    /* who wants it */
13123a0898aSmrg    CARD16    		    sequenceNumber; /* expected */
13223a0898aSmrg    pointer		    data;	    /* type specific data */
13323a0898aSmrg    int			    errcode;	    /* Suspended, et al. */
13423a0898aSmrg    struct _fs_block_data   *depending;	    /* clients depending on this one */
13523a0898aSmrg    struct _fs_block_data   *next;
13623a0898aSmrg}           FSBlockDataRec;
13723a0898aSmrg
13823a0898aSmrg/* state for reconnected to dead font server */
13923a0898aSmrgtypedef struct _fs_reconnect {
14023a0898aSmrg    int	    i;
14123a0898aSmrg} FSReconnectRec, *FSReconnectPtr;
14223a0898aSmrg
14323a0898aSmrg
14423a0898aSmrg#if !defined(UNIXCPP) || defined(ANSICPP)
14523a0898aSmrg#define fsCat(x,y) x##_##y
14623a0898aSmrg#else
14723a0898aSmrg#define fsCat(x,y) x/**/_/**/y
14823a0898aSmrg#endif
14923a0898aSmrg
15023a0898aSmrg
15123a0898aSmrg/* copy XCharInfo parts of a protocol reply into a xCharInfo */
15223a0898aSmrg
15323a0898aSmrg#define fsUnpack_XCharInfo(packet, structure) \
15423a0898aSmrg    (structure)->leftSideBearing = fsCat(packet,left); \
15523a0898aSmrg    (structure)->rightSideBearing = fsCat(packet,right); \
15623a0898aSmrg    (structure)->characterWidth = fsCat(packet,width); \
15723a0898aSmrg    (structure)->ascent = fsCat(packet,ascent); \
15823a0898aSmrg    (structure)->descent = fsCat(packet,descent); \
15923a0898aSmrg    (structure)->attributes = fsCat(packet,attributes)
16023a0898aSmrg
16123a0898aSmrg
16223a0898aSmrg/* copy XFontInfoHeader parts of a protocol reply into a FontInfoRec */
16323a0898aSmrg
16423a0898aSmrg#define fsUnpack_XFontInfoHeader(packet, structure) \
16523a0898aSmrg    (structure)->allExist = ((packet)->font_header_flags & FontInfoAllCharsExist) != 0; \
16623a0898aSmrg    (structure)->drawDirection = \
16723a0898aSmrg        ((packet)->font_header_draw_direction == LeftToRightDrawDirection) ? \
16823a0898aSmrg	LeftToRight : RightToLeft; \
16923a0898aSmrg    (structure)->inkInside = ((packet)->font_header_flags & FontInfoInkInside) != 0; \
17023a0898aSmrg \
17123a0898aSmrg    (structure)->firstRow = (packet)->font_hdr_char_range_min_char_high; \
17223a0898aSmrg    (structure)->firstCol = (packet)->font_hdr_char_range_min_char_low; \
17323a0898aSmrg    (structure)->lastRow = (packet)->font_hdr_char_range_max_char_high; \
17423a0898aSmrg    (structure)->lastCol = (packet)->font_hdr_char_range_max_char_low; \
17523a0898aSmrg    (structure)->defaultCh = (packet)->font_header_default_char_low \
17623a0898aSmrg                           + ((packet)->font_header_default_char_high << 8); \
17723a0898aSmrg \
17823a0898aSmrg    (structure)->fontDescent = (packet)->font_header_font_descent; \
17923a0898aSmrg    (structure)->fontAscent = (packet)->font_header_font_ascent; \
18023a0898aSmrg \
18123a0898aSmrg    fsUnpack_XCharInfo((packet)->font_header_min_bounds, &(structure)->minbounds); \
18223a0898aSmrg    fsUnpack_XCharInfo((packet)->font_header_min_bounds, &(structure)->ink_minbounds); \
18323a0898aSmrg    fsUnpack_XCharInfo((packet)->font_header_max_bounds, &(structure)->maxbounds); \
18423a0898aSmrg    fsUnpack_XCharInfo((packet)->font_header_max_bounds, &(structure)->ink_maxbounds)
18523a0898aSmrg
18623a0898aSmrgextern void _fs_init_fontinfo ( FSFpePtr conn, FontInfoPtr pfi );
18723a0898aSmrgextern int _fs_convert_props ( fsPropInfo *pi, fsPropOffset *po, pointer pd,
18823a0898aSmrg			       FontInfoPtr pfi );
18923a0898aSmrgextern int _fs_convert_lfwi_reply ( FSFpePtr conn, FontInfoPtr pfi,
19023a0898aSmrg				    fsListFontsWithXInfoReply *fsrep,
19123a0898aSmrg				    fsPropInfo *pi, fsPropOffset *po,
19223a0898aSmrg				    pointer pd );
19323a0898aSmrgextern int fs_build_range ( FontPtr pfont, Bool range_flag,
19423a0898aSmrg			    unsigned int count, int item_size,
19523a0898aSmrg			    unsigned char *data, int *nranges,
19623a0898aSmrg			    fsRange **ranges );
19723a0898aSmrgextern void _fs_clean_aborted_loadglyphs ( FontPtr pfont,
19823a0898aSmrg					   int num_expected_ranges,
19923a0898aSmrg					   fsRange *expected_ranges );
20023a0898aSmrgextern void _fs_init_font ( FontPtr pfont );
20123a0898aSmrgextern pointer fs_alloc_glyphs (FontPtr pFont, int size);
20223a0898aSmrg#endif				/* _FSERVESTR_H_ */
203