]> git.sesse.net Git - rdpsrv/blobdiff - Xserver/lib/font/Speedo/speedo.h
Import X server from vnc-3.3.7.
[rdpsrv] / Xserver / lib / font / Speedo / speedo.h
diff --git a/Xserver/lib/font/Speedo/speedo.h b/Xserver/lib/font/Speedo/speedo.h
new file mode 100644 (file)
index 0000000..8c93afa
--- /dev/null
@@ -0,0 +1,1081 @@
+/* $XConsortium: speedo.h,v 1.7 95/06/08 23:20:39 gildea Exp $ */
+
+/*
+
+Copyright 1989-1991, Bitstream Inc., Cambridge, MA.
+You are hereby granted permission under all Bitstream propriety rights to
+use, copy, modify, sublicense, sell, and redistribute the Bitstream Speedo
+software and the Bitstream Charter outline font for any purpose and without
+restrictions; provided, that this notice is left intact on all copies of such
+software or font and that Bitstream's trademark is acknowledged as shown below
+on all unmodified copies of such font.
+
+BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
+
+
+BITSTREAM INC. DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
+WITHOUT LIMITATION THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE.  BITSTREAM SHALL NOT BE LIABLE FOR ANY DIRECT OR INDIRECT
+DAMAGES, INCLUDING BUT NOT LIMITED TO LOST PROFITS, LOST DATA, OR ANY OTHER
+INCIDENTAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR IN ANY WAY CONNECTED
+WITH THE SPEEDO SOFTWARE OR THE BITSTREAM CHARTER OUTLINE FONT.
+
+*/
+
+#ifndef _SPEEDO_H_
+#define _SPEEDO_H_
+
+#include <X11/Xmd.h>
+
+/***************************** S P E E D O . H *******************************
+ ****************************************************************************/
+
+/*****  USER OPTIONS OVERRIDE DEFAULTS ******/
+#include "useropt.h"
+
+/*****  CONFIGURATION DEFINITIONS *****/
+
+#ifndef INCL_CLIPPING
+#define INCL_CLIPPING 0                /* 0 indicates CLIPPING code is not compiled in*/
+#endif
+
+#ifndef INCL_SQUEEZING
+#define INCL_SQUEEZING 0               /* 0 indicates SQUEEZE code is not compiled in*/
+#endif
+
+#ifndef INCL_EXT
+#define  INCL_EXT       1          /* 1 to include extended font support */
+#endif                             /* 0 to omit extended font support */
+
+#ifndef INCL_RULES
+#define  INCL_RULES     1          /* 1 to include intelligent scaling support */
+#endif                             /* 0 to omit intelligent scaling support */
+
+#ifndef INCL_BLACK                                                    
+#define  INCL_BLACK     1          /* 1 to include blackwriter output support */
+#endif                             /* 0 to omit output mode 0 support */
+
+#ifndef INCL_SCREEN
+#define  INCL_SCREEN     0          /* 1 to include screen writeroutput support */
+#endif                             /* 0 to omit support */
+
+#ifndef INCL_OUTLINE
+#define  INCL_OUTLINE     0          /* 1 to include outline output support */
+#endif                             /* 0 to omit output mode 2 support */
+
+#ifndef INCL_2D
+#define  INCL_2D          0          /* 1 to include 2d blackwriter output support */
+#endif                             /* 0 to omit output mode 3 support */
+
+#ifndef INCL_USEROUT
+#define INCL_USEROUT      0          /* 1 to include user defined output module support */
+#endif                               /* 0 to omit user defined output module support */
+
+#ifndef INCL_LCD
+#define  INCL_LCD       1          /* 1 to include load char data support*/
+#endif                             /* 0 to omit load char data support */
+#ifndef INCL_ISW
+#define  INCL_ISW       0          /* 1 to include imported width support */
+#endif                             /* 0 to omit imported width support */
+
+#ifndef INCL_METRICS
+#define  INCL_METRICS   1          /* 1 to include metrics support */
+#endif                             /* 0 to omit metrics support */
+
+#ifndef INCL_KEYS
+#define  INCL_KEYS      0          /* 1 to include multi key support */
+#endif                             /* 0 to omit multi key support */
+
+#ifndef INCL_MULTIDEV
+#define  INCL_MULTIDEV  0          /* 1 to include multiple output device support */
+#endif                             /* 0 to omit multi device support */
+
+#ifndef SHORT_LISTS
+#define SHORT_LISTS 1                  /* 1 to allocate small intercept lists */
+#endif
+
+#ifndef PROTOS_AVAIL                /* 1 to use function prototyping */
+#define PROTOS_AVAIL 0                         /* 0 to suppress it */
+#endif
+
+#ifndef FONTFAR                                                /* if Intel mixed memory model implementation */
+#define FONTFAR                                                /* pointer type modifier for font buffer */
+#endif
+
+#ifndef STACKFAR                                       /* if Intel mixed memory model implementation */
+#define STACKFAR                                       /* pointer type modifier for font buffer */
+#endif
+
+#ifndef GLOBALFAR
+#define GLOBALFAR
+#endif
+#define MODE_BLACK 0
+#define MODE_SCREEN MODE_BLACK + INCL_BLACK
+#define MODE_OUTLINE MODE_SCREEN + INCL_SCREEN
+#define MODE_2D MODE_OUTLINE + INCL_OUTLINE
+
+#ifdef DYNAMIC_ALLOC
+#if DYNAMIC_ALLOC 
+#define STATIC_ALLOC 0
+#endif
+#endif
+
+#ifdef REENTRANT_ALLOC
+#if REENTRANT_ALLOC 
+#define STATIC_ALLOC 0
+#endif
+#endif
+
+#ifndef STATIC_ALLOC
+#define STATIC_ALLOC 1
+#endif
+
+#ifndef DYNAMIC_ALLOC
+#define DYNAMIC_ALLOC 0
+#endif
+
+#ifndef REENTRANT_ALLOC
+#define REENTRANT_ALLOC 0
+#endif
+
+/*****  TYPE  DEFINITIONS *****/
+
+#ifndef STDEF
+#ifndef SPD_BMAP
+
+typedef INT8 fix7;
+
+typedef   double   real;
+
+typedef   CARD8    ufix8;
+#ifndef VFONT
+typedef   CARD8    boolean;
+#endif
+#endif
+
+typedef   INT16    fix15;
+
+typedef   CARD16   ufix16;
+
+typedef   INT32    fix31;
+
+typedef   CARD32   ufix32;
+#endif
+
+/***** GENERAL CONSTANTS *****/
+
+#ifndef FALSE
+#define  FALSE     0
+#define  TRUE      1
+#endif
+
+#ifndef NULL
+#define NULL       0
+#endif
+
+#define  FUNCTION
+
+#define  BIT0           0x01
+#define  BIT1           0x02
+#define  BIT2           0x04
+#define  BIT3           0x08
+#define  BIT4           0x10
+#define  BIT5           0x20
+#define  BIT6           0x40
+#define  BIT7           0x80
+
+#if INCL_EXT                       /* Extended fonts supported? */
+
+#define  MAX_CONSTR     750       /* Max constraints (incl 4 dummies) */
+#define  MAX_CTRL_ZONES  256       /* Max number of controlled orus */
+#define  MAX_INT_ZONES   256       /* Max number of interpolation zones */
+
+#else                              /* Compact fonts only supported */
+
+#define  MAX_CONSTR      512       /* Max constraints (incl 4 dummies) */
+#define  MAX_CTRL_ZONES   64       /* Max number of controlled orus */
+#define  MAX_INT_ZONES    64       /* Max number of interpolation zones */
+
+#endif
+
+#define  SCALE_SHIFT   12   /* Binary point positiion for scale values */
+#define  SCALE_RND   2048   /* Rounding bit for scaling transformation */
+#define  ONE_SCALE   4096   /* Unity scale value */
+    
+#ifdef INCL_SCREEN   /* constants used by Screenwriter module */
+#define LEFT_INT 1   /* left intercept */
+#define END_INT 2    /* last intercept */
+#define FRACTION 0xFC  /* fractional portion of intercept type list */
+#endif
+
+#if INCL_SQUEEZING || INCL_CLIPPING          /* constants used by SQUEEZEing code */
+#define EM_TOP 764
+#define EM_BOT -236
+#endif
+
+/*****  STRUCTURE DEFINITIONS *****/
+#if PROTOS_AVAIL
+
+#if REENTRANT_ALLOC
+#define PROTO_DECL1 struct speedo_global_data GLOBALFAR *sp_global_ptr
+#define PROTO_DECL2 PROTO_DECL1 ,
+#else
+#define PROTO_DECL1 void
+#define PROTO_DECL2
+#endif
+#endif
+
+typedef
+struct buff_tag
+    {
+    ufix8 FONTFAR *org;                   /* Pointer to start of buffer */
+    ufix32  no_bytes;              /* Size of buffer in bytes */
+    } 
+buff_t;                            /* Buffer descriptor */
+
+typedef  struct constr_tag
+    {
+    ufix8 FONTFAR *org;                   /* Pointer to first byte in constr data  */
+    ufix16  font_id;               /* Font id for calculated data           */
+    fix15   xppo;                  /* X pixels per oru for calculated data  */
+    fix15   yppo;                  /* Y pixels per oru for calculated data  */
+    boolean font_id_valid;         /* TRUE if font id valid                 */
+    boolean data_valid;            /* TRUE if calculated data valid         */
+    boolean active;                /* TRUE if constraints enabled           */
+    }                  
+constr_t;                          /* Constraint data state                 */
+
+typedef  struct kern_tag
+    {
+    ufix8 FONTFAR *tkorg;                 /* First byte of track kerning data      */
+    ufix8 FONTFAR *pkorg;                 /* First byte of pair kerning data       */
+    fix15   no_tracks;             /* Number of kerning tracks              */
+    fix15   no_pairs;              /* Number of kerning pairs               */
+    }                  
+kern_t;                            /* Kerning control block                 */
+
+typedef struct specs_tag
+    {
+    buff_t STACKFAR *pfont;                 /* Pointer to font data                  */
+    fix31   xxmult;                /* Coeff of X orus to compute X pix      */
+    fix31   xymult;                /* Coeff of Y orus to compute X pix      */
+    fix31   xoffset;               /* Constant to compute X pix             */
+    fix31   yxmult;                /* Coeff of X orus to compute Y pix      */
+    fix31   yymult;                /* Coeff of Y orus to compute Y pix      */
+    fix31   yoffset;               /* Constant to compute Y pix             */
+    ufix32  flags;                 /* Mode flags:                           */
+                                   /*   Bit  0 - 2: Output module selector: */
+                                   /*   Bit  3: Send curves to output module*/
+                                   /*   Bit  4: Use linear scaling if set   */
+                                   /*   Bit  5: Inhibit constraint table    */
+                                   /*   Bit  6: Import set width if set     */
+                                   /*   Bit  7:   not used                  */
+                                   /*   Bit  8: Squeeze left if set         */
+                                   /*   Bit  9: Squeeze right if set        */
+                                   /*   Bit 10: Squeeze top if set          */
+                                   /*   Bit 11: Squeeze bottom if set       */
+                                   /*   Bit 12: Clip left if set            */
+                                   /*   Bit 13: Clip right if set           */
+                                   /*   Bit 14: Clip top if set             */
+                                   /*   Bit 15: Clip bottom if set          */
+                                   /*   Bits 16-31   not used               */
+#ifdef __STDC__
+    void *out_info;                /* information for output module         */
+#else
+    char *out_info;
+#endif
+    }
+specs_t;                           /* Specs structure for fw_set_specs      */
+
+typedef struct tcb_tag
+    {
+    fix15   xxmult;                /* Linear coeff of Xorus to compute Xpix */
+    fix15   xymult;                /* Linear coeff of Yorus to compute Xpix */
+    fix31   xoffset;               /* Linear constant to compute Xpix       */
+    fix15   yxmult;                /* Linear coeff of Xorus to compute Ypix */
+    fix15   yymult;                /* Linear coeff of Yorus to compute Ypix */
+    fix31   yoffset;               /* Linear constant to compute Ypix       */
+    fix15   xppo;                  /* Pixels per oru in X dimension of char */
+    fix15   yppo;                  /* Pixels per oru in Y dimension of char */
+    fix15   xpos;                  /* Origin in X dimension of character    */
+    fix15   ypos;                  /* Origin in Y dimension of character    */
+    ufix16  xtype;                 /* Transformation type for X oru coords  */
+    ufix16  ytype;                 /* Transformation type for Y oru coords  */
+    ufix16  xmode;                 /* Transformation mode for X oru coords  */
+    ufix16  ymode;                 /* Transformation mode for Y oru coords  */
+       fix15  mirror;                /* Transformation creates mirror image   */
+    }
+tcb_t;                             /* Transformation control block          */
+
+typedef struct point_tag
+    {
+    fix15   x;                     /* X coord of point (shifted pixels)     */
+    fix15   y;                     /* Y coord of point (shifted pixels)     */
+    }
+point_t;                           /* Point in device space                 */
+
+typedef struct band_tag
+    {
+    fix15   band_max;
+    fix15   band_min;
+    fix15   band_array_offset;
+    fix15   band_floor;
+    fix15   band_ceiling;
+    } band_t;
+
+typedef struct bbox_tag
+    {
+    fix31   xmin;
+    fix31   xmax;
+    fix31   ymin;
+    fix31   ymax;
+    } bbox_t;
+
+#if SHORT_LISTS 
+#define  MAX_INTERCEPTS  256      /* Max storage for intercepts */
+typedef  ufix8   cdr_t;           /* 8 bit links in intercept chains */
+#else
+#define  MAX_INTERCEPTS 1000      /* Max storage for intercepts */
+typedef  ufix16   cdr_t;          /* 16 bit links in intercept chains */
+#endif
+
+#if REENTRANT_ALLOC
+
+typedef struct intercepts_tag
+    {
+       fix15 car[MAX_INTERCEPTS];
+       fix15 cdr[MAX_INTERCEPTS];
+#if INCL_SCREEN
+       ufix8 inttype[MAX_INTERCEPTS];
+       ufix8 leftedge;
+       ufix16 fracpix;
+#endif
+       } intercepts_t;
+
+typedef struct plaid_tag
+       {
+       fix15    orus[MAX_CTRL_ZONES];   /* Controlled coordinate table (orus) */
+#if INCL_RULES
+       fix15    pix[MAX_CTRL_ZONES];    /* Controlled coordinate table (sub-pixels) */
+       fix15    mult[MAX_INT_ZONES];    /* Interpolation multiplier table */
+       fix31    offset[MAX_INT_ZONES];  /* Interpolation offset table */
+#endif
+       } plaid_t;
+#endif
+
+#if INCL_MULTIDEV
+#if PROTOS_AVAIL
+typedef struct bitmap_tag 
+       {
+       void (*p_open_bitmap)(PROTO_DECL2 fix31 x_set_width, fix31 y_set_width, fix31 xorg, fix31 yorg, fix15 xsize,fix15 ysize);
+       void (*p_set_bits)(PROTO_DECL2 fix15 y, fix15 xbit1, fix15 xbit2);
+       void (*p_close_bitmap)(PROTO_DECL1);
+       } bitmap_t;
+
+typedef struct outline_tag 
+       {
+       void (*p_open_outline)(PROTO_DECL2 fix31 x_set_width, fix31 y_set_width, fix31 xmin, fix31 xmax, fix31 ymin,fix31 ymax);
+       void (*p_start_char)(PROTO_DECL1);
+       void (*p_start_contour)(PROTO_DECL2 fix31 x,fix31 y,boolean outside);
+       void (*p_curve)(PROTO_DECL2 fix31 x1, fix31 y1, fix31 x2, fix31 y2, fix31 x3, fix31 y3);
+       void (*p_line)(PROTO_DECL2 fix31 x, fix31 y);
+       void (*p_close_contour)(PROTO_DECL1);
+       void (*p_close_outline)(PROTO_DECL1);
+       } outline_t;
+#else
+typedef struct bitmap_tag 
+       {
+       void (*p_open_bitmap)();
+       void (*p_set_bits)();
+       void (*p_close_bitmap)();
+       } bitmap_t;
+
+typedef struct outline_tag 
+       {
+       void (*p_open_outline)();
+       void (*p_start_char)();
+       void (*p_start_contour)();
+       void (*p_curve)();
+       void (*p_line)();
+       void (*p_close_contour)();
+       void (*p_close_outline)();
+       } outline_t;
+#endif
+#endif
+
+/* ---------------------------------------------------*/
+/****  MAIN GLOBAL DATA STRUCTURE, SPEEDO_GLOBALS *****/
+
+typedef struct speedo_global_data 
+       {
+/*  do_char.c data definitions */
+#if INCL_METRICS                    /* Metrics functions supported? */
+         kern_t  kern;              /* Kerning control block */
+#endif                                                               /* endif incl_metrics */
+        point_t   Psw;             /* End of escapement vector (1/65536 pixel units) */
+
+#if INCL_LCD                        /* Dynamic load character data supported? */
+         fix15  cb_offset;          /* Offset to sub-char data in char buffer */
+#endif                                                               /* endif incl_lcd */
+
+/* do_trns.c data definitions */
+        point_t  P0;               /* Current point (sub-pixels) */
+        fix15    x_orus;           /* Current X argument (orus) */
+        fix15    y_orus;           /* Current Y argument (orus) */
+        fix15    x_pix;            /* Current X argument (sub-pixels) */
+        fix15    y_pix;            /* Current Y argument (sub-pixels) */
+        ufix8    x_int;            /* Current X interpolation zone */
+        ufix8    y_int;            /* Current Y interpolation zone */
+
+#if INCL_MULTIDEV && INCL_OUTLINE
+     outline_t outline_device;
+     boolean   outline_device_set;
+#endif
+
+#if INCL_BLACK || INCL_SCREEN || INCL_2D
+#if INCL_MULTIDEV
+     bitmap_t bitmap_device;
+     boolean  bitmap_device_set;
+#endif
+     band_t   y_band;           /* Y current band(whole pixels) */
+
+        struct set_width_tag
+        {
+        fix31 x;
+        fix31 y;
+        } set_width; /* Character escapement vector */
+
+        boolean  first_pass;       /* TRUE during first pass thru outline data */
+        boolean  extents_running;  /* T if extent accumulation for each vector */
+        fix15    x0_spxl;          /* X coord of current point (sub pixels) */
+        fix15    y0_spxl;          /* Y coord of current point (sub pixels) */
+        fix15    y_pxl;            /* Y coord of current point (whole pixels) */
+#if REENTRANT_ALLOC
+     intercepts_t STACKFAR *intercepts;
+#else                                                                /* else if not reentrant */
+        fix15    car[MAX_INTERCEPTS]; /* Data field of intercept storage */
+        cdr_t    cdr[MAX_INTERCEPTS]; /* Link field of intercept storage */
+#if INCL_SCREEN
+         ufix8    inttype[MAX_INTERCEPTS];
+         ufix8    leftedge;
+         ufix16   fracpix;
+#endif                                                               /* endif incl_screen */
+#endif                                                               /* endif reentrant */
+        fix15    bmap_xmin;        /* Min X value (sub-pixel units) */
+        fix15    bmap_xmax;        /* Max X value (sub-pixel units) */
+        fix15    bmap_ymin;        /* Min Y value (sub-pixel units) */
+        fix15    bmap_ymax;        /* Max Y value (sub-pixel units) */
+        fix15    no_y_lists;       /* Number of active intercept lists */
+        fix15    first_offset;     /* Index of first active list cell */
+        fix15    next_offset;      /* Index of next free list cell */
+        boolean  intercept_oflo;   /* TRUE if intercepts data lost */
+#endif                                                               /* endif incl_black, incl_screen, incl_2d */
+
+/* bounding box now used by all output modules, including outline */
+        fix15    xmin;             /* Min X value in whole character */
+        fix15    xmax;             /* Max X value in whole character */
+        fix15    ymin;             /* Min Y value in whole character */
+        fix15    ymax;             /* Max Y value in whole character */
+
+#if INCL_2D
+         fix15    no_x_lists;       /* Number of active x intercept lists */
+         band_t   x_band;           /* X current band(whole pixels) */
+         boolean  x_scan_active;    /* X scan flag during scan conversion */
+#endif
+
+/* reset.c data definitions */
+         ufix16   key32;            /* Decryption keys 3,2 combined */
+         ufix8    key4;             /* Decryption key 4 */
+         ufix8    key6;             /* Decryption key 6 */
+         ufix8    key7;             /* Decryption key 7 */
+         ufix8    key8;             /* Decryption key 8 */
+
+/* set_spcs.c data definitions */
+         buff_t   font;
+         buff_t GLOBALFAR *pfont; /* Pointer to font buffer structure */
+         fix31    font_buff_size; /* Number of bytes loaded in font buffer */
+         ufix8 FONTFAR *pchar_dir; /* Pointer to character directory */
+         fix15    first_char_idx; /* Index to first character in font */
+         fix15    no_chars_avail; /* Total characters in font layout */
+         fix15    orus_per_em;    /* Outline resolution */
+         fix15    metric_resolution; /* metric resolution for setwidths, kerning pairs
+                                                       (defaults to orus_per_em) */
+         tcb_t    tcb0;           /* Top level transformation control block */
+       
+         boolean  specs_valid;    /* TRUE if fw_set_specs() successful */
+       
+         fix15    depth_adj;      /* Curve splitting depth adjustment */
+         boolean  curves_out;     /* Allow curves to output module */
+         fix15    output_mode;    /* Output module selector */
+         fix15    thresh;         /* Scan conversion threshold (sub-pixels) */
+         boolean  normal;         /* TRUE if 0 obl and mult of 90 deg rot  */
+       
+         fix15    multshift;      /* Fixed point shift for multipliers */
+         fix15    pixshift;       /* Fixed point shift for sub-pixels */
+         fix15    poshift;        /* Left shift from pixel to output format */
+         fix15    mpshift;        /* Fixed point shift for mult to sub-pixels */
+         fix31    multrnd;        /* 0.5 in multiplier units */
+         fix15    pixrnd;         /* 0.5 in sub-pixel units */
+         fix31    mprnd;          /* 0.5 sub-pixels in multiplier units */
+         fix15    pixfix;         /* Mask to remove fractional pixels */
+         fix15    onepix;         /* 1.0 pixels in sub-pixel units */
+
+#if PROTOS_AVAIL
+         boolean (*init_out)(PROTO_DECL2 specs_t GLOBALFAR *specsarg);
+         boolean (*begin_char)(PROTO_DECL2 point_t Psw,point_t Pmin,point_t Pmax); 
+         void    (*begin_sub_char)(PROTO_DECL2 point_t Psw,point_t Pmin,point_t Pmax);
+         void    (*begin_contour)(PROTO_DECL2 point_t P1,boolean outside); 
+         void    (*curve)(PROTO_DECL2 point_t P1, point_t P2, point_t P3, fix15 depth);  
+         void    (*line)(PROTO_DECL2 point_t P1);               
+         void    (*end_contour)(PROTO_DECL1); 
+         void    (*end_sub_char)(PROTO_DECL1);
+         boolean (*end_char)(PROTO_DECL1);    
+#else                                                                /* if not protos */
+         boolean (*init_out)();
+         boolean (*begin_char)(); 
+         void    (*begin_sub_char)();
+         void    (*begin_contour)(); 
+         void    (*curve)();         
+         void    (*line)();               
+         void    (*end_contour)(); 
+         void    (*end_sub_char)();
+         boolean (*end_char)();
+#endif                                                               /* end not protos */
+
+         specs_t GLOBALFAR *pspecs;    /* Pointer to specifications bundle */
+         specs_t specs;                /* copy specs onto stack */
+         ufix8 FONTFAR  *font_org;     /* Pointer to start of font data */
+         ufix8 FONTFAR  *hdr2_org;     /* Pointer to start of private header data */
+
+/* set_trns.c data definitions */
+         tcb_t    tcb;                 /* Current transformation control block */
+         ufix8    Y_edge_org;          /* Index to first Y controlled coordinate */
+         ufix8    Y_int_org;           /* Index to first Y interpolation zone */
+         fix31    rnd_xmin;            /* rounded out value of xmin for int-char spac. fix */
+
+#if REENTRANT_ALLOC
+         plaid_t STACKFAR  *plaid;
+#else                                                                /* if not reentrant */
+         fix15    orus[MAX_CTRL_ZONES];   /* Controlled coordinate table (orus) */
+#if INCL_RULES
+         fix15    pix[MAX_CTRL_ZONES];    /* Controlled coordinate table (sub-pixels) */
+         fix15    mult[MAX_INT_ZONES];    /* Interpolation multiplier table */
+         fix31    offset[MAX_INT_ZONES];  /* Interpolation offset table */
+#endif                                                               /* endif incl_rules */
+#endif                                                               /* endif not reentrant */
+
+         fix15    no_X_orus;              /* Number of X controlled coordinates */
+         fix15    no_Y_orus;              /* Number of Y controlled coordinates */
+         ufix16   Y_constr_org;           /* Origin of constraint table in font data */
+
+#if INCL_RULES
+         constr_t constr;                 /* Constraint data state */
+         boolean  c_act[MAX_CONSTR];      /* TRUE if constraint currently active */
+         fix15    c_pix[MAX_CONSTR];      /* Size of constrained zone if active */
+#endif                                                            
+#if  INCL_ISW       
+         boolean import_setwidth_act;     /* boolean to indicate imported setwidth */
+        boolean isw_modified_constants;
+         ufix32 imported_width;                  /* value of imported setwidth */      
+        fix15 isw_xmax;                  /* maximum oru value for constants*/
+#endif
+#if INCL_SQUEEZING || INCL_ISW
+         fix15 setwidth_orus;             /* setwidth value in orus */
+       /* bounding box in orus for squeezing */
+         fix15 bbox_xmin_orus;           /* X minimum in orus */
+         fix15 bbox_xmax_orus;            /* X maximum in orus */
+         fix15 bbox_ymin_orus;            /* Y minimum in orus */
+         fix15 bbox_ymax_orus;            /* Y maximum in orus */
+#endif
+#ifdef INCL_SQUEEZING
+         boolean squeezing_compound;       /* flag to indicate a compound character*/
+#endif
+#ifdef INCL_CLIPPING
+       fix31 clip_xmax;
+       fix31 clip_ymax;
+       fix31 clip_xmin;
+       fix31 clip_ymin;
+#endif
+       } SPEEDO_GLOBALS;
+
+/***********************************************************************************
+ *
+ *  Speedo global data structure allocation 
+ *
+ ***********************************************************************************/
+
+#ifdef SET_SPCS
+#define EXTERN 
+#else
+#define EXTERN extern
+#endif
+#if STATIC_ALLOC
+EXTERN SPEEDO_GLOBALS GLOBALFAR sp_globals;
+#define sp_intercepts sp_globals
+#define sp_plaid sp_globals
+#else
+#if DYNAMIC_ALLOC
+EXTERN SPEEDO_GLOBALS GLOBALFAR *sp_global_ptr;
+#define sp_globals (*sp_global_ptr)
+#define sp_intercepts (*sp_global_ptr)
+#define sp_plaid (*sp_global_ptr)
+#else
+#if REENTRANT_ALLOC
+#define sp_globals (*sp_global_ptr)
+#define sp_intercepts (*(*sp_global_ptr).intercepts)
+#define sp_plaid (*(*sp_global_ptr).plaid)
+#endif
+#endif
+#endif
+#ifdef EXTERN
+#undef EXTERN
+#endif
+
+
+/***** PUBLIC FONT HEADER OFFSET CONSTANTS  *****/
+#define  FH_FMVER    0      /* U   D4.0 CR LF NULL NULL  8 bytes            */
+#define  FH_FNTSZ    8      /* U   Font size (bytes) 4 bytes                */
+#define  FH_FBFSZ   12      /* U   Min font buffer size (bytes) 4 bytes     */
+#define  FH_CBFSZ   16      /* U   Min char buffer size (bytes) 2 bytes     */
+#define  FH_HEDSZ   18      /* U   Header size (bytes) 2 bytes              */
+#define  FH_FNTID   20      /* U   Source Font ID  2 bytes                  */
+#define  FH_SFVNR   22      /* U   Source Font Version Number  2 bytes      */
+#define  FH_FNTNM   24      /* U   Source Font Name  70 bytes               */
+#define  FH_MDATE   94      /* U   Manufacturing Date  10 bytes             */
+#define  FH_LAYNM  104      /* U   Layout Name  70 bytes                    */
+#define  FH_CPYRT  174      /* U   Copyright Notice  78 bytes               */
+#define  FH_NCHRL  252      /* U   Number of Chars in Layout  2 bytes       */
+#define  FH_NCHRF  254      /* U   Total Number of Chars in Font  2 bytes   */
+#define  FH_FCHRF  256      /* U   Index of first char in Font  2 bytes     */
+#define  FH_NKTKS  258      /* U   Number of kerning tracks in font 2 bytes */
+#define  FH_NKPRS  260      /* U   Number of kerning pairs in font 2 bytes  */
+#define  FH_FLAGS  262      /* U   Font flags 1 byte:                       */
+                            /*       Bit 0: Extended font                   */
+                            /*       Bit 1: not used                        */
+                            /*       Bit 2: not used                        */
+                            /*       Bit 3: not used                        */
+                            /*       Bit 4: not used                        */
+                            /*       Bit 5: not used                        */
+                            /*       Bit 6: not used                        */
+                            /*       Bit 7: not used                        */
+#define  FH_CLFGS  263      /* U   Classification flags 1 byte:             */
+                            /*       Bit 0: Italic                          */
+                            /*       Bit 1: Monospace                       */
+                            /*       Bit 2: Serif                           */
+                            /*       Bit 3: Display                         */
+                            /*       Bit 4: not used                        */
+                            /*       Bit 5: not used                        */
+                            /*       Bit 6: not used                        */
+                            /*       Bit 7: not used                        */
+#define  FH_FAMCL  264      /* U   Family Classification 1 byte:            */
+                            /*       0:  Don't care                         */
+                            /*       1:  Serif                              */
+                            /*       2:  Sans serif                         */
+                            /*       3:  Monospace                          */
+                            /*       4:  Script or calligraphic             */
+                            /*       5:  Decorative                         */
+                            /*       6-255: not used                        */
+#define  FH_FRMCL  265      /* U   Font form Classification 1 byte:         */
+                            /*       Bits 0-3 (width type):                 */
+                            /*         0-3:   not used                      */
+                            /*         4:     Condensed                     */
+                            /*         5:     not used                      */
+                            /*         6:     Semi-condensed                */
+                            /*         7:     not used                      */
+                            /*         8:     Normal                        */
+                            /*         9:     not used                      */
+                            /*        10:     Semi-expanded                 */
+                            /*        11:     not used                      */
+                            /*        12:     Expanded                      */
+                            /*        13-15:  not used                      */
+                            /*       Bits 4-7 (Weight):                     */
+                            /*         0:   not used                        */
+                            /*         1:   Thin                            */
+                            /*         2:   Ultralight                      */
+                            /*         3:   Extralight                      */
+                            /*         4:   Light                           */
+                            /*         5:   Book                            */
+                            /*         6:   Normal                          */
+                            /*         7:   Medium                          */
+                            /*         8:   Semibold                        */
+                            /*         9:   Demibold                        */
+                            /*         10:  Bold                            */
+                            /*         11:  Extrabold                       */
+                            /*         12:  Ultrabold                       */
+                            /*         13:  Heavy                           */
+                            /*         14:  Black                           */
+                            /*         15-16: not used                      */
+#define  FH_SFNTN  266      /* U   Short Font Name  32 bytes                */
+#define  FH_SFACN  298      /* U   Short Face Name  16 bytes                */
+#define  FH_FNTFM  314      /* U   Font form 14 bytes                       */
+#define  FH_ITANG  328      /* U   Italic angle 2 bytes (1/256th deg)       */
+#define  FH_ORUPM  330      /* U   Number of ORUs per em  2 bytes           */
+#define  FH_WDWTH  332      /* U   Width of Wordspace  2 bytes              */
+#define  FH_EMWTH  334      /* U   Width of Emspace  2 bytes                */
+#define  FH_ENWTH  336      /* U   Width of Enspace  2 bytes                */
+#define  FH_TNWTH  338      /* U   Width of Thinspace  2 bytes              */
+#define  FH_FGWTH  340      /* U   Width of Figspace  2 bytes               */
+#define  FH_FXMIN  342      /* U   Font-wide min X value  2 bytes           */
+#define  FH_FYMIN  344      /* U   Font-wide min Y value  2 bytes           */
+#define  FH_FXMAX  346      /* U   Font-wide max X value  2 bytes           */
+#define  FH_FYMAX  348      /* U   Font-wide max Y value  2 bytes           */
+#define  FH_ULPOS  350      /* U   Underline position 2 bytes               */
+#define  FH_ULTHK  352      /* U   Underline thickness 2 bytes              */
+#define  FH_SMCTR  354      /* U   Small caps transformation 6 bytes        */
+#define  FH_DPSTR  360      /* U   Display sups transformation 6 bytes      */
+#define  FH_FNSTR  366      /* U   Footnote sups transformation 6 bytes     */
+#define  FH_ALSTR  372      /* U   Alpha sups transformation 6 bytes        */
+#define  FH_CMITR  378      /* U   Chemical infs transformation 6 bytes     */
+#define  FH_SNMTR  384      /* U   Small nums transformation 6 bytes        */
+#define  FH_SDNTR  390      /* U   Small denoms transformation 6 bytes      */
+#define  FH_MNMTR  396      /* U   Medium nums transformation 6 bytes       */
+#define  FH_MDNTR  402      /* U   Medium denoms transformation 6 bytes     */
+#define  FH_LNMTR  408      /* U   Large nums transformation 6 bytes        */
+#define  FH_LDNTR  414      /* U   Large denoms transformation 6 bytes      */
+                            /*     Transformation data format:              */
+                            /*       Y position 2 bytes                     */
+                            /*       X scale 2 bytes (1/4096ths)            */
+                            /*       Y scale 2 bytes (1/4096ths)            */
+#define  SIZE_FW FH_LDNTR + 6  /* size of nominal font header */
+#define  EXP_FH_METRES SIZE_FW /* offset to expansion field metric resolution (optional) */
+
+
+
+/***** MODE FLAGS CONSTANTS *****/
+#define CURVES_OUT     0X0008  /* Output module accepts curves              */
+#define BOGUS_MODE     0X0010  /* Linear scaling mode                       */
+#define CONSTR_OFF     0X0020  /* Inhibit constraint table                  */
+#define IMPORT_WIDTHS  0X0040  /* Imported width mode                       */
+#define SQUEEZE_LEFT   0X0100  /* Squeeze left mode                         */
+#define SQUEEZE_RIGHT  0X0200  /* Squeeze right mode                        */
+#define SQUEEZE_TOP    0X0400  /* Squeeze top mode                          */
+#define SQUEEZE_BOTTOM 0X0800  /* Squeeze bottom mode                       */
+#define CLIP_LEFT      0X1000  /* Clip left mode                            */
+#define CLIP_RIGHT     0X2000  /* Clip right mode                           */
+#define CLIP_TOP       0X4000  /* Clip top mode                             */
+#define CLIP_BOTTOM    0X8000  /* Clip bottom mode                          */
+
+/***********************************************************************************
+ *
+ *  Speedo function declarations - use prototypes if available
+ *
+ ***********************************************************************************/
+
+#if PROTOS_AVAIL
+/*  do_char.c functions */
+ufix16 sp_get_char_id(PROTO_DECL2 ufix16 char_index);
+boolean sp_make_char(PROTO_DECL2 ufix16 char_index);
+#if  INCL_ISW       
+fix31 sp_compute_isw_scale(PROTO_DECL2);
+static boolean sp_do_make_char(PROTO_DECL2 ufix16 char_index);
+boolean sp_make_char_isw(PROTO_DECL2 ufix16 char_index, ufix32 imported_width);
+static boolean sp_reset_xmax(PROTO_DECL2 fix31 xmax);
+#endif
+#if INCL_ISW || INCL_SQUEEZING
+static void sp_preview_bounding_box(PROTO_DECL2 ufix8 FONTFAR  *pointer,ufix8    format);
+#endif
+
+#if INCL_METRICS                 /* Metrics functions supported? */
+fix31 sp_get_char_width(PROTO_DECL2 ufix16 char_index);
+fix15 sp_get_track_kern(PROTO_DECL2 fix15 track,fix15 point_size);
+fix31 sp_get_pair_kern(PROTO_DECL2 ufix16 char_index1,ufix16 char_index2);
+boolean sp_get_char_bbox(PROTO_DECL2 ufix16 char_index, bbox_t *bbox);
+#endif
+
+/* do_trns.c functions */
+ufix8 FONTFAR *sp_read_bbox(PROTO_DECL2 ufix8 FONTFAR *pointer,point_t STACKFAR *pPmin,point_t STACKFAR *pPmax,boolean set_flag);
+void sp_proc_outl_data(PROTO_DECL2 ufix8 FONTFAR *pointer);
+
+/* out_blk.c functions */
+#if INCL_BLACK
+boolean sp_init_black(PROTO_DECL2 specs_t GLOBALFAR *specsarg);
+boolean sp_begin_char_black(PROTO_DECL2 point_t Psw,point_t Pmin,point_t Pmax);
+void sp_begin_contour_black(PROTO_DECL2 point_t P1,boolean outside);
+void sp_line_black(PROTO_DECL2 point_t P1);
+boolean sp_end_char_black(PROTO_DECL1);
+#endif
+
+/* out_scrn.c functions */
+#if INCL_SCREEN
+boolean sp_init_screen(PROTO_DECL2 specs_t GLOBALFAR *specsarg);
+boolean sp_begin_char_screen(PROTO_DECL2 point_t Psw,point_t Pmin,point_t Pmax);
+void sp_begin_contour_screen(PROTO_DECL2 point_t P1,boolean outside);
+void sp_curve_screen(PROTO_DECL2 point_t P1,point_t P2,point_t P3, fix15 depth);
+void sp_scan_curve_screen(PROTO_DECL2 fix31 X0,fix31 Y0,fix31 X1,fix31 Y1,fix31 X2,fix31 Y2,fix31 X3,fix31 Y3);
+void sp_vert_line_screen(PROTO_DECL2   fix31 x, fix15 y1, fix15 y2);
+void sp_line_screen(PROTO_DECL2 point_t P1);
+void sp_end_contour_screen(PROTO_DECL1);
+boolean sp_end_char_screen(PROTO_DECL1);
+#endif
+
+/* out_outl.c functions */
+#if INCL_OUTLINE
+#if INCL_MULTIDEV
+boolean sp_set_outline_device(PROTO_DECL2 outline_t *ofuncs, ufix16 size);
+#endif
+
+
+boolean sp_init_outline(PROTO_DECL2 specs_t GLOBALFAR *specsarg);
+boolean sp_begin_char_outline(PROTO_DECL2 point_t Psw,point_t Pmin,point_t Pmax);
+void sp_begin_sub_char_outline(PROTO_DECL2 point_t Psw,point_t Pmin,point_t Pmax);
+void sp_begin_contour_outline(PROTO_DECL2 point_t P1,boolean outside);
+void sp_curve_outline(PROTO_DECL2 point_t P1,point_t P2,point_t P3, fix15 depth);
+void sp_line_outline(PROTO_DECL2 point_t P1);
+void sp_end_contour_outline(PROTO_DECL1);
+void sp_end_sub_char_outline(PROTO_DECL1);
+boolean sp_end_char_outline(PROTO_DECL1);
+#endif
+
+/* out_bl2d.c functions */
+#if INCL_2D
+boolean sp_init_2d(PROTO_DECL2 specs_t GLOBALFAR *specsarg);
+boolean sp_begin_char_2d(PROTO_DECL2 point_t Psw,point_t Pmin,point_t Pmax);
+void sp_begin_contour_2d(PROTO_DECL2 point_t P1,boolean outside);
+void sp_line_2d(PROTO_DECL2 point_t P1);
+boolean sp_end_char_2d(PROTO_DECL1);
+#endif
+
+/* out_util.c functions */
+#if INCL_BLACK || INCL_SCREEN || INCL_2D
+        
+#if INCL_MULTIDEV
+boolean sp_set_bitmap_device(PROTO_DECL2 bitmap_t *bfuncs, ufix16 size);
+#endif
+
+void sp_init_char_out(PROTO_DECL2 point_t Psw, point_t Pmin, point_t Pmax);
+void sp_begin_sub_char_out(PROTO_DECL2 point_t Psw, point_t Pmin, point_t Pmax);
+void sp_curve_out(PROTO_DECL2 point_t P1, point_t P2, point_t P3, fix15 depth);
+void sp_end_contour_out(PROTO_DECL1);
+void sp_end_sub_char_out(PROTO_DECL1);
+void sp_init_intercepts_out(PROTO_DECL1);
+void sp_restart_intercepts_out(PROTO_DECL1);
+void sp_set_first_band_out(PROTO_DECL2 point_t Pmin, point_t Pmax);
+void sp_reduce_band_size_out(PROTO_DECL1);
+boolean sp_next_band_out(PROTO_DECL1);
+#endif
+
+#if INCL_USEROUT
+boolean sp_init_userout(specs_t *specsarg);
+#endif
+
+
+/* reset.c functions */
+void sp_reset(PROTO_DECL1);
+#if INCL_KEYS
+void sp_set_key(PROTO_DECL2 ufix8 key[]);
+#endif
+ufix16 sp_get_cust_no(PROTO_DECL2 buff_t font_buff);
+
+/* set_spcs.c functions */
+boolean sp_set_specs(PROTO_DECL2 specs_t STACKFAR *specsarg);
+void sp_type_tcb(PROTO_DECL2 tcb_t GLOBALFAR *ptcb);
+
+fix31 sp_read_long(PROTO_DECL2 ufix8 FONTFAR *pointer);
+fix15 sp_read_word_u(PROTO_DECL2 ufix8 FONTFAR *pointer);
+
+/* set_trns.c functions */
+void sp_init_tcb(PROTO_DECL1);
+void sp_scale_tcb(PROTO_DECL2 tcb_t GLOBALFAR *ptcb,fix15 x_pos,fix15 y_pos,fix15 x_scale,fix15 y_scale);
+ufix8 FONTFAR *sp_plaid_tcb(PROTO_DECL2 ufix8 FONTFAR *pointer,ufix8 format);
+ufix8 FONTFAR *sp_skip_interpolation_table(PROTO_DECL2 ufix8 FONTFAR *pointer, ufix8 format);
+ufix8 FONTFAR *sp_skip_control_zone(PROTO_DECL2 ufix8 FONTFAR *pointer, ufix8 format);
+
+ufix8 FONTFAR *sp_read_oru_table(PROTO_DECL2 ufix8 FONTFAR *pointer);
+#if INCL_SQUEEZING || INCL_ISW
+static void sp_calculate_x_pix(PROTO_DECL2 ufix8 start_edge,ufix8 end_edge,ufix16 constr_nr,fix31 x_scale,fix31 x_offset,fix31 ppo,fix15 setwidth_pix);
+#endif
+#if INCL_SQUEEZING
+static void sp_calculate_y_pix(PROTO_DECL2 ufix8 start_edge,ufix8 end_edge,ufix16 constr_nr,fix31 top_scale,fix31 bottom_scale,fix31 ppo,fix15 emtop_pix,fix15 embot_pix);
+boolean sp_calculate_x_scale(PROTO_DECL2 fix31 *x_factor,fix31 *x_offset,fix15 no_x_ctrl_zones);
+boolean sp_calculate_y_scale(PROTO_DECL2 fix31 *top_scale,fix31 *bottom_scale,fix15 first_y_zone, fix15 no_Y_ctrl_zones);
+#endif
+                  
+
+/* user defined functions */
+
+void sp_report_error(PROTO_DECL2 fix15 n);
+
+#if INCL_BLACK || INCL_SCREEN || INCL_2D
+void sp_open_bitmap(PROTO_DECL2 fix31 x_set_width, fix31 y_set_width, fix31 xorg, fix31 yorg, fix15 xsize,fix15 ysize);
+void sp_set_bitmap_bits(PROTO_DECL2 fix15 y, fix15 xbit1, fix15 xbit2);
+void sp_close_bitmap(PROTO_DECL1);
+#endif
+
+#if INCL_OUTLINE
+void sp_open_outline(PROTO_DECL2 fix31 x_set_width, fix31 y_set_width, fix31 xmin, fix31 xmax, fix31 ymin,fix31 ymax);
+void sp_start_new_char(PROTO_DECL1);
+void sp_start_contour(PROTO_DECL2 fix31 x,fix31 y,boolean outside);
+void sp_curve_to(PROTO_DECL2 fix31 x1, fix31 y1, fix31 x2, fix31 y2, fix31 x3, fix31 y3);
+void sp_line_to(PROTO_DECL2 fix31 x, fix31 y);
+void sp_close_contour(PROTO_DECL1);
+void sp_close_outline(PROTO_DECL1);
+#endif
+
+#if INCL_LCD                     /* Dynamic load character data supported? */
+buff_t *sp_load_char_data(PROTO_DECL2 fix31 file_offset,fix15 no_bytes,fix15 cb_offset);        /* Load character data from font file */
+#endif
+
+#if INCL_PLAID_OUT               /* Plaid data monitoring included? */
+void   sp_record_xint(PROTO_DECL2 fix15 int_num);            /* Record xint data */
+void   sp_record_yint(PROTO_DECL2 fix15 int_num);            /* Record yint data */
+void sp_begin_plaid_data(PROTO_DECL1);         /* Signal start of plaid data */
+void sp_begin_ctrl_zones(PROTO_DECL2 fix15, no_X_zones, fix15 no_Y_zones);         /* Signal start of control zones */
+void sp_record_ctrl_zone(PROTO_DECL2 fix31 start, fix31 end, fix15 constr);         /* Record control zone data */
+void sp_begin_int_zones(PROTO_DECL2 fix15 no_X_int_zones, fix15 no_Y_int_zones);          /* Signal start of interpolation zones */
+void sp_record_int_zone(PROTO_DECL2 fix31 start, fix31 end);          /* Record interpolation zone data */
+void sp_end_plaid_data(PROTO_DECL1);           /* Signal end of plaid data */
+#endif
+
+#else   /* NO PROTOTYPES AVAILABLE */
+
+
+
+/*  do_char.c functions */
+boolean sp_make_char();          /* Make specified character */
+#if  INCL_ISW       
+fix31 sp_compute_isw_scale();
+static boolean sp_do_make_char();
+boolean sp_make_char_isw();     /* Make specified character with */
+                                /* imported set widths.*/
+static boolean sp_reset_xmax();
+#endif
+#if INCL_ISW || INCL_SQUEEZING
+static void sp_preview_bounding_box();
+#endif
+ufix16  sp_get_char_id();        /* Get character id for specified char */
+
+#if INCL_METRICS                 /* Metrics functions supported? */
+fix31   sp_get_char_width();     /* Get character width for specified char */
+fix15   sp_get_track_kern();     /* Get track kerning for specified size */
+fix31   sp_get_pair_kern();      /* Get kerning for specified char pair */
+boolean sp_get_char_bbox();
+#endif
+
+/* do_trns.c functions */
+ufix8 FONTFAR *sp_read_bbox();              /* Read bounding box */
+void   sp_proc_outl_data();         /* Process outline data */
+
+/* out_0c.c functions */
+boolean sp_init_black();
+boolean sp_begin_char_black();
+void sp_begin_contour_black();
+void sp_line_black();
+boolean sp_end_char_black();
+
+/* out_util.c functions */
+#if INCL_BLACK || INCL_SCREEN || INCL_2D
+
+void sp_init_char_out();
+void sp_begin_sub_char_out();
+void sp_curve_out();
+void sp_end_contour_out();
+void sp_end_sub_char_out();
+void sp_init_intercepts_out();
+void sp_restart_intercepts_out();
+void sp_set_first_band_out();
+void sp_reduce_band_size_out();
+boolean sp_next_band_out();
+#endif
+
+#if INCL_USEROUT
+boolean sp_init_userout();
+#endif
+
+/* reset.c functions */
+void sp_reset();                 /* Initialize Fontware mechanism */
+
+#if INCL_KEYS
+void sp_set_key();
+#endif
+ufix16 sp_get_cust_no();
+
+/* set_spcs.c functions */
+boolean    sp_set_specs();       /* Set specifications */
+void       sp_type_tcb();           /* Update transformation class in tcb */
+
+fix31   sp_read_long();      /* Read long as 3 bytes encrypted */
+fix15   sp_read_word_u();    /* Read word as 2 bytes unencrypted */
+
+/* set_trns.c functions */
+void    sp_init_tcb();              /* Initialize current trans control block */
+void    sp_scale_tcb();             /* Transform trans control block */
+ufix8 FONTFAR *sp_plaid_tcb();             /* Enable intelligent transformation */
+ufix8 FONTFAR *sp_skip_interpolation_table();
+ufix8 FONTFAR *sp_skip_control_zone();
+
+ufix8 FONTFAR *sp_read_oru_table();    /* Read controlled coord table */
+#if INCL_SQUEEZING || INCL_ISW
+static void sp_calculate_x_pix();
+#endif
+#if INCL_SQUEEZING
+static void sp_calculate_y_pix();
+boolean sp_calculate_x_scale();
+boolean sp_calculate_y_scale() ;
+#endif
+
+/* user defined functions */
+
+#if INCL_BLACK || INCL_SCREEN || INCL_2D
+void sp_open_bitmap();
+void sp_set_bitmap_bits();
+void sp_close_bitmap();
+#endif
+
+#if INCL_OUTLINE
+void sp_open_outline();
+void sp_start_new_char();
+void sp_start_contour();
+void sp_curve_to();
+void sp_line_to();
+void sp_close_contour();
+void sp_close_outline();
+#endif
+
+#if INCL_LCD                     /* Dynamic load character data supported? */
+buff_t *sp_load_char_data();        /* Load character data from font file */
+#endif
+
+#if INCL_PLAID_OUT               /* Plaid data monitoring included? */
+void   sp_record_xint();            /* Record xint data */
+void   sp_record_yint();            /* Record yint data */
+void sp_begin_plaid_data();         /* Signal start of plaid data */
+void sp_begin_ctrl_zones();         /* Signal start of control zones */
+void sp_record_ctrl_zone();         /* Record control zone data */
+void sp_begin_int_zones();          /* Signal start of interpolation zones */
+void sp_record_int_zone();          /* Record interpolation zone data */
+void sp_end_plaid_data();           /* Signal end of plaid data */
+#endif
+
+boolean sp_init_screen();        /* If only screen-writer mode supported */
+boolean sp_begin_char_screen();      /* If screenwriter mode supported */
+void    sp_begin_contour_screen();   /* If screenwriter mode supported */
+void    sp_line_screen();            /* If screenwriter mode supported */
+void    sp_curve_screen();           /* If screenwriter mode supported */
+void sp_scan_curve_screen();
+void sp_vert_line_screen();
+void sp_end_contour_screen();
+boolean sp_end_char_screen();        /* If screenwriter mode supported */
+
+
+boolean sp_init_outline();        /* If only vector output mode supported */
+boolean sp_begin_char_outline();      /* If only vector output mode supported */
+void    sp_begin_sub_char_outline();  /* If only vector output mode supported */
+void    sp_begin_contour_outline();   /* If only vector output mode supported */
+void    sp_curve_outline();           /* If only vector output mode supported */
+void    sp_line_outline();            /* If only vector output mode supported */
+void    sp_end_contour_outline();     /* If only vector output mode supported */
+void    sp_end_sub_char_outline();    /* If only vector output mode supported */
+boolean sp_end_char_outline();        /* If only vector output mode supported */
+
+boolean sp_init_2d();       /* If screen-writer and other modes supported */
+boolean sp_begin_char_2d();     /* If screen-writer and other modes supported */
+void    sp_begin_contour_2d();  /* If screen-writer and other modes supported */
+void    sp_line_2d();           /* If screen-writer and other modes supported */
+boolean sp_end_char_2d();       /* If screen-writer and other modes supported */
+
+#endif
+
+
+
+#endif /* _SPEEDO_H_ */