/*
 *			TeX Device Driver dviout for Windows95/NT
 *							copyright by SHIMA, 1996
 *
 *	inter.h: Module between User interface of Win32API and Kernel
 *
 */

/*
					   主要な関数

  StartDviout();	// 初期化

  SetPara();		// 必要なパラメータをセット

	SetStartPage();	// 必要なら最初に開くページを定義

  OpenDvi();		// DVIァイルをオープンして、ページの情報などを読む

  ExpandPage();		// 指定されたページを展開
					// それに先立ち、ファイルのタイムスタンプをチェックし
					// タイムスタンプが変わった場合や、オプションに変更
					// があった場合、必要な再初期化がなされる

  MakeBMP();		// 展開したページから、表示用 DIB をヘッダ付きでメモ
					// リーに得る。
					// 細かい指定をするときは GetWindowBMP() を用いる。
					// 同じページを処理するときは、ExpandPage() をよぶ
					// 必要はない。

  free_bmp();		// DIB の メモリーの開放
					// これを呼ばない限り保持される
  ...
	SetPara();		// パラメータなどの変更
  ChgPage();		// 他のページへ
  ExpandPage();
  MakeBMP();
  ...
 */

#ifndef INC_INTER_H
#define INC_INTER_H

#ifndef	_INC_WINDOWS
typedef struct tagPOINT
{
	int x;
	int y;
} POINT;
#endif

#define	MAX_PATH	260

/* The following is used to define boxes for Searching a string 
/    and HyperTeX's references
/  Coordinates are used in Expanded bitmap page buffer (in ???dpi)
*/
struct S_BOX {
	short int base;
	short int x0;
	short int x1;
	short int y0;
	short int y1;
	short int dir;				/* TATE/YOKO and other reseved flags */
	union {
		char *href;				/* Hyper Reference */
		int	 found;				/* Reference to the pointer of DVI file */
	}sub;
};

/* The following is used to define the named tags refered by HyperTeX/source special
/   Coordinates are in expanded bitmap buffer
/   HyperTeX        *name : target name  (name[0] != 1 , 2);
/   Source special   name[0] = 1  YOKO,   = 2  TATE
/                    name[1]name[2]name[3]        = line number     (255)
					 name[4]name[5]name[6]name[7] = position in DVI (255)
/                    *(name+8) : source file name
*/
struct H_NAME {
	short int x;
	short int y;
	char *name;
};

#define	IsSRCspecial(x)	(x.name[0]==1||x.name[0]==2)

/* The following is used to recored the former pages where we have been
	 Ringed buffer of arrays of the structure of size MAX_H_HIST
*/
struct HyperHistory{
	int id;						/* ID of DVI file */
	short int page;
	short int x;
	short int y;
	short int flag;
};

/* This is a history of file, array of size MAX_F_HIST */
struct F_HIST {
	int	id;
	int page;
	char name[MAX_PATH];
};

/* This is a file menu, array of MAX_F_MENU */
struct F_FMENU {
	int page;
	char name[MAX_PATH+4];
};

/* ---------------------------------------------------------------------- */

/*			パラメータの設定		*/

void StartDviout(void);
/* 起動時に一回のみ呼ぶ初期化の関数 */

char *def_dvifile(int, char **, char *);

void *SetPara(char *para, int mode);
/* パラメータの設定と変更などを行う
// mode = 			 (option.h で定義されている）
//   SET_OPTION
//        オプションの定義（複数のオプションを同時指定可）
//
//   CHECK_OPTION
//		  そのオプションの構造体のアドレスを返す
//		  存在しない場合は NULL
//
//   CHECK_TOP
//		  オプション構造体の配列の先頭のポインタを返す
//
//   SHOW_DEFAULT
//        オプションの内容（含デフォルト値）を説明する文字列のポインタを返す
//
//   SHOW_OPTION
//        オプションの内容（含設定値）を説明する文字列のポインタを返す
//
//   SAVE_REG
//		  オプションの定義とRegistryへのSave（複数のオプションを同時指定可）
*/
enum {SHOW_DEFAULT, SHOW_OPTION, SET_OPTION, CHECK_OPTION, GET_TOP, SAVE_REG};

