X-Git-Url: https://git.sesse.net/?p=rdpsrv;a=blobdiff_plain;f=Xserver%2Flib%2Ffont%2FSpeedo%2Fspeedo.h;fp=Xserver%2Flib%2Ffont%2FSpeedo%2Fspeedo.h;h=0000000000000000000000000000000000000000;hp=8c93afaa9391045b16a4a94c0b9f0f587006cd62;hb=ce66b81460e5353db09d45c02339d4583fbda255;hpb=7772d71ffd742cfc9b7ff214659d16c5bb56a391 diff --git a/Xserver/lib/font/Speedo/speedo.h b/Xserver/lib/font/Speedo/speedo.h deleted file mode 100644 index 8c93afa..0000000 --- a/Xserver/lib/font/Speedo/speedo.h +++ /dev/null @@ -1,1081 +0,0 @@ -/* $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 - -/***************************** 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_ */