#ifndef _SPEEDO_H_
#define _SPEEDO_H_
#include <X11/Xmd.h>
#include "useropt.h"
#ifndef INCL_CLIPPING
#define INCL_CLIPPING 0
#endif
#ifndef INCL_SQUEEZING
#define INCL_SQUEEZING 0
#endif
#ifndef INCL_EXT
#define INCL_EXT 1
#endif
#ifndef INCL_RULES
#define INCL_RULES 1
#endif
#ifndef INCL_BLACK
#define INCL_BLACK 1
#endif
#ifndef INCL_SCREEN
#define INCL_SCREEN 0
#endif
#ifndef INCL_OUTLINE
#define INCL_OUTLINE 0
#endif
#ifndef INCL_2D
#define INCL_2D 0
#endif
#ifndef INCL_USEROUT
#define INCL_USEROUT 0
#endif
#ifndef INCL_LCD
#define INCL_LCD 1
#endif
#ifndef INCL_ISW
#define INCL_ISW 0
#endif
#ifndef INCL_METRICS
#define INCL_METRICS 1
#endif
#ifndef INCL_KEYS
#define INCL_KEYS 0
#endif
#ifndef INCL_MULTIDEV
#define INCL_MULTIDEV 0
#endif
#ifndef SHORT_LISTS
#define SHORT_LISTS 1
#endif
#ifndef INCL_PLAID_OUT
#define INCL_PLAID_OUT 0
#endif
#ifndef FONTFAR
#define FONTFAR
#endif
#ifndef STACKFAR
#define STACKFAR
#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
#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
#ifndef FALSE
#define FALSE 0
#define TRUE 1
#endif
#ifndef NULL
#include <stddef.h>
#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
#define MAX_CONSTR 750
#define MAX_CTRL_ZONES 256
#define MAX_INT_ZONES 256
#else
#define MAX_CONSTR 512
#define MAX_CTRL_ZONES 64
#define MAX_INT_ZONES 64
#endif
#define SCALE_SHIFT 12
#define SCALE_RND 2048
#define ONE_SCALE 4096
#ifdef INCL_SCREEN
#define LEFT_INT 1
#define END_INT 2
#define FRACTION 0xFC
#endif
#if INCL_SQUEEZING || INCL_CLIPPING
#define EM_TOP 764
#define EM_BOT -236
#endif
#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
typedef
struct buff_tag
{
ufix8 FONTFAR *org;
ufix32 no_bytes;
}
buff_t;
typedef struct constr_tag
{
ufix8 FONTFAR *org;
ufix16 font_id;
fix15 xppo;
fix15 yppo;
boolean font_id_valid;
boolean data_valid;
boolean active;
}
constr_t;
typedef struct kern_tag
{
ufix8 FONTFAR *tkorg;
ufix8 FONTFAR *pkorg;
fix15 no_tracks;
fix15 no_pairs;
}
kern_t;
typedef struct specs_tag
{
buff_t STACKFAR *pfont;
fix31 xxmult;
fix31 xymult;
fix31 xoffset;
fix31 yxmult;
fix31 yymult;
fix31 yoffset;
ufix32 flags;
void *out_info;
}
specs_t;
typedef struct tcb_tag
{
fix15 xxmult;
fix15 xymult;
fix31 xoffset;
fix15 yxmult;
fix15 yymult;
fix31 yoffset;
fix15 xppo;
fix15 yppo;
fix15 xpos;
fix15 ypos;
ufix16 xtype;
ufix16 ytype;
ufix16 xmode;
ufix16 ymode;
fix15 mirror;
}
tcb_t;
typedef struct point_tag
{
fix15 x;
fix15 y;
}
point_t;
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
typedef ufix8 cdr_t;
#else
#define MAX_INTERCEPTS 1000
typedef ufix16 cdr_t;
#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];
#if INCL_RULES
fix15 pix[MAX_CTRL_ZONES];
fix15 mult[MAX_INT_ZONES];
fix31 offset[MAX_INT_ZONES];
#endif
} plaid_t;
#endif
#if INCL_MULTIDEV
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;
#endif
typedef struct speedo_global_data
{
#if INCL_METRICS
kern_t kern;
#endif
point_t Psw;
#if INCL_LCD
fix15 cb_offset;
#endif
point_t P0;
fix15 x_orus;
fix15 y_orus;
fix15 x_pix;
fix15 y_pix;
ufix8 x_int;
ufix8 y_int;
#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;
struct set_width_tag
{
fix31 x;
fix31 y;
} set_width;
boolean first_pass;
boolean extents_running;
fix15 x0_spxl;
fix15 y0_spxl;
fix15 y_pxl;
#if REENTRANT_ALLOC
intercepts_t STACKFAR *intercepts;
#else
fix15 car[MAX_INTERCEPTS];
cdr_t cdr[MAX_INTERCEPTS];
#if INCL_SCREEN
ufix8 inttype[MAX_INTERCEPTS];
ufix8 leftedge;
ufix16 fracpix;
#endif
#endif
fix15 bmap_xmin;
fix15 bmap_xmax;
fix15 bmap_ymin;
fix15 bmap_ymax;
fix15 no_y_lists;
fix15 first_offset;
fix15 next_offset;
boolean intercept_oflo;
#endif
fix15 xmin;
fix15 xmax;
fix15 ymin;
fix15 ymax;
#if INCL_2D
fix15 no_x_lists;
band_t x_band;
boolean x_scan_active;
#endif
ufix16 key32;
ufix8 key4;
ufix8 key6;
ufix8 key7;
ufix8 key8;
buff_t font;
buff_t GLOBALFAR *pfont;
fix31 font_buff_size;
ufix8 FONTFAR *pchar_dir;
fix15 first_char_idx;
fix15 no_chars_avail;
fix15 orus_per_em;
fix15 metric_resolution;
tcb_t tcb0;
boolean specs_valid;
fix15 depth_adj;
boolean curves_out;
fix15 output_mode;
fix15 thresh;
boolean normal;
fix15 multshift;
fix15 pixshift;
fix15 poshift;
fix15 mpshift;
fix31 multrnd;
fix15 pixrnd;
fix31 mprnd;
fix15 pixfix;
fix15 onepix;
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);
specs_t GLOBALFAR *pspecs;
specs_t specs;
ufix8 FONTFAR *font_org;
ufix8 FONTFAR *hdr2_org;
tcb_t tcb;
ufix8 Y_edge_org;
ufix8 Y_int_org;
fix31 rnd_xmin;
#if REENTRANT_ALLOC
plaid_t STACKFAR *plaid;
#else
fix15 orus[MAX_CTRL_ZONES];
#if INCL_RULES
fix15 pix[MAX_CTRL_ZONES];
fix15 mult[MAX_INT_ZONES];
fix31 offset[MAX_INT_ZONES];
#endif
#endif
fix15 no_X_orus;
fix15 no_Y_orus;
ufix16 Y_constr_org;
#if INCL_RULES
constr_t constr;
boolean c_act[MAX_CONSTR];
fix15 c_pix[MAX_CONSTR];
#endif
#if INCL_ISW
boolean import_setwidth_act;
boolean isw_modified_constants;
ufix32 imported_width;
fix15 isw_xmax;
#endif
#if INCL_SQUEEZING || INCL_ISW
fix15 setwidth_orus;
fix15 bbox_xmin_orus;
fix15 bbox_xmax_orus;
fix15 bbox_ymin_orus;
fix15 bbox_ymax_orus;
#endif
#ifdef INCL_SQUEEZING
boolean squeezing_compound;
#endif
#ifdef INCL_CLIPPING
fix31 clip_xmax;
fix31 clip_ymax;
fix31 clip_xmin;
fix31 clip_ymin;
#endif
} SPEEDO_GLOBALS;
#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
#define FH_FMVER 0
#define FH_FNTSZ 8
#define FH_FBFSZ 12
#define FH_CBFSZ 16
#define FH_HEDSZ 18
#define FH_FNTID 20
#define FH_SFVNR 22
#define FH_FNTNM 24
#define FH_MDATE 94
#define FH_LAYNM 104
#define FH_CPYRT 174
#define FH_NCHRL 252
#define FH_NCHRF 254
#define FH_FCHRF 256
#define FH_NKTKS 258
#define FH_NKPRS 260
#define FH_FLAGS 262
#define FH_CLFGS 263
#define FH_FAMCL 264
#define FH_FRMCL 265
#define FH_SFNTN 266
#define FH_SFACN 298
#define FH_FNTFM 314
#define FH_ITANG 328
#define FH_ORUPM 330
#define FH_WDWTH 332
#define FH_EMWTH 334
#define FH_ENWTH 336
#define FH_TNWTH 338
#define FH_FGWTH 340
#define FH_FXMIN 342
#define FH_FYMIN 344
#define FH_FXMAX 346
#define FH_FYMAX 348
#define FH_ULPOS 350
#define FH_ULTHK 352
#define FH_SMCTR 354
#define FH_DPSTR 360
#define FH_FNSTR 366
#define FH_ALSTR 372
#define FH_CMITR 378
#define FH_SNMTR 384
#define FH_SDNTR 390
#define FH_MNMTR 396
#define FH_MDNTR 402
#define FH_LNMTR 408
#define FH_LDNTR 414
#define SIZE_FW FH_LDNTR + 6
#define EXP_FH_METRES SIZE_FW
#define CURVES_OUT 0X0008
#define BOGUS_MODE 0X0010
#define CONSTR_OFF 0X0020
#define IMPORT_WIDTHS 0X0040
#define SQUEEZE_LEFT 0X0100
#define SQUEEZE_RIGHT 0X0200
#define SQUEEZE_TOP 0X0400
#define SQUEEZE_BOTTOM 0X0800
#define CLIP_LEFT 0X1000
#define CLIP_RIGHT 0X2000
#define CLIP_TOP 0X4000
#define CLIP_BOTTOM 0X8000
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
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
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);
#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
#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
#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
#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
#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
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);
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);
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
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
buff_t *sp_load_char_data(PROTO_DECL2 fix31 file_offset,fix15 no_bytes,fix15 cb_offset);
#endif
#if INCL_PLAID_OUT
void sp_record_xint(PROTO_DECL2 fix15 int_num);
void sp_record_yint(PROTO_DECL2 fix15 int_num);
void sp_begin_plaid_data(PROTO_DECL1);
void sp_begin_ctrl_zones(PROTO_DECL2 fix15, no_X_zones, fix15 no_Y_zones);
void sp_record_ctrl_zone(PROTO_DECL2 fix31 start, fix31 end, fix15 constr);
void sp_begin_int_zones(PROTO_DECL2 fix15 no_X_int_zones, fix15 no_Y_int_zones);
void sp_record_int_zone(PROTO_DECL2 fix31 start, fix31 end);
void sp_end_plaid_data(PROTO_DECL1);
#endif
#endif