/*

MercuryInstaller for MS-DOS Version 1.00a
共通ヘッダファイル

Copyright (c) 1994,95 Delmonta

*/

#if	!defined(LSI_C) || !defined(__STDIO_H)
	#include<stdio.h>	/* FILE型を使うため */
#endif
/*-----------------------------コンパイラの最適化----------------------------*/
#ifdef	LSI_C
	#pragma	optimize time
	#pragma	regalo		/* 変数をレジスタに割り付け               */
	#pragma	recursive	/* nonrecではauto変数の一部がstaticになる */
#endif
/*--------------------------------マクロ関数---------------------------------*/
#define	CEIL(a,b)	(((a)+(b)-1)/(b)) /* aをbで割って端数を切り上げる */
#define	MEMBERSOF(a)	(sizeof(a)/sizeof((a)[0]))	/* 配列の要素数 */
/*--------------------------------マクロ定数---------------------------------*/
#define	CON_XWIDTH		80			/* コンソールの桁数 */
#define	CON_YWIDTH		24			/* コンソールの行数 */
#define	CON_TABSIZE		8			/* タブの桁数(固定) */
#define	TITLEWIDTH		43			/* 作品名の文字数   */
#define	MAKEWIDTH		(CON_XWIDTH-TITLEWIDTH)	/* 作者名の文字数   */
#define	VERSION			"1.00α"		/* バージョン番号   */
/*------------------------コントロールコードを示す文字-----------------------*/
#define	FKEY_F1		0x101
#define	FKEY_F2		0x102
#define	FKEY_F3		0x103
#define	FKEY_F4		0x104
#define	FKEY_F5		0x105
#define	FKEY_F6		0x106
#define	FKEY_F7		0x107
#define	FKEY_F8		0x108
#define	FKEY_F9		0x109
#define	FKEY_F10	0x10a
#define	FKEY_F11	0x10b
#define	FKEY_F12	0x10c

#define	FKEY_UP		0x1e
#define	FKEY_DOWN	0x1f
#define	FKEY_RIGHT	0x1c
#define	FKEY_LEFT	'\b'	/* 98ではBSと左カーソルは同じコード */
#define	FKEY_INS	FKEY_F8
#define	FKEY_DEL	FKEY_F4

#define	FKEY_ESC	0x1b
#define	FKEY_CR		'\r'
#define	FKEY_BREAK	3
/*----------------------------型とグローバル変数-----------------------------*/
typedef	int		bool;
typedef	unsigned long	KEYWORD_T;

#ifdef	DEFGLOVAL
	#define	GLOVAL		/* ... */
	#define	DEFAULT(x) 	= x
#else
	#define	GLOVAL		extern
	#define	DEFAULT(x)	/* ... */
#endif

GLOVAL	char	Separators[] DEFAULT(" \t\n");
GLOVAL	char	DEFAULT_IDXFILENAME[] DEFAULT("helper.idx");
GLOVAL	struct	DATA
{
	char	far	*title;
	char	far	*make;
	char	far	*dir;
	char	far	*readme;
	char	far	*manual;

	struct COPYDATA_T
	{
		char	far		*string;
		int			isxcopy;
		struct COPYDATA_T far	*next;
	} far *copy;

	KEYWORD_T	keywords;
	struct DATA far	*next;
} far *Data DEFAULT(NULL);

GLOVAL	int	Datanum	DEFAULT(0);
GLOVAL	char	*Keyword[32];
GLOVAL	char	Keywordnum DEFAULT(0);
GLOVAL	char	Drive DEFAULT('\0');
GLOVAL	int	Flag_noignore DEFAULT(0);
GLOVAL	int	Flag_isfmesc DEFAULT(0);
/*---------------------------------_conio.c----------------------------------*/
int	ds_getch(void);
void	ds_ungetch(int c);
int	ds_kbhit(void);
int	ds_strinput(char *s,unsigned len);
/*--------------------------------diettsr.c----------------------------------*/
void	diet_init(void);
void	diet_setmode(bool mode);
/*--------------------------------idxfile.c----------------------------------*/
void	readidxfile(char *filename);
/*-------------------------------install.c-----------------------------------*/
void	installer(struct DATA far *data);
/*--------------------------------mcstdlib.c---------------------------------*/
int	far_fputs(char far *p,FILE *fp);
char	*strchop(char *s,size_t n);
int	putmessage(char *s,...);
void	showcursor(int f);
void far *far_sbrk(size_t size);
char far *far_strdup(const char far *s);
/*---------------------------------menu.c------------------------------------*/
void	menu(void);
/*------------------------------patternmatch.c-------------------------------*/
void	patternmatch_init(char *s);
int	patternmatch(char far *s);
/*---------------------------------start.c-----------------------------------*/
int	main(int argc,char **argv);
/*-------------------------------textviewer.c--------------------------------*/
void	textviewer(struct DATA far *data);
void	openwindow(int ysize,int xsize);
void	closewindow(void);
void	window_putstr(int ypos,char *format,...);
int	window_strinput(char *message,char *buf,unsigned len);
int	window_select(char *message,...);
/*---------------------------プログラムについて------------------------------*/
/* 　このプログラムは本来ならばcompactモデルで組むべきである。farポインタを  */
/* 非常に多用するので、smallモデルよりはよっぽどよい。しかし、現在私が使用し */
/* ているLSI C-86試食版はsmallモデル専用なので、仕方がない。わざわざ他の処理 */
/* 系(いちばん安いのはTurboCだろうがそれでもFM用はねえ･･･)を買うだけの経済的 */
/* 余裕も積極的理由もないのでね。                                            */
/*-----------------------------End of Mercury.h------------------------------*/
