windows-nt/Source/XPSP1/NT/shell/osshell/fontfldr/fontext/t1instal/ttprog.h
2020-09-26 16:20:57 +08:00

494 lines
11 KiB
C

/**
** Description:
** This is a module of the T1 to TT font converter. This is a
** sub-module of Hint module. This modules deals with the
** the font program fo the font.
**
** Author: Michael Jansson
**
** Created: 8/24/93
**
***/
#ifndef _ARGS
# define IN const
# define OUT
# define INOUT
# define _ARGS(arg) arg
#endif
#define HIBYTE(v) (UBYTE)((USHORT)(v)>>8)
#define LOBYTE(v) (UBYTE)((USHORT)(v)&0xff)
#define TWILIGHT 0
#define GLYPHZONE 1
#define TMPCVT 0L
#define TMPPNT 0L
#define TMPPNT1 1L
#define STORAGE_DIAG 3
#define ONEPIXEL 64L
#define INFINITY (USHORT)SHRT_MAX
#define MAXPTS 10 /* Max num of pts on a stem hint side. */
/* IP bucket - Used for collecting points that should be
interpolated within the zones defined by the stem hints. */
typedef struct Extremas {
short rp1;
short rp2;
short n;
short pts[MAXPTS];
} Extremas;
enum aligntype {
at_side1,
at_side2,
at_relative1,
at_relative2,
at_centered
};
/***
**
** Description:
** This file contains op-codes for a sub-set of the
** TrueType instruction set.
**
** Author: Michael Jansson
**
** Created: 10/14/93
**
***/
/* TrueType sub-op codes. */
#define SUBOP_Y 0x00
#define SUBOP_X 0x01
#define SUBOP_R 0x01
#define SUBOP_MOVE 0x10
#define SUBOP_MINDIST 0x08
#define SUBOP_ROUND 0x04
#define SUBOP_GRAY 0x00
#define SUBOP_mMRGR SUBOP_MINDIST | SUBOP_ROUND | SUBOP_GRAY
#define SUBOP_MmRGR SUBOP_MOVE | SUBOP_ROUND | SUBOP_GRAY
/* TrueType op codes. */
enum {
op_mps = 0x4c,
op_spvtl = 0x07,
op_roll = 0x8a,
op_gteq = 0x53,
op_cindex = 0x25,
op_rtdg = 0x3d,
op_clear = 0x22,
op_szp0 = 0x13,
op_szp1 = 0x14,
op_szp2 = 0x15,
op_szps = 0x16,
op_loopcall = 0x2a,
op_shz = 0x36,
op_smd = 0x1a,
op_rutg = 0x7c,
op_rdtg = 0x7d,
op_pop = 0x21,
op_abs = 0x64,
op_scvtci = 0x1d,
op_rs = 0x43,
op_spvfs = 0x0a,
op_shp = 0x33,
op_roff = 0x7a,
op_md = 0x49,
op_ssw = 0x1f,
op_mul = 0x63,
op_odd = 0x56,
op_gc = 0x46,
op_dup = 0x20,
op_min = 0x8c,
op_max = 0x8b,
op_neg = 0x65,
op_sfvtl = 0x08,
op_spvtca = 0x06,
op_swap = 0x23,
op_mdrp = 0xc0,
op_mdap = 0x2e,
op_miap = 0x3e,
op_mirp = 0xe0,
op_alignrp = 0x3c,
op_iup = 0x30,
op_svcta = 0x00,
op_sloop = 0x17,
op_npushb = 0x40,
op_npushw = 0x41,
op_mppem = 0x4b,
op_lt = 0x50,
op_gt = 0x52,
op_if = 0x58,
op_scfs = 0x48,
op_else = 0x1b,
op_wcvtf = 0x70,
op_wcvtp = 0x44,
op_pushw1 = 0xb8,
op_pushb1 = 0xb0,
op_eif = 0x59,
op_shpix = 0x38,
op_srp0 = 0x10,
op_srp1 = 0x11,
op_srp2 = 0x12,
op_ip = 0x39,
op_rcvt = 0x45,
op_round = 0x68,
op_rtg = 0x18,
op_rthg = 0x19,
op_add = 0x60,
op_div = 0x62,
op_scanctrl = 0x85,
op_ws = 0x42,
op_sswci = 0x1e,
op_scantype = 0x8d,
op_sub = 0x61,
op_fdef = 0x2c,
op_endf = 0x2d,
op_call = 0x2b,
op_getinfo = 0x88
};
/***
** Function: GetTopPos
**
** Description:
** This function allocates a cvt entry for the
** top side of a horizontal stem;
***/
short GetTopPos _ARGS((IN Blues *blues,
INOUT AlignmentControl *align,
IN funit pos));
/***
** Function: GetBottomPos
**
** Description:
** This function allocates a cvt entry for the
** top side of a horizontal stem;
***/
short GetBottomPos _ARGS((IN Blues *blues,
INOUT AlignmentControl *align,
IN funit pos));
/***
** Function: CutInSize
**
** Description:
** This function computes the cut in size
** of a stem, given a master width and the
** width of the stem. This is done with the
** StdVW==2.0 pixel treshold and the thinn
** and wide cut in values.
***/
USHORT CutInSize _ARGS((IN funit width,
IN funit master,
IN USHORT tresh,
IN funit upem));
/***
** Function: SnapStemArgs
**
** Description:
**
***/
USHORT SnapStemArgs _ARGS((OUT short *args,
INOUT USHORT ta,
IN funit width,
IN USHORT std_cvt,
IN USHORT snap_cvt,
IN USHORT std_ci,
IN USHORT snap_ci,
IN USHORT storage));
/***
** Function: StdStemArgs
**
** Description:
**
***/
USHORT StdStemArgs _ARGS((OUT short *args,
INOUT USHORT ta,
IN funit width,
IN USHORT std_cvt,
IN USHORT std_ci,
IN USHORT storage));
/***
** Function: CreateStdStems
**
** Description:
**
***/
USHORT CreateStdStems _ARGS((INOUT UBYTE *prep,
INOUT USHORT tp,
IN short cnt));
/***
** Function: CreateSnapStems
**
** Description:
**
***/
USHORT CreateSnapStems _ARGS((INOUT UBYTE *prep,
INOUT USHORT tp,
IN short cnt));
/***
** Function: tt_GetFontProg
**
** Description:
** This function returns the static font
** font program.
***/
const UBYTE *tt_GetFontProg _ARGS((void));
/***
** Function: tt_GetNumFuns
**
** Description:
** This function returns the number of functions
** defined in the static font program.
***/
USHORT tt_GetNumFuns _ARGS((void));
/***
** Function: tt_GetFontProgSize
**
** Description:
** This function returns the size of the
** static font program.
***/
USHORT tt_GetFontProgSize _ARGS((void));
/***
** Function: SetZone
**
** Description:
** This function initiate an alignment zone
** by creating an appropriate point in the
** twilight zone.
***/
USHORT SetZone _ARGS((INOUT UBYTE *prep,
INOUT USHORT tp,
IN short cvt));
/***
** Function: CopyZone
**
** Description:
** This function copies a cvt entry, representing an
** alignment zone, to the cvt used for a particular hstem.
***/
USHORT CopyZone _ARGS((INOUT UBYTE *prep,
INOUT short tp,
INOUT short *args,
IN short ta));
/***
** Function: CopyFamilyBlue
**
** Description:
** This function copies a cvt entry, representing a
** family blue zone, to the cvt used for a particular hstem.
***/
USHORT CopyFamilyBlue _ARGS((INOUT UBYTE *prep,
INOUT short tp,
INOUT short *args,
IN short ta));
/***
** Function: AlignFlat
**
** Description:
** This function creates a cvt entry for
** a particular hstem.
***/
USHORT AlignFlat _ARGS((INOUT UBYTE *prep,
INOUT short tp,
INOUT short *args,
IN short ta));
/***
** Function: AlignOvershoot
**
** Description:
** This function creates a cvt entry for
** a particular hstem.
***/
USHORT AlignOvershoot _ARGS((INOUT UBYTE *prep,
INOUT short tp,
INOUT short *args,
IN short ta));
/***
** Function: EmitFlex
**
** Description:
** Convert a T1 flex hint into a TrueType IP[]
** intruction sequence that will reduce a flex
** that is flatter than a given height.
***/
errcode EmitFlex _ARGS((INOUT short *args,
INOUT short *pcd,
IN funit height,
IN short start,
IN short mid,
IN short last));
/***
** Function: ReduceDiagonals
**
** Description:
** This function generates the TT instructions
** that will shrink the outline, in order to
** control the width of diagonals. This implementation
** can probably be improved.
***/
short ReduceDiagonals _ARGS((IN Outline *paths,
INOUT UBYTE *pgm,
INOUT short *pc,
INOUT short *args,
INOUT short *pcd));
/***
** Function: ScaleDown3
**
** Description:
** This function generates the TT instructions
** that will scale down points 3%.
***/
void ScaleDown3 _ARGS((IN Extremas *extr,
IN short xcnt,
INOUT UBYTE *pgm,
INOUT short *pc,
INOUT short *args,
INOUT short *pcd));
/***
** Function: EmitIP
**
** Description:
** This function generates the TT instructions
** that will interpolate points that are either
** within or between stem sides.
***/
void EmitIP _ARGS((IN Extremas *extr,
IN short xcnt,
INOUT UBYTE *pgm,
INOUT short *pc,
INOUT short *args,
INOUT short *pcd,
IN short scale3offset));
/***
** Function: EmitVerticalStem
**
** Description:
** This function generates the code that
** will initiate the graphics state of the
** TrueType interpreter for the grid fitting
** of vertical stems.
***/
void EmitVerticalStems _ARGS((INOUT UBYTE *pgm,
INOUT short *pc,
INOUT short *args,
INOUT short *pcd));
/***
** Function: EmitHorizontalStem
**
** Description:
** This function generates the code that
** will initiate the graphics state of the
** TrueType interpreter for the grid fitting
** of vertical stems.
***/
void EmitHorizontalStems _ARGS((INOUT UBYTE *pgm,
INOUT short *pc,
INOUT short *args,
INOUT short *pcd));
/***
** Function: EmitVStem
**
** Description:
** This function generates the code that
** will create and grid fit points in the
** twilight zone, corresponding to a vstem.
***/
errcode EmitVStem _ARGS((INOUT UBYTE *pgm,
INOUT short *pc,
INOUT short *args,
INOUT short *pcd,
INOUT struct T1Metrics *t1m,
IN funit width,
IN funit real_side1,
IN funit real_side2,
IN funit side1,
IN funit side2,
IN short rp,
IN enum aligntype align,
IN short ref));
/***
** Function: EmitHStem
**
** Description:
** This function generates the code that
** will create and grid fit points in the
** twilight zone, corresponding to a hstem.
***/
errcode EmitHStem _ARGS((INOUT UBYTE *pgm,
INOUT short *pc,
INOUT short *args,
INOUT short *pcd,
INOUT struct T1Metrics *t1m,
IN funit width,
IN funit side1,
IN funit side2,
IN short rp,
IN enum aligntype align,
IN short ref));
/***
** Function: FamilyCutIn
**
** Description:
** This function generates a branch in the
** pre-program.
***/
USHORT FamilyCutIn _ARGS((INOUT UBYTE *pgm,
INOUT USHORT tp,
IN short cis));
/***
** Function: SetProjection
**
** Description:
** This function generates the TrueType code that
** changes the projection vector in oblique typefaces.
***/
void SetProjection _ARGS((INOUT UBYTE *pgm,
INOUT short *pc,
INOUT short *args,
INOUT short *pcd,
IN funit x,
IN funit y));
/***
** Function: AssembleArgs
**
** Description:
** This function takes a sequence of arguments and
** assembles them into a sequence of PUSHB1[], PUSHW1[],
** NPUSHB[] and NPUSHW[] instructions.
***/
void AssembleArgs _ARGS((INOUT short *args,
IN short pcd,
OUT UBYTE *is,
INOUT short *cnt));