/*************************************************************************
*	ライブラリ
*************************************************************************/

int		_puts_bold(int x, int y, int col, char *s);

/*************************************************************************
*	システム行クリア
*************************************************************************/

int		syl_clear()
{
	char	*msg, tmp[80];

	SCN_wrtPage(1);
	MOS_DEC();

	msg = "TaroPYON SoftWare collection installer";

	SCN_boxf(0,464,639,479,PSET,ColMesh);
/*	_puts_bold(           232       ,464  ,     PltNoWhite,msg); */
	SCN_puts(Fnt16x16,msg,272+1,464+1,PSET,C_MBLACK  ,0);
	SCN_puts(Fnt16x16,msg,272  ,464  ,PSET,PltNoWhite,0);

	MOS_INC();
}

/*************************************************************************
*	システム行に文字列表示
*************************************************************************/

int		syl_putf(char *form)
{
	char		tmp[256];
	char	   *ap;
	int			n, x;

	va_start(ap,form);
	vsprintf(tmp+6,form,ap);
	va_end(ap);

	SCN_wrtPage(1);
	MOS_DEC();

	SCN_boxf(0,464,639,479,PSET,ColMesh);

	EGB_textDirection(EgbPtr,0);				/* 文字方向	*/
	EGB_textDisplayDirection(EgbPtr,0);			/* 表示方向	*/
	EGB_textSpace(EgbPtr,0);					/* 字間		*/
	EGB_textZoom(EgbPtr,0,  8, 16 );			/* ANK		*/
	EGB_textZoom(EgbPtr,1, 16, 16 );			/* 漢字		*/
	EGB_fontStyle(EgbPtr,1+4);					/* 字体		*/
	EGB_color(EgbPtr,0,C_HGREEN);
	EGB_color(EgbPtr,1,C_MBLACK);
	EGB_paintMode(EgbPtr,0x022);
	EGB_writeMode(EgbPtr,PSET);

	n = strlen(tmp+6);
	x = (640 - n * 8) / 2;
	_setWord(tmp+0,   x   );
	_setWord(tmp+2, 464+15);
	_setWord(tmp+4,   n   );
	EGB_sjisString( EgbPtr, tmp);

	MOS_INC();
}

int		_puts_bold(int x, int y, int col, char *s)
{
	char	para[256];

	EGB_textDirection(EgbPtr,0);				/* 文字方向	*/
	EGB_textDisplayDirection(EgbPtr,0);			/* 表示方向	*/
	EGB_textSpace(EgbPtr,0);					/* 字間		*/
	EGB_textZoom(EgbPtr,0,  8, 16 );			/* ANK		*/
	EGB_textZoom(EgbPtr,1, 16, 16 );			/* 漢字		*/
	EGB_fontStyle(EgbPtr,1+4);					/* 字体		*/
	EGB_color(EgbPtr,0,col     );
	EGB_color(EgbPtr,1,C_MBLACK);
	EGB_paintMode(EgbPtr,0x022);
	EGB_writeMode(EgbPtr,PSET);

	_setWord(para+0, x    );
	_setWord(para+2, y+15 );
	_setWord(para+4, strlen(s));
	strcpy(para+6,s);
	EGB_sjisString( EgbPtr, para);
}

char	*add_path_fn(char *path, char *fn)
{
	int		len;

	len = strlen(path);
/*	if ( len == 0 || FS_isDelim(path[len-1]) == FALSE ) */
	if ( len == 0 || !(path[len-1] == '\\' || path[len-1] == '/') )
		path[len++] = FsPathDelim;
	strcpy( path + len, fn );
	return (path);
}

/*************************************************************************
*	背景用TIFF表示
*************************************************************************/

int		tif_load(char *fn)
{
	char	*img;

	SCN_wrtPage(0);
	if ( (img = IMG_open()) != NULL )
	{
		IMG_setPage(img,0);				/* 表示ページ指定		*/
		IMG_setAtt(img,IMG_ATT_PLTON);	/* パレット設定属性ON	*/
		IMG_setColor( img, C_MBLACK, C_MWHITE);
		if ( IMG_load(img,fn) == NORMAL )
		{
#ifdef	_FC9
			IMG_setPos(img,0,24);			/* 表示位置補正			*/
			EGB_color(EgbPtr,1,C_HWHITE);	/* 背景色				*/
#else
			IMG_setPos(img,0,0);			/* 表示位置補正			*/
			EGB_color(EgbPtr,1,C_MBLACK);	/* 背景色				*/
#endif
			EGB_clearScreen(EgbPtr);
			EGB_paintMode(EgbPtr,0x22);
			IMG_dsp(img);
		}
		IMG_close(img);
	}
	SCN_wrtPage(1);
	return (NORMAL);
}

/*************************************************************************
*	TIFF表示
*************************************************************************/