int KeepPara(int mode);
void SetParaFlag(char *opt, BOOL val);
BOOL GetParaFlag(char *opt);
BOOL GetParaFlagDefault(char *opt);
void SetParaString(char *opt, char *val);
int SetParaStringDirect(char *opt, char *val);
char *GetParaString(char *opt);
char *GetParaStringDefault(char *opt);
void SetParaInt(char *opt, int val);
int  GetParaInt(char *opt);
int  GetParaIntDefault(char *opt);
char *PrintAllPara(int mode);
char *GetParaAny(char *opt);

/*           ページの設定			*/

void SetStartPage(int num);
/*  別（or 最初）のDVIファイルを読む時のスタート･ページを設定する
//  十分大きな値は、最後のページを意味する
//  OpenDvi() で参照され、参照された後は 1 にリセットされる
*/

int  GetStartPage(void);
/*  上記で設定されたページを得る */

int	ChgPage(int page);
/*  次に ExpandPage() で展開するページを定義する(physical page)
//  十分に大きな値は、最後のページを意味する
//  別の DVI ファイルに変更すると、設定されていた値は無効になる
//  戻り値は設定したページ番号
*/

int GetTotalPage(void);
/*  現在のDVIファイルの全ページ数を返す */

int GetCurrentPage(void);
/*  現在のページ番号(physical)を返す */

int GetMaxNombrePage(void);
/*  最大の論理ページ番号を返す */

int TransPage(int page);
/*  ページ番号を logical なものに変換する */

int CheckPage(int page);
/*  ページ番号を、現実に存在する範囲に収めた値を返す */

int SearchPage(int page, int skip);
/*  logical なページ番号 page に対応するページを physical な skip ページ
//  以降から探し、見つかったらその physicalページ番号を返す
//  見つからなければ、0 を返す(skip = 0: 最初から順に探す)
*/

int IsHyperTag(void);
/*  current page に HyperTeX \special があるかどうかを調べる
//  return = -2: DVI ファイルがロードされていないか、HyperTeX を無視する
//               フラグ（F_H_IGNORE）が立っている
//           -1: HyperTeX \special が存在しない
//            0: 未チェック
//         >  0: 存在する。この値を nn とすると
//				 h_box[h_box[nn].x0],...,
//					h_box[h_box[nn].x0 + h_box[nn].y0 - 1]   : href の Box
//               h_name[h_box[nn].x1],...,
//					h_name[h_box[nn].x1 + h_name[nn].y1 - 1] : name の Box
*/

/*			サイズ関連			*/

int GetTextXSize(void);
/*  展開したページの横のサイズを返す（PIXEL） */

int GetTextYSize(void);
/*  展開したページの縦のサイズを返す（PIXEL） */

int GetBufXSize(void);
/*  展開用ページバッファの横のサイズを返す（PIXEL） */

int GetBufYSize(void);
/*  展開用ページバッファの縦のサイズを返す（PIXEL） */

int GetXDpi(void);
/*  横方向の解像度の dpi の値を返す */

int GetYDpi(void);
/*  縦方向の解像度の dpi の値を返す */

void ReSetDpi(void);
/*  縦横の dpi をリセットする */

int GetMaginification(void);
/*  Magnification の値を返す */

int SetGamma(int num);
/*	num > 0:  Gray Scale 時のガンマ補正のパラメータを num/1000 に設定
//  num < 0:  反転 Gray Scale で、ガンマ補正のパラメータを -num/1000 に設定
//  num = 0:  変更なし
//  return :  設定値
//            SetGamma(0); で現在の設定値がわかる
*/

char *GetOpenName(void);

