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