/*************************************************************************
*	"tifload.cci" : TIFFデータの表示
*************************************************************************/

#include	"ccilib.h"

/*	パレットデータ（HEwin 配色）	*/
char	PltDat[3][16] =
{
	/* G R  B								*/
	{ 0, 0, 0},	/* C_BALCK, C_THROUGH		*/
	{ 0, 0, 0},	/* C_BLUE , C_MBLACK 		*/
	{ 7, 7, 8},	/* C_RED					*/
	{12,12,13},	/* C_MAGENTA				*/
	{ 6, 5, 7},	/* C_GREEN					*/
	{ 8, 7, 9},	/* C_CYAN					*/
	{10, 9,11},	/* C_YELLOW					*/
	{11,11,12},	/* C_WHITE					*/

	{ 5, 5, 6},	/* C_HBALCK					*/
	{ 0, 0,11},	/* C_HBLUE					*/
	{ 0,11, 0},	/* C_HRED					*/
	{ 0,11,11},	/* C_HMAGENTA				*/
	{11, 0, 0},	/* C_HGEEN					*/
	{11, 0,11},	/* C_HCYAN					*/
	{11,11, 0},	/* C_HYELLOW				*/
	{14,14,15}	/* C_HWHITE					*/
};

char	*IdlDspTime = NULL;

/*************************************************************************
*	初期化画面の描画
*************************************************************************/

int		init_dsp()
{
	DSP_writePage(1);		/* 書き込みページ			*/
	DSP_setPlt( PltDat );	/* パレット設定				*/
	DSP_title("TIFLOAD","0.99",C_HWHITE,C_WHITE,C_MBLACK,C_HBLACK);
	IdlDspTime = evt_setDspTime( 1, 432, 4, C_WHITE, C_MBLACK );	/* 時刻表示アイドリング処理設定	*/
	SYL_clear();
}

/*************************************************************************
*	初期化
*************************************************************************/

int		init()
{
	DSP_sysInit(0);			/* 表示システム初期化		*/
	KBF_sysInit();			/* キーボードシステム初期化	*/
	KBF_kan_off();
	FDL_sysInit();			/* ファイルダイアログ初期化	*/

	sdk_control(0);			/* サイドワーク起動禁止		*/

	DSP_writePage(0);		/* 書き込みページ			*/
	DSP_setPlt( PltDat );	/* パレット設定				*/
	DSP_boxf(0,24,639,463,PSET,COLMIX(5,6));

	init_dsp();
}

/*************************************************************************
*	終了
*************************************************************************/

int		term()
{
	FDL_sysEnd();
	KBF_sysEnd();
	DSP_sysEnd();
}

/*************************************************************************
*	TIFFデータ読み込み＆表示
*************************************************************************/

int		tif_load()
{
	int		i, x, y, ret, pixel, md, x0, y0;
	short	fr[4];
	char	*fdl;		/* ファイルダイアログ用	*/
	char	*fn;		/* ファイル名取得用		*/
	char	*img;		/* TIFF表示用ワーク		*/

	img = NULL;
	x = y = DLGPOS_CENTER_OF_SCN;	/* ダイアログ＆メニュー表示位置	*/

	if ( (fdl = FDL_open(0)) == NULL )
		return (ERR);
	FDL_set_title( fdl, "TIFF LOAD");
	FDL_set_wildcard( fdl, "*.tif");

	for(;;)
	{
		ret = FDL_start(fdl);
		if ( ret != NORMAL )
			break;
		fn = FDL_get_filename(fdl);
		if ( *fn == '\0' )
			continue;

		if ( (img = IMG_open()) == NULL )
		{	/* error */
			FDL_close(fdl);
			return (ERR);
		}

		IMG_setPage(img ,0);			/* 表示ページ指定		*/
		IMG_setAtt(img,IMG_ATT_PLTON);	/* パレット設定属性ON	*/

		if ( IMG_load(img,fn) == NORMAL )
		{
			IMG_getFr(img,fr);	/* 画像データの大きさを取得	*/
			pixel = IMG_getPixel(img);
			switch ( pixel )
			{
				case  1:	/* モノクロ	*/
				case  4:	/* 16色		*/
					x0 = (640 - (fr[2] - fr[0] + 1)) / 2;
					y0 = (480 - (fr[3] - fr[1] + 1)) / 2;
					md = 3;
					break;
				case  8:	/* 256 色	*/
					x0 = (640 - (fr[2] - fr[0] + 1)) / 2;
					y0 = (480 - (fr[3] - fr[1] + 1)) / 2;
					md = 14;
					break;
				case 16:	/* 32768 色	*/
					x0 = (512 - (fr[2] - fr[0] + 1)) / 2;
					y0 = (480 - (fr[3] - fr[1] + 1)) / 2;
					md = 17;
					break;
				default:
					goto _TIF_ERR;
			}
			IMG_setPos(img,x0,y0);	/* 表示位置補正			*/
			MOS_COFF();				/* マウスカーソル消去	*/
			EVT_idl_stop(IdlDspTime);

			DSP_writePage(1);
			EGB_color(EgbPtr,1,0);
			EGB_clearScreen(EgbPtr);

			EGB_resolution(EgbPtr,0,md);	/* 画面モード設定	*/
			DSP_writePage(0);
			EGB_color(EgbPtr,1,0);
			EGB_clearScreen(EgbPtr);

			IMG_dsp(img);
			while ( kbhit() == 0 && MOS_pget(&x0,&y0) == 0 )
				EVT_idl();
			while ( MOS_pget(&x0,&y0) )
				EVT_idl();
			for ( i = 0; i < 2; ++i )
				EGB_resolution(EgbPtr,i,3);
			init_dsp();
			KBF_clear();
			EVT_idl_start(IdlDspTime);
		} else
		{
_TIF_ERR:	MNU_sure( x, y, C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY),
			    SELBTN_ATT_CENTER, "    %s    \n    Tiff load error!!    ", fn );
		}
		if ( img )
		{
			IMG_close(img);
			img = NULL;
		}
	}
	FDL_close(fdl);

	return (NORMAL);
}

/*************************************************************************
*	MAIN
*************************************************************************/

int		main()
{
	init();

	tif_load();

	term();
	return (0);
}