int SetBright(void);
/*  bright を変えたときに呼ぶ
//  return bright
*/

void SetBMP(void);
/*  BMP を変えたときに呼ぶ */

void SetXYGray(int xscale, int yscale);
/*  Gray Scale における横と縦方向の縮小倍率を設定する
//  但し、xscale <= 0 は、横方向の縮小倍率を変更しないことを意味する
//  また、yscale = 0 は、縦方向を横方向と同じ縮小率にすることを意味する
//  yscale < 0 は、縦方向の縮小倍率を変更しないことを意味する
*/

int GetXGray(void);
/*  横方向の縮小倍率を返す */

int GetYGray(void);
/*  縦方向の縮小倍率を返す */

int SetColor(int color);
/*  圧縮時の色のビット数を設定する
//  color = 4:  16色モード
//        = 8: 256色モード
//          上記以外は、現状を維持
//  返す値は、設定値
*/

/*	 ページの展開および Gray Scale DIB への変換	*/

int OpenDvi(char *fname);
/*  fname というファイル名の DVIファイルを読み込んで、ページ情報などを
//  得て SetStartPage() で指定したページを最初に展開するページに設定する
//  return: 総ページ数を返す
//          -1 は、DVIファイルのオープンに失敗したことを表す
//          この失敗の場合、読んでいた DVIファイルがあれば、それは保持される
*/

char *GetFTime(void);
/*  現在表示している dviファイルのタイムスタンプを得る
*/

int CheckRenew(int wait);
/* タイムスタンプが変更されたどうか調べる
//  0: open できない
//  1: 変更された
// -1: 変わっていない
// -2: 変更中かおかしい
*/

void ExpandPage(void);
void ExpandPage0(void);
/*  DVIファイルに何らかの変更があった場合や、パラメータが変更された場合
//  それぞれに応じて設定をやり直し、そのあと指定したページを展開する
//  設定のやり直しが行われない限り、展開される場所はメモリー上で同じ位置
//  を占めるので、一度に一つしか保持できない。
*/

char *MakeBMP(void);
/*  展開されたページを、必要なら gray scale にして縮小し、DIB 形式でメモ
//  リに展開して返す。メモリは新たに確保されるので、不要になったら呼び出
//  した側が free_bmp() で開放する。
*/

char *GetWindowBMP(int x, int y, int width, int height, int xdiv, int ydiv,
	unsigned char *buf);
/*  上と同じだが、ページの一部を切り出して DIB 形式に変換する。
//
//  切り出し位置などは、圧縮前の PIXEL 単位で指定する。左上を原点として
//  (x,y) が切り出す矩形の左上の座標
//  width x height が切り出す大きさ
//  xdvi, ydiv が、それぞれ横方向、縦方向の縮小倍率
//
//    x + width, y + height がページの範囲に収まらない場合は、width, 
//    height がそれぞれ切りつめられる。
//
//    xdiv = 0: デフォルトの横方向縮小倍率が用いられる
//    xdiv < 0: 縮小しないが、16色または256色モードの DIB 形式にする
//              ydiv は無視（将来のため、0 とする）
//    ydiv = 0: デフォルトの縦方向縮小倍率が用いられる
//    ydiv < 0: ydiv は、xdiv に等しい
//
//  圧縮が行われるときは、gray scale になる（16色モードの DIB）
//  圧縮が行われないときは、2色モードの DIB
*/

void free_bmp(unsigned char *);
/*  ページを変換して得られたメモリー上の DIB が不要になれば、この関数で
//  メモリーを解放する
*/

char *GetBMPdata(int num, int *x_pos, int *y_pos, int *x_size, int *y_size, 
	int *type);


void ClearKeepBMP(void);
void FreeBMPdata(void);
void AllFree(void);

int ToDviDir(void);
/* dvi file のディレクトリを、カレントにする。 */
/* -------------------------------------------------------------------- */
		/* 文字列サーチ と HyperTeX */

