/* << HighC V1.7 >> [FM-TOWNS] **********************************************
*
*	.PVS 表示ﾌﾟﾛｸﾞﾗﾑ
*	----------------------------------------------------------------------
*	Programmed by Y.Hirata ( NIFTY-ID: NAB03321  パオパオ )
*
*	NOTE: TAB=4
****************************************************************************/

#ifndef _PVD_DEFINED
	#define	_PVD_DEFINED

	#include <stdio.h>

	extern void _harderr_retry( void ) ;
	extern void _harderr_clear( void ) ;

	#define	TRUE				1				/*  真値				*/
	#define	FALSE				0				/*  偽値				*/

	#define	MOS_NONE			0x00			/*  ﾎﾞﾀﾝ開放			*/
	#define	MOS_LEFT			0x01			/*  左ﾎﾞﾀﾝ押下			*/
	#define	MOS_RIGHT			0x02			/*  右ﾎﾞﾀﾝ押下			*/
	#define	MOS_BOTH			0x03			/*  左右ﾎﾞﾀﾝ押下		*/

	#define	PAD_SELECT			0x80
	#define	PAD_START			0x40
	#define	PAD_B				0x20
	#define	PAD_A				0x10
	#define	PAD_RIGHT			0x08
	#define	PAD_LEFT			0x04
	#define	PAD_DOWN			0x02
	#define	PAD_UP				0x01
	#define	PAD_MOVE			(PAD_RIGHT|PAD_LEFT|PAD_DOWN|PAD_UP)

	typedef	unsigned char		_BYTE ;
	typedef	unsigned short int	_WORD ;
	typedef	unsigned long		_DWORD ;

	typedef struct {							/*  ﾊﾟﾚｯﾄ設定用			*/
		_DWORD	no ;							/*  ﾊﾟﾚｯﾄ番号(0〜)		*/
		_BYTE	b ;								/*  青の階調			*/
		_BYTE	r ;								/*  赤の階調			*/
		_BYTE	g ;								/*  緑の階調			*/
		_BYTE	zero ;							/*  0					*/
	} _SET_PALETTE ;

	typedef struct {							/*  16色ﾊﾟﾚｯﾄ設定用		*/
		_DWORD	npal ;
		_SET_PALETTE	pal[16] ;
	} _PAL_16 ;

	typedef struct {							/*  256色ﾊﾟﾚｯﾄ設定用	*/
		_DWORD	npal ;
		_SET_PALETTE	pal[256] ;
	} _PAL_256 ;

	enum Values_for_SelectNumber {				/*  選択識別番号		*/
		SEL_TIT,	P0_1,		P0_2,		P0_3,		/*  0 -  3		*/
		P0_4,		P0_5,		P0_6,		P0_7,		/*  4 -  7		*/
		P0_8,		P0_9,		P0_10,		P0_11,		/*  8 - 11		*/
		P0_12,		P0_13,		P0_14,		P0_15,		/*  12- 15		*/
		P0_16,		P0_17,		P0_18,		P1_1,		/*  16- 19		*/
		P1_2,		P1_3,		P1_4,		P1_5,		/*  20- 23		*/
		P1_6,		P1_7,		P1_8,		P1_9,		/*  24- 27		*/
		P1_10,		P1_11,		D0_0,		D1_1,		/*  28- 31		*/
		D0_3,		D1_3,		SEL_EXEC,	SEL_END,	/*  32- 35		*/
		P0_X1,		P0_X2,		P0_X4,		P0_Y1,		/*  36- 39		*/
		P0_Y2,		P0_Y4,		P1_X1,		P1_X2,		/*  40- 43		*/
		P1_X4,		P1_Y1,		P1_Y2,		P1_Y4,		/*  44- 47		*/
		SEL_DOS,	SEL_TIF,	SEL_MAX					/*  48-			*/
	} ;

	typedef struct {							/*  ｶﾚﾝﾄ情報構造体		*/
		char	*fname ;						/*  .pvsﾌｧｲﾙ名			*/
		FILE	*fp ;							/*  ﾌｧｲﾙﾎﾟｲﾝﾀ			*/
		char	*buf ;							/*  VRAMﾃﾞｰﾀ格納領域	*/
		int		p0 ;							/*  page0 ﾓｰﾄﾞ			*/
		int		p1 ;							/*  page1 ﾓｰﾄﾞ			*/
		int		disp ;							/*  display				*/
		int		zx0, zy0 ;						/*  表示倍率			*/
		int		zx1, zy1 ;						/*  表示倍率			*/
		int		sx0, sy0 ;						/*  page0表示画面先頭	*/
		int		sx1, sy1 ;						/*  page1表示画面先頭	*/
		int		vx0, vy0 ;						/*  page0仮想画面先頭	*/
		int		vx1, vy1 ;						/*  page1仮想画面先頭	*/
		int		xsize, ysize ;					/*  保存ｻｲｽﾞ			*/
		int		pixel ;							/*  保存ﾃﾞｰﾀﾋﾟｸｾﾙ数		*/
		int		page ;							/*  保存ﾍﾟｰｼﾞ			*/
	} _SELECT_PARA ;

	typedef struct {
		int		pixel ;							/*  ﾋﾟｸｾﾙ数				*/
		int		sx, sy ;						/*  表示ｻｲｽﾞ			*/
		int		vx, vy ;						/*  仮想画面ｻｲｽﾞ		*/
		int		zx, zy ;						/*  初期倍率			*/
	} _SCREEN_PARA ;

	#define	VRAM_OFFSET			864				/*  .pvs内ｵﾌｾｯﾄ			*/
	#define	VRAM_SIZE			(512*1024)		/*  VRAMｻｲｽﾞ			*/
	#define	VRAM_HALF			(256*1024)		/*  VRAM 2画面目ｵﾌｾｯﾄ	*/
	#define	TMP_SIZE			1024			/*  作業領域ｻｲｽﾞ(固定)	*/

	extern char	Mwork[] ;						/*  MOS作業領域			*/
	extern char	_mos_cur[] ;					/*  ﾏｳｽｶｰｿﾙ(ｱｲｺﾝ)		*/
	extern char	_tmp[] ;						/*  作業領域			*/

	extern FILE	*_fp ;							/*  .pvsﾌｧｲﾙﾎﾟｲﾝﾀ		*/
	extern char	*_buf ;							/*  VRAMﾃﾞｰﾀ格納領域	*/
	extern _PAL_16	_pal160, _pal161 ;			/*  16色ﾊﾟﾚｯﾄ設定用		*/
	extern _PAL_256	_pal256 ;					/*  256色ﾊﾟﾚｯﾄ設定用	*/

	extern _SELECT_PARA	_para ;					/*  選択状態の情報		*/
	extern _SCREEN_PARA	_screen[] ;				/*  画面ﾓｰﾄﾞの情報		*/

	#define	_pixel0				(_screen[_para.p0-1].pixel)
	#define	_pixel1				(_screen[_para.p1-1].pixel)
	#define	_sx0				(_screen[_para.p0-1].sx)
	#define	_sy0				(_screen[_para.p0-1].sy)
	#define	_sx1				(_screen[_para.p1-1].sx)
	#define	_sy1				(_screen[_para.p1-1].sy)
	#define	_vx0				(_screen[_para.p0-1].vx)
	#define	_vy0				(_screen[_para.p0-1].vy)
	#define	_vx1				(_screen[_para.p1-1].vx)
	#define	_vy1				(_screen[_para.p1-1].vy)

	void crtc_out( int reg ) ;
	void mosBreak( void ) ;
	int mosButton( void ) ;
	void ginit( void ) ;
	void minit( void ) ;
	void to_vram( void ) ;
	void reverse( int old,int new ) ;
	int select_msdos( void ) ;
	int select_page0( int sel ) ;
	int page1_check( int p1 ) ;
	int select_page1( int sel ) ;
	int select_disp( int sel ) ;
	int select_zoom( int sel ) ;
	void select_on( int old,int new ) ;
	int select( void ) ;
	void setdos( void ) ;
	void setdisp( void ) ;
	void menu( void ) ;
	void move_disp( int status ) ;
	void start_disp( int status ) ;
	void reset_disp( void ) ;
	void mos_action( void ) ;
	void disp( void ) ;
	int getpal( void ) ;
	void errWait( void ) ;
	void usage( void ) ;
	void openError( char *fname ) ;
	int main( int ac,char *av[] ) ;

#endif

/*	HISTORY
-----------------------------------------------------------------------------
*	1994.01.03 : CREATE
*	1994.01.10 : ﾊﾟｯﾄﾞ操作で画面ｽｸﾛｰﾙ,表示位置変更をできるようにした.
*	1994.01.13 : TIFF保存できるようにした.
---------------------------------------------------------------------------*/
