/*
*               TeX Device Driver DVIOUT, DVIPRT で
*               書体倶楽部のアウトラインフォントを使う
*
*                            vfont.h
*
*	1991-92  by T.Minagawa
*	6 June 1992 : slightly modified to utilize tpic functions by Oh-Yeah?
*	1 Sept 1992 : slightly modified for version check by sempa.
*  12 Nov  1992 : modified for JGfont(3D-Bezier) by Naochan!
*  27 NOV  1992 : slightly modified for by Yakumo
*  14 Nov. 1993 : modified for TT font by I.Matsuda
*/

#define	VFN_VERSION	"2"	/* vfnのバージョンは整数部のみでチェック */
#define VER_LEN 4	/* versionチェックの文字列バッファの長さ */

typedef enum {
	V_FLUSH = -2, V_ERROR = -1, V_CLOSE = 0, V_OPEN = 1
} VF_FLAG;

/* check flag for vector font */
typedef enum {
	CLEAR_BUF, KEEP_BUF, GET_DATA
} GET_TEN_SW;

/* get_ten 用のフラグ */

#define MAX_VFONT 256 /* 登録できる vec font の最大数 */
#define NAMELEN 32	/* jfm file name 用バッファのサイズ */
#define MAX_VALUE 0x3ff	/* ベクトルフォント座標データの最大値
						 * 座標が10bitsで記述されているので、
						 * 0x3ff が最大値になる */
#define MAX_RANGE 0x400L
#define MAX_CODE 4417	/* ベクトルフォント文字コードの最大値 */
#define BUFSIZE 256	/* vfn file 読み取り用バッファのサイズ */
#ifdef VFTPIC
#define DEF_THIN 100	/* thin パラメータのデフォルト */
#else
#define DEF_THIN 50	/* thin パラメータのデフォルト */
#endif
#define	MAX_THIN 3
#define DELIM1 ','	/* vfn file の項目間区切り */
#define DELIM2 ';'	/* vfn file の項目内区切り */

#define VF_BUF_SIZE 256	/* ベクトルフォント展開用先読みバッファ*/
#define V_FONT struct _v_font

struct _v_font {
/*	char v_font_name[MAXPATH];	 vector font name     */
	char *v_font_name;			/* vector font name     */
	VF_FLAG status;	/* フォントファイルの状態を示す     */
	int v_fh[3];	/* 第１、第２水準のフォントファイル
					 * のファイルハンドル               */
	int yoffset;	/* 垂直方向オフセット               */
	int width_adj;	/* 幅のアジャスト */
	int height_adj;	/* 高さのアジャスト */
	int font_type;	/* フォントの種類 (ZS_FONT,JG_FONT,VFD_FONT) */
};

#if defined(USE_WINFONT) && !defined(_INC_WINDOWS)
# if 0 
typedef struct _FIXED {
    unsigned short fract;
    short value;
} FIXED;
# else
#define	FIXED int
# endif

typedef struct _MAT2 {
     FIXED  eM11;
     FIXED  eM12;
     FIXED  eM21;
     FIXED  eM22;
} MAT2;
#undef FIXED
#endif

#define V_JFM struct v_jfm

struct v_jfm {
	char name[NAMELEN];	/* JFM ファイルの名前              */
	int font_no;	/* 使用するベクトルフォントの番号          */
	int long_wide;	/* 長体、平体に関する情報                  */
	int slant;	/* 傾斜に関する情報                        */
	int draw_sw;	/* フォント描画方法選択のスイッチ          */
	int threshold;	/* 描画方法切り換えのしきい値              */
	int thin, _xfat, _yfat;	/* フォントの線幅調整パラメータ            */
	int far *novec;	/* vec font 不使用サイズリストへのポインタ */
	int rotation;	/* フォント回転フラグ                      */
	int f_goth;	/* 疑似ゴシックの変更 0:変更しない,1:標準,2:疑似ゴシック*/
	V_JFM *next;	/* 次のフォント情報へのポインタ            */
#ifdef	USE_WINFONT
	MAT2 mat;
#endif
};

/* 展開を標準モードで行なうか、fineモードで行なうかのフラグ */
typedef enum {
	STD_MODE, FINE_MODE
} DRAW_MODE;

/* 標準モードの場合の描画方法 */
typedef enum {
	VTRACE, FILL, BOTH
} DRAW_TYPE;

typedef struct {
	int x, y;
} LOCATE;

extern V_JFM *vjfm_top;
extern V_FONT *vfont[];
extern struct _v_font dummy;

#ifdef	USE_WINFONT
void GetWinjTTGlyph(V_JFM *, int, int, struct PREAMBLE_REC *, int, char *);
void GetWinjTTMetric(V_JFM *, int *, int *, char *);
V_JFM *check_wintt(char *);
V_JFM *get_vjfm(int);
#endif

#ifdef	USE_ETF
#define	ETF_VERSION		0
#define	ETF_SUBVER		5

typedef struct {
	FONT_INFO * font;
	unsigned int code;
	unsigned int tfm_width;
	unsigned int top;
	unsigned int end;
	unsigned int lsb;
} ETF_INFO;

typedef struct {
	int name;
	int resol;
	int type;
	int num;
	int Hoffset;
	int Coffset;
} FONT_INDEX;

void SetETFindex(FONT_INFO *, int, int, int, int, int);

extern BOOL f_make_etf;
extern BOOL f_make_jttetf;

#define ETF_IMAGE struct ETF_IMAGE_REC

struct ETF_IMAGE_REC {
	ETF_IMAGE *next;
	int flag;
	char image[2];
};

#define	ETT_FONT	struct ETT_FONT_REC

struct ETT_FONT_REC {
	int tfm_width;
	int tfm_height;
	int tfm_depth;

	short int unitsPerEm;
	short int xMin;
	short int yMin;

	short int extra;
	short int yoffset;

	short int width_adj;
	short int height_adj;

	short int f_goth;

	short int long_wide;
	short int slant;
	short int draw_sw;
	short int threshold;
	short int thin;
	short int _xfat;
	short int _yfat;
	short int rotation;
};
#endif

#define	CID	-2