/* flag used by  mode  in FillBox() and ColorS_Box() */
#define	F_B_BUFXY		1		/* ignored by ColorS_Box() */
#define	F_B_BOUNDARY	2
#define	F_B_SET			4
#define	F_B_REV			8

/* color used by  mode  in FillBox() and ColorS_Box() */
#define	F_B_ERACE		0x00
#define	F_B_SECRET		0x70
#define	F_B_YELLOW		0x10
#define	F_B_PURPLE		0x20
#define	F_B_RED			0x30
#define	F_B_SKY			0x40
#define	F_B_BLUE		0x50
#define	F_B_GREEN		0x60
#define	F_B_BLACKC		0x80
#define	F_B_BLUEC		0x90
#define	F_B_GREENC		0xa0
#define	F_B_SKYC		0xb0
#define	F_B_REDC		0xc0
#define	F_B_PURPLEC		0xd0
#define	F_B_YELLOWC		0xe0
#define	F_B_WHITEC		0xf0

/* flag used by  mode  in ColorS_Box() */
#define	F_CB_ULINE		0x8000
#define	F_CB_UULINE		0x9000
#define	F_CB_OLINE		0xa000
#define	F_CB_LLINE		0xc000

BOOL FillBox(unsigned char *pDib, int x1, int y1, int x2, int y2, 
	unsigned char mode);
/*   Draw a colored box in (256 color) BMP
//	(x1,y1)-(x2,y2)		 : coordintes of diagonal vertices of the box
//  					   (0,0) is the left upper corner
//  draw a (part of) box within the BMP
//
//  mode & 0xf0 = 0      : Erace the color
//
//	mode & 0x01 = 0      : coordinates are in BMP
//                1      : coordinates are in the original page buffer
//
//  mode & 0x02 = 0      : fill box
//                2      : draw boundary
//
//  mode & 0x0c = 0      : or  color
//                4      : set color
//				  8      : reverse  (ignore : mode & 0xf0)
//
//  mode & 0x80 = 0      : background
//                0x80   : forground
//
//  mode & 0xf0 = 
//       color box (with gray characters in black)
//		   0x00: original          0x10: yellow box      0x20: purple box
//         0x30: red box           0x40: light blue box  0x50: blue box
//         0x60: green box         0x70: black box
//
//       color characters (gray scaled with a white background)
//         0x80: black char        0x90: blue char       0xa0: green char
//         0xb0: light blue char   0xc0: red char        0xd0: purple char
//         0xe0: yellow char       0xf0: while char
//
*/

void ColorS_Box(unsigned char *pDib, struct S_BOX *box, int mode);
/* struct S_BOX *box に基づき 256色モードBMP に色をつける
//
// mode & 0xfe       : FillBox の mode に対応
// mode & 0x8000 = 0 : box 全体、または、その中の文字、または枠に色をつける
// mode & 0x8000 = 0x8000  この時は色付きの線を引く（通常、mode & 0x80 = 0x80）
//    さらに
//       (mode & 0x4000)? : 縦書きのとき、線を右側にする？
//       (mode & 0x2000)? : 横書きのとき、アンダーラインでなくオーバーライン？
//       (mode & 0x1000)? : 横書きのとき、アンダーラインを下部に？
// mode & 0x10000 = 0x10000 : 線を引き、文字の色づけもする（color boxの色指定）
*/

int CheckS_Box(struct S_BOX *box, int x, int y);
/*  Check if    (x,y) is contained in Box
//  return  0:  (x,y) is contained in Box
//          1:  (x,y) is located after the Box
//         -1:  (x,y) is located before the Box
//   (x,y) is a coordinate in Buffer
*/

		/* HyperTeX */

extern struct S_BOX *h_box;			/* <a href="..."> ... </a>	*/
extern struct H_NAME *h_name;		/* <a name="...">			*/
extern char *hypertag;				/* used by SetHyperTag()	*/

