/*
	usrlib.h
*/

typedef	struct {
	int		x,y;
	int		dx,dy;
	char	btn1,btn2;
} MSDAT;

typedef struct {
	int		year,mon,day, hour,min,sec;
} TIME;

#define	OFF		(char)0
#define	ON		(char)1
#define	OFFON	(char)2
#define	ONOFF	(char)3

#define	DrawNORMAL	(int)0
#define	DrawOR		(int)2
#define	DrawAND		(int)3
#define	DrawXOR		(int)4
#define	DrawNOT		(int)5
#define	DrawMATTE	(int)6
#define	DrawPASTEL	(int)7
// #define	DrawTPSET	(int)128


#define	NOFNCvoid	((void(*)())0)
#define	NOFNCint	((int(*)())0)

#define	VPage0	(0x80 | 0)
#define	VPage1	(0x80 | 1)
#define	VPage2	(0x80 | 2)
#define	VPage3	(0x80 | 3)

void	setds(unsigned int ds);

void	ginit(void);
void	gscreen(int mode);
void	gramscr(int page, int mode, char *buf);
void	gpset(int x, int y, int col, int mode);
void	gline(int x1,int y1,int x2,int y2,int col,int mode);
void	gscrzoom(int xrate, int yrate);
void	gdsparea(int xsize, int ysize);
void	gdsploc(int x,int y);
void	ghline(int x1, int x2, int y, int col, int logop);
void	gvline(int x,  int y1, int y2,int col, int logop);
void	gboxfill(int x1,int y1,int x2,int y2,int col,int logop);
void	grboxfill(int x1,int y1,int xlen,int ylen,int col,int logop);
void	gboxline(int x1,int y1,int x2,int y2,int col,int logop);
void	grboxline(int x1,int y1,int xlen,int ylen,int col,int logop);
void	gblkcpy(int sx,int sy,int xlen,int ylen,int spage,
				int dx,int dy,int dpage,int op);
void	gputblk(char *buf, int dx,int dy,int xlen,int ylen,int op);
void	gwrtpage(int page);
void	gdsppage(int pri, int dspsw);
int		gpoint(int x,int y);

int 	extwildcard(char *wildcard, char *namebuf[], int maxnames);

void	grp_getblk(int x1, int y1, int xlen, int ylen, char *buf);
void	grp_putblk(char *data, int x1, int y1);
void	grgetblk(char *buf, int x1, int y1, int xlen, int ylen);
void	grputblk(int x1, int y1, int xlen, int ylen, char *data, int op);
#define	grp_putblk	grputblk
#define	grp_getblk	grgetblk
// 昔の grp_putblk, grp_getblk は隠滅する
void	grp_putblk_zoom(int x1, int y1, int xlen, int ylen, char *data,
						int op, int zoomx, int zoomy);
void	grp_boxfill(int x1, int y1, int xlen, int ylen, int col, int mode);
void	grp_boxline(int x1, int y1, int xlen, int ylen, int col, int mode);
void	grp_cls(void);
void	grp_copy(int sx1, int sy1, int sxlen, int sylen, int sp,
				 int dx1, int dy1, int dp, int mode );
void	grp_dispPos(int x, int y);
int		grp_getMode(void);
void	grp_init(void);
void	grp_line(int x1, int y1, int x2, int y2, int col, int mode);
void	grp_setplt(int plt, int rgb /* bit23-16:赤 bit15-8:緑 bit7-0:青 */);
int		grp_getplt(int plt); /* ret: bit23-16:赤 bit15-8:緑 bit7-0:青 */
int		grp_point(int x, int y);
void	grp_pset(int x, int y, int col, int mode);
void	grp_mode ( int mode );
void	grp_mode2 ( int mode );
void	grp_scrZoom( int xrate, int yrate );
void	grp_putstr(int x, int y, char *str, int col );
int		grp_getWrtpage(void);
void	grp_setWrtpage(int page);

void	wait_vsync();

// sprlib.c

void sp_init(int dispnum), sp_end();
void sp_16colspr(int n);
void sp_def(int patn, char *pattern);
void sp_pltblk(int pltblkn, char *pltblk);
void sp_put(int index, int x, int y, int patn, int pltblk);
void sp_erase(int index, int num);

void	key_init(void);
char	key_get(void);
int		key_chk(void);
char	key_read(void);
void	key_clrbuf(void);

void	text_init(void);
void	text_end(void);

void	minit(),mend();
void	rdmos(MSDAT *msdat);
void	mous_setpos(MSDAT *msdat, int x,int y);
void	mous_typeRom(int type);
void	mous_type(int mode, char *pattern);

void			poked(int sel, int ofs, unsigned int dat);
unsigned int	peekd(int sel, int ofs);

/*--------------------------------------------------------------------------
	ＴＩＦＦ形式 画像セーブ・ロード関数
	
	putimagefunc, getimagefunc:
		int func(char *buf, int yofs, int ylen)   の形式にすること
--------------------------------------------------------------------------*/

typedef struct {
	int		xlen,ylen;
	bool	compress;
	int		pixelsize;
} TIFFinfo;

int		TIFFinitwork();
int 	TIFFinitworkGUI();
int		TIFFload(char *fname, int x0, int y0);
void	TIFFload_putimagefunc(int (*func)());
int		TIFFsave(char *fname, int x1, int y1, int x2, int y2, bool compress);
// 返値	 0=成功
//		-1=画面モード/ファイル名の間違い
//		-2=メモリ不足
//		-3=ディスク領域不足
//		-4=get関数エラー
void	TIFFsave_getimagefunc(int (*func)());
int		TIFFgetinfo(char *fname, TIFFinfo *info);
// 返値  0=正常終了
//      -1=ファイルが存在しない
//      -2=TIFF形式ではない
//      -3=メモリが足りない

extern	char	_egbwork[];
extern	char	*EGB_work;
extern	int		_scrmod[];
extern	int		_nowscrmod;
extern	int		_wrtpage;


int		getftime(char *fname, TIME *timebuf);	// 成功すれば 0
void	getnowtime(TIME *timebuf);

/* end of usrlib.h */