int		tiflist_disp( char **list )
{
	int				i, x, y, ret, pixel, md, x0, y0;
	char		   *img;
	short			fr[4];
	char		   *fn;

	SCN_wrtPage(1);
	APL_save_desktop();
	SCN_boxf(0,0,639,479,PSET,0);
	SCN_wrtPage(0);

	for ( i = 0; list[i] != NULL; ++i )
	{
		fn = list[i];

		if ( (img = IMG_open()) != NULL )
		{
			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 = 12;
						break;
					case 16:	/* 32768 色	*/
						if ( fr[2] - fr[0] + 1 <= 320 )
						{
							x0 = (320 - (fr[2] - fr[0] + 1)) / 2;
							y0 = (240 - (fr[3] - fr[1] + 1)) / 2;
							md = 10;
						} else
						{
							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();				/* マウスカーソル消去	*/

				EGB_displayPage(EgbPtr,0,0);
				EGB_writePage(EgbPtr,0);
				EGB_clearScreen(EgbPtr);
				EGB_resolution(EgbPtr,0,md);	/* 画面モード設定	*/
				if ( md == 3 || md == 10 )
				{
					EGB_resolution(EgbPtr,1,3);	/* 画面モード設定	*/
					EGB_writePage(EgbPtr,1);
					EGB_clearScreen(EgbPtr);
				}

				EGB_writePage(EgbPtr,0);
				if ( md == 10 )
				{
					EGB_displayStart(EgbPtr,2,2,2);
					EGB_displayStart(EgbPtr,3,320,240);
				}
				EGB_color(EgbPtr,1,0);
				EGB_clearScreen(EgbPtr);
				IMG_dsp(img);
				if ( md == 3 || md == 10 )
					EGB_displayPage(EgbPtr,1,3);
				else
					EGB_displayPage(EgbPtr,0,1);

				_apl_wait(CLOCKS_PER_SEC * 8);
				while ( PD_getp(&x,&y) )
					;
			}
			IMG_close(img);
		}
	}

	EGB_writePage(EgbPtr,0);
	EGB_clearScreen(EgbPtr);

	SCN_sysReinit();
	disp_desktop();
	SCN_wrtPage(1);
	APL_load_desktop();
	syl_clear();

	return (NORMAL);
}

int		mveplay(char *fnmve, int loop)
{
	char	para[256];

	sprintf(para,"-loop %d %s", loop, fnmve );

	exprun("/OH_TOWNS/DEMOTOOL/mveplay.exp", para );
	return (0);
}

int		exprun(char *fn, char *para)
{
	unsigned int	siz;
	int				md;
	char			tmp[256];
	char		   *dlgTxm;

	siz = APL_getFreeMem();
	if ( siz < 2 * 1024 * 1024 )
	{	/* メモリ不足	*/
		dlgTxm = DlgTxm_open(ColBoxError);
		DlgTxm_setTitle(dlgTxm,Fnt16x16, "OUT OF MEMORY");

		DlgTxm_putf( dlgTxm, Rom16x16, TXMDAT_ATT_CENTER,"");
		DlgTxm_putf( dlgTxm, Rom16x16, TXMDAT_ATT_CENTER,
		    "メモリ不足のため実行できません。" );
		DlgTxm_putf( dlgTxm, Rom16x16, TXMDAT_ATT_CENTER,"");

		DlgTxm_setBtn( dlgTxm, Fnt16x16, 128, 20, C_MBLACK,
		    C_WHITE, C_HILIGHT, C_DARK, '\r', KA_EXEC, 0, "", 0, "OK : [実行]");
		DlgTxm_setSize(dlgTxm,480,48);
		DlgTxm_setPosition(dlgTxm,DLGPOS_CENTER_OF_SCREEN);

		DlgTxm_start(dlgTxm);
		DlgTxm_close(dlgTxm);
		return (-1);
	}
	FS_chdrv( toupper(DirStart[0]) - 'A' );
	FS_getDnam(tmp,fn);
	add_path_fn(tmp,".");
	FS_chdir(tmp);

	/* 画面保存	*/
	SCN_wrtPage(1);
	APL_save_desktop();

	/* ネイティブモード子プロセスプログラムの起動	*/
	md = APLPCL_SET_STARTPATH | APLPCL_SET_PCP;
	AplDtaInit();
	if ( para != NULL && *para != '\0' )
	{
		AplDtaSetStr("$MainArg","%s %s", fn, para);
		if ( strlen(fn) + strlen(para) + 1 >= 128 )
			md &= (~APLPCL_SET_PCP);
	}
	PCL_exec(fn,md);

	/* 画面再設定	*/
	SCN_sysReinit();
	disp_desktop();
	SCN_wrtPage(1);
	APL_load_desktop();
	syl_clear();

	return (NORMAL);
}

/*************************************************************************
*	説明表示（イベント処理関数）
*************************************************************************/

int		inst_help( int evNo, char *evDat, char *fn)
{
	char	tmp[256];

	FS_chdrv(toupper(DirStart[0]) - 'A');
	sprintf(tmp,"%s.",DirStart);
	FS_chdir(tmp);

	APL_textView(Rom16x16,608,391,17,fn,"HELP FILE : %s", fn);

	return (evNo);
}

/*************************************************************************
*	インストール終了メッセージ
*************************************************************************/

int		install_end( char *soft_name, int err )
{
	char	*dlgTxm;
	int		colbox;
	char	*msg;

	msg = err == 0 ? "インストールが終わりました。"
	               : "インストールに失敗しました。";

	colbox = 0;
	colbox = SCN_tile_newMixCol(colbox,0x00,C_HGREEN,C_WHITE);
	if ( (dlgTxm = DlgTxm_open(colbox)) != NULL )
	{
		DlgTxm_setTitle(dlgTxm,Fnt16x16,soft_name);
		DlgTxm_putf( dlgTxm, Fnt16x16, TXMDAT_ATT_CENTER, "");
		DlgTxm_putf( dlgTxm, Fnt16x16, TXMDAT_ATT_CENTER, msg );
		DlgTxm_putf( dlgTxm, Fnt16x16, TXMDAT_ATT_CENTER, "");
		DlgTxm_setBtn( dlgTxm, Fnt16x16, 64, 20, C_MBLACK, C_WHITE, C_HILIGHT, C_DARK, '\r'  , KA_EXEC  , 1, "", 0, "OK : [実行]");
		DlgTxm_setSize(dlgTxm,480,64);
		DlgTxm_setPosition(dlgTxm,DLGPOS_CENTER_OF_SCREEN);
		DlgTxm_start(dlgTxm);
		DlgTxm_close(dlgTxm);
	}
	SCN_tile_free(colbox);
}