extern  int f_hyper;
#define	F_H_IGNORE			0x001	/* ignore HyperTeX specials */
#define F_H_DIRECT			0x002	/* jump directly outer HyperTeX href */

/* used as internal flags */
#define	F_H_SKIP			0x004	/* skip expanding HT specials */
#define	F_H_BOX				0x008	/* within HyperTeX specials */
#define	F_H_SEARCH			0x100	/* search HyperTeX tag name */
#define	F_H_DVIOPEN			0x200	/* HyperJump after opening DVI */
#define F_H_CURRENTPAGE		0x400	/* found tag on the current page */

int SearchH_Name(char *name);
/*  Search HyperJump tag name (begining with '#') in the current DVI file
//  return    : the page containing the tag name
//              current page is changed to the page and ExpandPage();
//         < 0: not exist and current page is not changed
*/

int GetH_NamePos(POINT *pt, char *name);
/*  Get (pt.x, pt.y) in Buffer for a given HyperJump tag name
//  return :1  exist
//         :0  not exist
*/

void SetHyperTag(char *name);
/*  Define href *name for HyperJump before the target DVI file will be opened */

int CheckHrefDvi(char *href, char *name);
/* Check if href is a local DVI file (i.e. <a href="file:...#...">)
// Set DVI file name in *name (resolving PATH relative to the current DVI
//  file) and SetHyperTag()
//  return: 5    	file: local DVI
//			4		file: local other file(safe)
//			3		file: local other file(no extension)
//			2		file: local other file(execute)
//          1   	file: not found
//			0		others
*/

	/* Search string */

extern unsigned int f_s_dpi;
extern struct S_BOX *s_box;
extern int	s_box_pt;
extern unsigned int f_s_search;		/* 1: word search in a page
									-> 1: not exist
									-> 0: exist and the page is expanded */

extern unsigned int f_s_flags;
#define	F_S_NOCASE			1		/* ignore case for alphabetical word */
#define	F_S_WORD			2		/* guess boundaries of words */

/* used as internal flags */
#define	F_S_ALPHA			0x1000	/* alphabetical word */

void SetSearchStr(unsigned char *string);
/* string のサーチをセットする。f_s_search = 1 と設定される。
// 必要ならページを変更して ExpandPage() を実行すると、文字列がサーチされる。
//   実行の結果は：
// f_s_search = 1, s_box_pt = 0:			not found
//      他のページを探すときは、ページ変更して ExpandPage() を実行
//      取りやめるときは、f_s_search = 0 と変更する。
// f_s_search = 0, s_box_pt = 見つかった数:	found
//      s_box[0],...,s_box[s_box_pt - 1] が、見つかった位置
//      他のページを探すときは、f_s_search = 1, ExapndPage() を実行
*/

BOOL IsSetSearchStr(void);
/* string のサーチをセット済みか？
//
*/

int GetSearchLoc(int);

int IsTopSearchBox(int pos);
/*  Check if s_box[pos] for SearchString() corresponds to the top of string
*/

void PickUpString(int, int, int);
/* ---------------------------------------------------------------------- */
		/* History of previewed pages and DVI files */

#define	MAX_H_HIST	32	/* History of pages */
#define	MAX_F_HIST	16	/* History of files, should be an integer power of 2 */
#define	MAX_F_KEEP	16	/* History of files kept in a disk */
#define	MAX_F_MENU	9	/* files in a menu */
#define	PAGE_MARK	MAX_H_HIST
#define	RANGE_MARK	(MAX_H_HIST+1)
#define	F_HIST_EXT	"rec"
#define	F_LOG_EXT	"log"

extern struct HyperHistory h_hist[];
extern int h_hist_n;
extern int h_hist_pt;
extern int id_dvi;
extern int id_page;
extern int id_current_macro;

extern struct F_HIST f_hist[];
extern int f_hist_pt, f_hist0;
extern struct F_FMENU f_fmenu[];
extern char current_name[];
extern char *current_name_pt;

