/*************************************************************************
* "main.c" : HEwin CD installer "main" module
*************************************************************************/

#include	"ccilib.h"
#include	"kbcode.h"
#include	"install.h"

#define	VERSION	"1.01a"
#define	EDITION	"04"
/*
	- History	----------------------------------------------------------
	ver.1.01a
		#01	Appare CD vol.1
		#02	FreeSoftWare collection  9
		#03	HEwin CD
		#04	FreeSoftWare collection 10
*/

#define	EVNO_EXIT	(9999)

#define	SCREEN_MODE		(0x030A)
int		DrvInst       = -1;
int		PltNoWhite    = 5;
int		ColBoxNormal  = 0;
int		ColBoxInfo    = 0;
int		ColBoxCaution = 0;
int		ColBoxError   = 0;
int		ColMesh       = 0;

int		init();
int		term();
int		install_main();
int		set_debug_menu(char *mnu);

#ifdef	DEBUG
#	define	_TOPMENU_NUM	(2)
#else
#	define	_TOPMENU_NUM	(1)
#endif

int		main(int argc, char **argv)
{
	init();
	install_main();
	term();

	return (0);
}

int	init()
{
	char		msg[80], tmp[128];
	char	   *mnu;
	char	   *msgMenu[_TOPMENU_NUM];
	char	   *img;
	int			winBasCol;

	APL_init(SCREEN_MODE,1,1);
	LHA_sysInit(NULL);	/* LHA.DLLの初期化	*/

	/*------------------------------------------------------------------*/
	disp_desktop();
	SCN_wrtPage(1);
	tmp[0] = 0;
	tmp[1] = 255;	/* blue  */
	tmp[2] = 255;	/* red   */
	tmp[3] = 255;	/* green */
	SCN_palette(0,PltNoWhite,tmp);

	/* ベースウィンドゥ	------------------------------------------------*/
	SCN_wrtPage(1);
	winBasCol = 0;
/*	winBasCol = SCN_tile_newMixCol(winBasCol,MIXCOL_STD1,C_HWHITE,C_WHITE);*/
	winBasCol = C_THROUGH;
	APL_openBaseWin(winBasCol);

	/* トップバー	----------------------------------------------------*/
	SCN_wrtPage(1);
	strcpy(msg,"  SYSTEM  ");
	msgMenu[0] = " INSTALL ";
#if	_TOPMENU_NUM > 1
	msgMenu[1] = "  DEBUG  ";
#endif
	APL_openTopBarMenu(Fnt16x16,msg,C_HGREEN, _TOPMENU_NUM,Fnt16x12,msgMenu,C_MBLACK);

	/* [Oh!FM TOWNS]メニュー	----------------------------------------*/
	MNU_datAdd( SysMnu, 0, 'A', Fnt16x16, 0, "about_dlg"  , 0, "このプログラムについて");
	MNU_datAdd( SysMnu, 0, 'F', Fnt16x16, 0, "dsp_freemem", 0, "フリーメモリ"          );

	/* [INSTALL]メニュー	--------------------------------------------*/
	mnu = AplMnu[0];
	MNU_datAdd( mnu, 0, 'H', Rom16x16, 0, "inst_help", "message.doc", "説明"         );
	MNU_datAdd( mnu, 0,  0 , Rom16x16, 0, ""         , 0            ,  NULL          );
	MNU_mnuAdd( mnu, 0, 'I', Fnt16x16, get_inst_main_mnu()          , "インストール" );

	/* [DEBUG]メニュー	------------------------------------------------*/
#ifdef	DEBUG
	set_debug_menu( AplMnu[1] );
#endif

	/* [EXIT]ボタン	----------------------------------------------------*/
	APL_setExitEvt("EXIT",EVNO_EXIT,"exit_chk");

	/* DTA ライブラリ	------------------------------------------------*/
	AplDtaInit();

	/* 色番号	--------------------------------------------------------*/
	ColBoxNormal  = SCN_tile_newMixCol(ColBoxNormal ,MIXCOL_NORMAL,C_DARK   ,C_WHITE);
	ColBoxInfo    = SCN_tile_newMixCol(ColBoxInfo   ,MIXCOL_NORMAL,C_HGREEN ,C_WHITE);
	ColBoxError   = SCN_tile_newMixCol(ColBoxError  ,MIXCOL_NORMAL,C_HRED   ,C_WHITE);
	ColBoxCaution = SCN_tile_newMixCol(ColBoxCaution,MIXCOL_NORMAL,C_HYELLOW,C_WHITE);
	ColMesh       = SCN_tile_newMixCol(ColMesh      ,MIXCOL_NORMAL,C_THROUGH,C_WHITE);

	return (NORMAL);
}

int	term()
{
	char	tmp[256];

	FS_chdrv(toupper(DirStart[0]) - 'A');
	sprintf(tmp,"%s.",DirStart);
	FS_chdir(tmp);

	APL_term();
}

