]> git.sesse.net Git - rdpsrv/blobdiff - Xserver/lib/font/fc/fservestr.h
Import X server from vnc-3.3.7.
[rdpsrv] / Xserver / lib / font / fc / fservestr.h
diff --git a/Xserver/lib/font/fc/fservestr.h b/Xserver/lib/font/fc/fservestr.h
new file mode 100644 (file)
index 0000000..7f5ed85
--- /dev/null
@@ -0,0 +1,188 @@
+/* $XConsortium: fservestr.h,v 1.13 95/06/09 22:16:29 gildea Exp $ */
+/*
+ * Copyright 1990 Network Computing Devices
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and
+ * its documentation for any purpose is hereby granted without fee, provided
+ * that the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Network Computing Devices not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission.  Network Computing
+ * Devices makes no representations about the suitability of this software
+ * for any purpose.  It is provided "as is" without express or implied
+ * warranty.
+ *
+ * NETWORK COMPUTING DEVICES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL NETWORK COMPUTING DEVICES BE LIABLE FOR ANY SPECIAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
+ * OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Author:     Dave Lemke, Network Computing Devices, Inc
+ */
+
+#ifndef _FSERVESTR_H_
+#define _FSERVESTR_H_
+
+#include       "fserve.h"
+#include       "fsio.h"
+
+/*
+ * font server data structures
+ */
+/*
+ * font server private storage
+ */
+
+
+typedef struct _fs_font {
+    CharInfoPtr pDefault;
+    CharInfoPtr encoding;
+    CharInfoPtr inkMetrics;
+}           FSFontRec, *FSFontPtr;
+
+/* FS special data for the font */
+typedef struct _fs_font_data {
+    long        fontid;
+    int                generation;     /* FS generation when opened */
+    FontPathElementPtr fpe;
+    unsigned long glyphs_to_get;       /* # glyphs remaining to be gotten */
+
+    /* Following data needed in case font needs to be reopened. */
+    int                namelen;
+    char       *name;
+    fsBitmapFormat     format;
+    fsBitmapFormatMask fmask;
+}           FSFontDataRec;
+
+typedef struct fs_clients_depending {
+    pointer    client;
+    struct fs_clients_depending *next;
+}      FSClientsDependingRec, *FSClientsDependingPtr;
+
+/* OpenFont specific data for blocked request */
+typedef struct _fs_blocked_font {
+    FontPtr     pfont;
+    long        fontid;
+    int         state;         /* how many of the replies have landed */
+    int         errcode;
+    int         flags;
+    fsBitmapFormat format;
+    FSClientsDependingPtr      clients_depending;
+}           FSBlockedFontRec;
+
+/* LoadGlyphs data for blocked request */
+typedef struct _fs_blocked_glyphs {
+    FontPtr     pfont;
+    int                num_expected_ranges;
+    fsRange     *expected_ranges;
+    int         errcode;
+    Bool        done;
+    FSClientsDependingPtr      clients_depending;
+}           FSBlockedGlyphRec;
+
+/* LoadExtents data for blocked request */
+typedef struct _fs_blocked_extents {
+    FontPtr     pfont;
+    fsRange    *expected_ranges;
+    int         nranges;
+    Bool        done;
+    unsigned long nextents;
+    fsXCharInfo *extents;
+}           FSBlockedExtentRec;
+
+/* LoadBitmaps data for blocked request */
+typedef struct _fs_blocked_bitmaps {
+    FontPtr     pfont;
+    fsRange    *expected_ranges;
+    int         nranges;
+    Bool        done;
+    unsigned long size;
+    unsigned long nglyphs;
+    fsOffset32   *offsets;
+    pointer     gdata;
+}           FSBlockedBitmapRec;
+
+/* state for blocked ListFonts */
+typedef struct _fs_blocked_list {
+    FontNamesPtr names;
+    int         patlen;
+    int         errcode;
+    Bool        done;
+}           FSBlockedListRec;
+
+/* state for blocked ListFontsWithInfo */
+typedef struct _fs_blocked_list_info {
+    int         status;
+    char       *name;
+    int         namelen;
+    FontInfoPtr pfi;
+    int         remaining;
+    int         errcode;
+}           FSBlockedListInfoRec;
+
+/* state for blocked request */
+typedef struct _fs_block_data {
+    int                            type;       /* Open Font, LoadGlyphs, ListFonts,
+                                        * ListWithInfo */
+    pointer                client;         /* who wants it */
+    int                            sequence_number;/* expected */
+    fsGenericReply         header;
+    pointer                data;           /* type specific data */
+    struct _fs_block_data   *depending;            /* clients depending on this one */
+    struct _fs_block_data   *next;
+}           FSBlockDataRec;
+
+/* state for reconnected to dead font server */
+typedef struct _fs_reconnect {
+    int            i;
+} FSReconnectRec, *FSReconnectPtr;
+
+
+#if (defined(__STDC__) && !defined(UNIXCPP)) || defined(ANSICPP)
+#define fsCat(x,y) x##_##y
+#else
+#define fsCat(x,y) x/**/_/**/y
+#endif
+
+
+/* copy XCharInfo parts of a protocol reply into a xCharInfo */
+
+#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)
+
+
+/* copy XFontInfoHeader parts of a protocol reply into a FontInfoRec */
+
+#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)
+
+
+#endif                         /* _FSERVESTR_H_ */