void WriteHistory(char *fname);
/* write the information of previewed DVI files in a FILE */

void ReadHistory(char *fname);
/* read the information of previewed DVI files from a FILE */

char *GetOutPath(char *ext);
/* get path name of the file with extension *ext */

char *GetHelpPath(void);

char *SearchFileHistory(char *fname, int *page);
/* Search dvi file *fname (allowed to be only filename without directory)
//  in File History and return full path name and set *page
// If not found, return NULL
*/

#define	HIST_ID_STR	"hist0"	/* ID in the file with the above information */

/* ------------------------------------------------------------------- */
/* Extra functions : See the Definitions */

char *GotoPage(int page);
/*  ページを移動して、そのページを展開し、内容を DIB 形式に変換してその
//  アドレスを返す。現在と同じページ、あるいは失敗の場合 NULL を返す。
//  ExpandPage(), MakeBMP() が内部で呼ばれる。
*/

int  ChgGray(int dif, int end);
char *GrayReverse(void);
char *nextpage(int num);
char *Blacker(void);
char *Whiter(void);
int  GetMagnification(void);

void ShowParameter(void);
void ShowBuffer(void);
void ShowInformation(void);
char *GetMessagePtr(void);
void ResetMessagePtr(void);

void GuessFont(char *, char *, char *, int);
BOOL AskYes(char *, char *);

#ifdef	RAWOUT
void PrintRaw(int, char **);
#endif

int  WinMinExecute(char **, int, BOOL);

extern char common_work[];

enum {
	SIZE_USR,
	SIZE_A3,
	SIZE_A4,
	SIZE_A5,
	SIZE_A6,
	SIZE_A7,
	SIZE_E3,
	SIZE_E4,
	SIZE_E5,
	SIZE_E6,
	SIZE_B3,
	SIZE_B4,
	SIZE_B5,
	SIZE_B6,
	SIZE_J1,
	SIZE_J2,
	SIZE_J3,
	SIZE_J4,
	SIZE_LEGAL,
	SIZE_GOVLEGAL,
	SIZE_LETTER,
	SIZE_HALFLETTER,
	SIZE_GOVLETTER,
	SIZE_EXECUTIVE,
	SIZE_PCARD,
	SIZE_SVGA,
	SIZE_XGA,
	SIZE_SXGA,
	SIZE_UVGA
};

extern int paper_type;
extern BOOL f_rotate;		/* TRUE if Landscape */
extern BOOL f_spcolor;
extern int f_rpcolor;
extern int f_ucolor;
extern int f_bcolor;
extern int f_b_bcolor;
extern int f_ccolor;
extern int bmp_pt;
extern char *option_str[];
extern int f_spsh;

#define	MAX_SCALE 4
typedef struct tagSCALE {
	short int x;
	short int y;
	short int gamma;
} SCALE;


#define	FCASH_VERSION	2
extern int f_path_cash;
extern int fcash_size;
extern int fcash_rev;
extern int fcash_ver;
extern int fcash_dev;
extern unsigned char *path_cash;
extern unsigned char *path_font;
extern BOOL f_fkeep;

extern char ptex_d;
extern BOOL f_ttout;
extern BOOL f_English;
extern int bright;
extern char *exec_para;
extern BOOL f_dvioutspecial;
extern BOOL f_srcspecial;
extern BOOL f_hypertex;
extern BOOL b_presentation_mode;
extern BOOL f_Expand;
extern BOOL f_use_etf;
extern int  f_FIT;

#define SM_LOG		0x1000				/* 4 */
#define	SM_ABREIG	(SM_LOG|1)			/* 0 */
#define	SM_OKEXIT	(SM_LOG|2)			/* 1 */
#define	SM_OKCONT	3					/* 3 */
#define	SM_EDIT		4					/* 2 */
#define	SM_EDITLOG	(SM_LOG|SM_EDIT)
#define	SM_OKLOG	(SM_LOF|SM_OKLOG)	/* 5 */
#define	SM_NOEDIT	6
#define	SM_YESNO	(SM_LOG|7)			/* 7 */

