#ifndef _FSERVESTR_H_
#define _FSERVESTR_H_
#include "fserve.h"
#include "fsio.h"
typedef struct _fs_glyph {
struct _fs_glyph *next;
} FSGlyphRec, *FSGlyphPtr;
typedef struct _fs_font {
CharInfoPtr pDefault;
CharInfoPtr encoding;
CharInfoPtr inkMetrics;
FSGlyphPtr glyphs;
} FSFontRec, *FSFontPtr;
typedef struct _fs_font_data {
long fontid;
int generation;
unsigned long glyphs_to_get;
int namelen;
char *name;
fsBitmapFormat format;
fsBitmapFormatMask fmask;
} FSFontDataRec;
typedef struct fs_clients_depending {
pointer client;
struct fs_clients_depending *next;
} FSClientsDependingRec, *FSClientsDependingPtr;
typedef struct _fs_blocked_font {
FontPtr pfont;
long fontid;
int state;
int flags;
Bool freeFont;
CARD16 queryInfoSequence;
CARD16 queryExtentsSequence;
CARD16 queryBitmapsSequence;
fsBitmapFormat format;
FSClientsDependingPtr clients_depending;
} FSBlockedFontRec;
typedef struct _fs_blocked_glyphs {
FontPtr pfont;
int num_expected_ranges;
fsRange *expected_ranges;
FSClientsDependingPtr clients_depending;
} FSBlockedGlyphRec;
typedef struct _fs_blocked_extents {
FontPtr pfont;
fsRange *expected_ranges;
int nranges;
unsigned long nextents;
fsXCharInfo *extents;
} FSBlockedExtentRec;
typedef struct _fs_blocked_bitmaps {
FontPtr pfont;
fsRange *expected_ranges;
int nranges;
unsigned long size;
unsigned long nglyphs;
fsOffset32 *offsets;
pointer gdata;
} FSBlockedBitmapRec;
typedef struct _fs_blocked_list {
FontNamesPtr names;
} FSBlockedListRec;
typedef struct _fs_blocked_list_info {
int status;
int namelen;
FontInfoRec info;
char name[256];
int remaining;
} FSBlockedListInfoRec;
typedef struct _fs_block_data {
int type;
pointer client;
CARD16 sequenceNumber;
pointer data;
int errcode;
struct _fs_block_data *depending;
struct _fs_block_data *next;
} FSBlockDataRec;
typedef struct _fs_reconnect {
int i;
} FSReconnectRec, *FSReconnectPtr;
#if !defined(UNIXCPP) || defined(ANSICPP)
#define fsCat(x,y) x##_##y
#else
#define fsCat(x,y) x_y
#endif
#define fsUnpack_XCharInfo(packet, structure) \
(structure)->leftSideBearing = fsCat(packet,left); \
(structure)->rightSideBearing = fsCat(packet,right); \
(structure)->characterWidth = fsCat(packet,width); \
(structure)->ascent = fsCat(packet,ascent); \
(structure)->descent = fsCat(packet,descent); \
(structure)->attributes = fsCat(packet,attributes)
#define fsUnpack_XFontInfoHeader(packet, structure) \
(structure)->allExist = ((packet)->font_header_flags & FontInfoAllCharsExist) != 0; \
(structure)->drawDirection = \
((packet)->font_header_draw_direction == LeftToRightDrawDirection) ? \
LeftToRight : RightToLeft; \
(structure)->inkInside = ((packet)->font_header_flags & FontInfoInkInside) != 0; \
\
(structure)->firstRow = (packet)->font_hdr_char_range_min_char_high; \
(structure)->firstCol = (packet)->font_hdr_char_range_min_char_low; \
(structure)->lastRow = (packet)->font_hdr_char_range_max_char_high; \
(structure)->lastCol = (packet)->font_hdr_char_range_max_char_low; \
(structure)->defaultCh = (packet)->font_header_default_char_low \
+ ((packet)->font_header_default_char_high << 8); \
\
(structure)->fontDescent = (packet)->font_header_font_descent; \
(structure)->fontAscent = (packet)->font_header_font_ascent; \
\
fsUnpack_XCharInfo((packet)->font_header_min_bounds, &(structure)->minbounds); \
fsUnpack_XCharInfo((packet)->font_header_min_bounds, &(structure)->ink_minbounds); \
fsUnpack_XCharInfo((packet)->font_header_max_bounds, &(structure)->maxbounds); \
fsUnpack_XCharInfo((packet)->font_header_max_bounds, &(structure)->ink_maxbounds)
extern void _fs_init_fontinfo ( FSFpePtr conn, FontInfoPtr pfi );
extern int _fs_convert_props ( fsPropInfo *pi, fsPropOffset *po, pointer pd,
FontInfoPtr pfi );
extern int _fs_convert_lfwi_reply ( FSFpePtr conn, FontInfoPtr pfi,
fsListFontsWithXInfoReply *fsrep,
fsPropInfo *pi, fsPropOffset *po,
pointer pd );
extern int fs_build_range ( FontPtr pfont, Bool range_flag,
unsigned int count, int item_size,
unsigned char *data, int *nranges,
fsRange **ranges );
extern void _fs_clean_aborted_loadglyphs ( FontPtr pfont,
int num_expected_ranges,
fsRange *expected_ranges );
extern void _fs_init_font ( FontPtr pfont );
extern pointer fs_alloc_glyphs (FontPtr pFont, int size);
#endif