#ifndef	COL32K
#	define	COL32K(_blue,_red,_green)	\
		((_blue) + ((_red)<<5) + (_green<<10))
#endif

int		disp_desktop()
{
	int		y, n;

	SCN_wrtPage(0);
	for ( y = 0; y < 240; ++y )
	{
		n = 32 * y / 240;
		SCN_line(0,239-y,319,239-y, PSET,
		    COL32K(n,6,14) );
	}
	SCN_wrtPage(1);
	return (0);
}

int		install_main()
{
	int		ret;

	SCN_wrtPage(1);
	syl_clear();
	for (;;)
	{
		MOS_CON();
		ret = EV_chk(EvTop,0);
		if ( ret == EVNO_EXIT )
			break;
	}
	return (0);
}

int		exit_chk()
{
	char	*dlgTxm;
	int		i, ret;
	static char	*msgtbl[4] =
	{
		"",
		"インストーラを終了しますか？",
		"",
		NULL
	};

	dlgTxm = DlgTxm_open(ColBoxCaution);
	for ( i = 0; msgtbl[i] != NULL; ++i )
		DlgTxm_putf( dlgTxm, Fnt16x16, TXMDAT_ATT_CENTER, msgtbl[i]);

	DlgTxm_setBtn( dlgTxm, Fnt16x16, 128, 20, C_MBLACK, C_WHITE, C_HWHITE, C_DARK,
	    '\r'  , KA_EXEC  , EVNO_EXIT, "", 0, "終了 : [実行]");
	DlgTxm_setBtn( dlgTxm, Fnt16x16, 128, 20, C_MBLACK, C_WHITE, C_HWHITE, C_DARK,
	    '\x1B', KA_CANCEL,         0, "", 0, "取消 : [取消]");
	DlgTxm_setSize(dlgTxm,480,64);
	DlgTxm_setPosition(dlgTxm,DLGPOS_CENTER_OF_SCREEN);
	ret = DlgTxm_start(dlgTxm);
	DlgTxm_close(dlgTxm);
	if ( ret != EVNO_EXIT )
		ret = 0;

	return (ret);
}

int		about_dlg()
{
	char	*dlgTxm;

	dlgTxm = DlgTxm_open(ColBoxNormal);
	DlgTxm_setTitle(dlgTxm,Fnt16x16, "Installer ver.%s edition #%s",
	    VERSION, EDITION );

	DlgTxm_putf( dlgTxm, Fnt16x16, TXMDAT_ATT_CENTER,"TaroPYON SoftWare Collection インストールプログラム");
	DlgTxm_putf( dlgTxm, Fnt16x08, TXMDAT_ATT_CENTER, "");
	DlgTxm_putf( dlgTxm, Fnt16x12, TXMDAT_ATT_CENTER,"for FreeSoftWare collection 10");
	DlgTxm_putf( dlgTxm, Fnt16x12, TXMDAT_ATT_CENTER, "");
	DlgTxm_putf( dlgTxm, Fnt16x16, TXMDAT_ATT_CENTER, "%c%c TaroPYON",
	    Gaiji_copyright>>8, Gaiji_copyright&0xFF );

	DlgTxm_setBtn( dlgTxm, Fnt16x16, 128, 20, C_MBLACK,
	    C_WHITE, C_HILIGHT, C_DARK, '\r', KA_EXEC, 0, "", 0, "OK : [実行]");
	DlgTxm_setSize(dlgTxm,320,48);
	DlgTxm_setPosition(dlgTxm,DLGPOS_CENTER_OF_SCREEN);

	DlgTxm_start(dlgTxm);
	DlgTxm_close(dlgTxm);

	return (0);
}

int		dsp_freemem()
{
	unsigned int	siz;
	char		   *dlgTxm;
	char			tmp1[32], tmp2[32];

	siz = APL_getFreeMem();
	dlgTxm = DlgTxm_open(ColBoxInfo);
	DlgTxm_setTitle(dlgTxm,Fnt16x16, "FREE MEMORY SIZE");

	DlgTxm_putf( dlgTxm, Fnt16x12, TXMDAT_ATT_CENTER,
	    "free memory %s (%s) bytes",
	    fdl_ltoaDig(siz,tmp1), fdl_ltoaMsg(siz,tmp2) );

	DlgTxm_setBtn( dlgTxm, Fnt16x16, 128, 20, C_MBLACK,
	    C_WHITE, C_HILIGHT, C_DARK, '\r', KA_EXEC, 0, "", 0, "OK : [実行]");
	DlgTxm_setSize(dlgTxm,400,64);
	DlgTxm_setPosition(dlgTxm,DLGPOS_NORMAL,2,22);

	DlgTxm_start(dlgTxm);
	DlgTxm_close(dlgTxm);
}

#include	"instmenu.c"
#include	"instexec.c"
#include	"instlib.c"
#include	"item.c"
#ifdef	DEBUG
#	include	"debug.c"
#endif