#define	WRONG_INT	0x1234fedc

#define	WMF			1
#define	F_WMF		(-16)
#define	F_EMF		(-17)
#define	F_BMP		(-18)

#define	F_ODD2EVEN	1
#define	F_2PAGE		2
#define	F_2DIB2		4
#define	F_2REV		8
#define	F_2VERT		0x10
#define	F_MPAGE		0x1000
#define	F_16PAGE	0x2000

#define	IS_ODD2EVEN	(f_2page&F_ODD2EVEN)	/* (ODD, EVEN)? */
#define	IS_2HORI	(f_2page&F_2PAGE)
#define	IS_2DIB2	(f_2page&F_2DIB2)		/* pDib2 is the former? */
#define	IS_2REV		(f_2page&F_2REV)
#define	IS_2VERT	(f_2page&F_2VERT)
#define	IS_2PAGE	(f_2page&(F_2PAGE|F_2VERT))
#define	IS_MPAGE	(f_2page&F_MPAGE)
#define	IS_16PAGE	(f_2page&F_16PAGE)

#define	F_DTHICK	8

void Free(void *);
void Free0(void *);
char *dup_string(char *);
int view_warning(int);
BOOL ChangeColor(unsigned char *, int);
void KeepPathCash(char *, int);
int get_path_cash(void);
void keep_font_path(void);
int ShowMessage(char *, char *, int);
void ShowPickedString(char *, char *);
BOOL IsJapanese(void);
void get_windows_directory(char *);
void sleep0(int);
void ReSetMetric(void);
void FlushPathCash(void);
int  AddKeepBMP(int);
unsigned char *PageDup(void);
void DisplayBMP(unsigned char*, int, int, int, int, int);
void jis2sjis(int *, int *);
BOOL WinWriteRule(int, int, int, int, int);
void WriteTTRule(int, int, int, int, int);
void TTBMPOut(int);
int get_rot_matrix(int);
BOOL IsAllTT(void);
int strsubcmp(char *, char *);
BOOL kpse_search(char *, char *);
unsigned short jistojms(unsigned short);
void touch(void);
BOOL SetPath(char *, char *);
int my_access(char *, int);
void ExecPrint(char *);
void Page2EMF(char *);
void ChooseTar(void);
int  DoMacro(char *, enum tagMACROMODE);
BOOL ExecMacro(int);
void InitMenuItems(void);
char *MareaPara(char *, int);
void GetPaperSize100(int *, int *);
void PostClearMacro(void);
void InitializeParameter(void);
int GetBackGround(void);
char *GetDPos2Source(unsigned int, int*);
char *GetWPos2Source(POINT *, int *);
char *GetNextSource(int, int *);
char *GetAddFile(char *);
void ResetFile(void);
void ClearFont(void);
void GetModuleName(char *);
void FreeETF(void);
char *LoadETF(char *);
void MessagePage(int);
void DisplayMessage(char *);
void ClearhBitmap(void);
void GSPN(char *, char *);
char *GetCommandResult(char *, int);
int GetNamePos(char *);
char *Language(int);
BOOL IsTopChar(char *, char *t);
int kpse_find(char *, char *, char *);
void TempMessage(char *, int);
#ifdef	UNIX
#define	StrStr(x,y)	strstr(s,y)
#define	chg_pathsep(x,y)
#else
char *StrStr(char *, char *);
void chg_pathsep(unsigned char *, char);
#endif
void SimplifyFname(char *);
void EditFile(char *);
char *GetFigurePath(int, int, int);
BOOL ToGSource(char *);
int CheckParaFile(char *fname, char *ask);
POINT GetCoverPos( void );
void SetCoverPos( int x, int y );
void SetCoverXPos( int x );
void SetCoverYPos( int y );
#endif // INC_INTER_H
