/*************************************************************************
*	トップメニュー
*************************************************************************/

char	*Msg_inst_all[16] =
{
	" 以下のアプリケーション，ツールをハードディスクにインストールします。 ",
	"",
	" HEwin   … 超弩級アプリケーション・プロセッサ HEwin                  ",
	" EDIA    … テキストエディタ EDIA                                     ",
	" GSPLAY  … MIDI sound display system GSPLAY / [GS] emulation player  ",
	" HE386   … MML コンパイラ                                            ",
	" CCI     … Ｃ言語インタプリタ CCI                                    ",
	" SDKCALC … ｻｲﾄﾞﾜｰｸ数式計算        SDKDIC  … ｻｲﾄﾞﾜｰｸCD辞書検索       ",
	" SDKFS   … ｻｲﾄﾞﾜｰｸ･ﾌｧｲﾙｾﾚｸﾀ       SDKMENU … ｻｲﾄﾞﾜｰｸ･ﾌﾟﾛｸﾞﾗﾑ･ﾒﾆｭｰ    ",
	" SMFPLAY … ｻｲﾄﾞﾜｰｸMIDIデータ演奏プログラム                           ",
	"",
	"※ インストールに必要なディスク容量は約5.5Mバイト(1ｸﾗｽﾀ＝4KB)です。   ",
	"  （1ｸﾗｽﾀ＝8KBで6MB，1ｸﾗｽﾀ＝16KBで7.3MB, 1ｸﾗｽﾀ＝32KBで10.1MB必要です）",
	NULL
};

int		_inst_help()
{
	char	*dlg;
	char	*lin, *p;
	char	fn[256], buf[256];
	char	*fp;

	sprintf(fn,"%s%s", StartPath,"install.hlp");
	if ( (fp = fopen(fn,"r")) == NULL )
		return (ERR);
	dlg = NULL;
	lin = NULL;
	while ( fgets(buf, 255, fp) != NULL )
	{
		p = lin;
		lin = DLG_txtSetLinBuf( lin, 4, 80, "%s", buf );
		if ( p == lin )
			break;
	}
	fclose(fp);

	DSP_writePage(1);
	dlg = DLG_txtOpen( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
	    80, 24, lin, 0 );
	DLG_txtSetTitle(    dlg, "INSTALLER HELP" );
	DLG_txtSetGuideMsg( dlg, "help file : %s", fn );
	DLG_txtStart( dlg );

	if ( lin )		DLG_txtFreeLinBuf( lin );
	if ( dlg )		DLG_txtClose( dlg );
	return (NORMAL);
}

int		_inst_setdir(int help)
{
	int		ret, ch;
	char	*btn;
	char	*obj;
	char	*mnu;
	char	*fdl;
	char	*fn, *whare, dir[256], tmp[256];
	char	msg_HEWIN[256];
	char	msg_EDIA[256];
	char	msg_GSPLAY[256];
	char	msg_HE386[256];
	char	msg_CCI[256];
	char	msg_SDK[256];
	char   *msg_start;

	mnu = NULL;
	obj = NULL;
	if ( help == 0 )
	{
		dsp_init(Msg_inst_all);
		goto _DRVSET;
	}

_HELP:
	dsp_init(Msg_inst_all);
	_inst_help();

	/* インストールドライブの指定	------------------------------------*/
_DRVSET:
	DSP_writePage(1);
	btn = MNU_allocBtn(2);
	MNU_setBtn( btn, 0, '\r'  , KA_EXEC  , 1, "ﾃﾞｨﾚｸﾄﾘ指定: [実行]" );
	MNU_setBtn( btn, 1, '\x1B', KA_CANCEL, 2, "終了 : [取消]" );
	ret = MNU_selectBtn( DlgX0, DlgY0,
	    C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_CENTER, 2, btn,
	    "  各アプリケーションをインストールするディレクトリを指定してください。" );
	MNU_freeBtn( btn );
	if ( ret != 1 )
	{
		MNU_close(mnu);	mnu = NULL;
		MNU_free(obj);	obj = NULL;
		return (ERR);
	}

	if ( (fdl = FDL_open(0)) == NULL )
		return (-1);
	FDL_set_title( fdl,"インストール・ドライブの指定");
	FDL_set_wildcard( fdl, "*.*");
	ret = FDL_start(fdl);
	if ( ret == NORMAL )
	{
		fn = FDL_get_filename(fdl);
		DrvDef = FDL_get_drv(fdl);
		if ( *fn == '\0' )
		{
			whare = FDL_get_whare(fdl);
			if ( whare[0] )
				sprintf(dir,"%c:/%s", DrvDef+'A', whare);
			else
				sprintf(dir,"%c:", DrvDef+'A');
		} else
		{	/* ファイル指定あり	*/
			FS_setFullPathname( dir, fn );
			DrvDef = toupper(dir[0]) - 'A';
		}
	}
	FDL_close(fdl);
	if ( DrvDef < 0 || ret < 0 )
		goto _DRVSET;
	/* 同一ディレクトリのチェック	*/
	sprintf(tmp,"%s/INSTALL/",dir);
	if ( FS_cmpfnam(tmp,StartPath) == 0 )
	{
		DSP_writePage(1);
		MNU_sure( DlgX0, DlgY0,
		    C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_CENTER,
		    " %s : \n  このディレクトリにはインストールできません。 ", dir );
		goto _DRVSET;
	}

	sprintf(Path_HEWIN   ,"%s/HEWIN" , dir);
	sprintf(Path_EDIA    ,"%s/EDIA"  , dir);
	sprintf(Path_GSPLAY  ,"%s/GSPLAY", dir);
	sprintf(Path_HE386   ,"%s/HE386" , dir);
	sprintf(Path_CCI     ,"%s/CCI"   , dir);
	sprintf(Path_SDK     ,"%s/SDK"   , dir);

_MENU:
	for(;;)
	{
		DSP_writePage(1);
		if ( obj == NULL )
			obj = MNU_alloc(10);

		sprintf(msg_HEWIN ,"HEwin    [%s]", Path_HEWIN  );
		sprintf(msg_EDIA  ,"EDIA     [%s]", Path_EDIA   );
		sprintf(msg_GSPLAY,"GSPLAY   [%s]", Path_GSPLAY );
		sprintf(msg_HE386 ,"HE386    [%s]", Path_HE386  );
		sprintf(msg_CCI   ,"CCI      [%s]", Path_CCI    );
		sprintf(msg_SDK   ,"Sidework [%s]", Path_SDK    );
		msg_start = "<<<INSTALL START>>>";

		MNU_setObj(obj, 0, MNU_NOR, '0', "HELP"    , NULL,_NO_HELP  , NULL );
		MNU_setObj(obj, 1, MNU_BLK,  0 , NULL      , NULL, 0        , NULL );
		MNU_setObj(obj, 2, MNU_NOR, 'H', msg_HEWIN , NULL,_NO_HEWIN , NULL );
		MNU_setObj(obj, 3, MNU_NOR, 'E', msg_EDIA  , NULL,_NO_EDIA  , NULL );
		MNU_setObj(obj, 4, MNU_NOR, 'G', msg_GSPLAY, NULL,_NO_GSPLAY, NULL );
		MNU_setObj(obj, 5, MNU_NOR, 'M', msg_HE386 , NULL,_NO_HE386 , NULL );
		MNU_setObj(obj, 6, MNU_NOR, 'C', msg_CCI   , NULL,_NO_CCI   , NULL );
		MNU_setObj(obj, 7, MNU_NOR, 'S', msg_SDK   , NULL,_NO_SDK   , NULL );
		MNU_setObj(obj, 8, MNU_BLK,  0 , NULL      , NULL, 0        , NULL );
		MNU_setObj(obj, 9, MNU_NOR, 'I', msg_start , NULL,_NO_START , NULL );

		if ( mnu == NULL )
			mnu = MNU_open( DlgX0, DlgY0, MNUATT_EXIT, obj, "INSTALLER MENU" );
		ret = MNU_start ( mnu );
		if ( ret < 0 )
			break;
		switch ( ret )
		{
			case _NO_HELP:		goto _HELP;
			case _NO_HEWIN:		_set_instPath("HEwin"   ,Path_HEWIN  );	break;
			case _NO_EDIA:		_set_instPath("EDIA"    ,Path_EDIA   );	break;
			case _NO_GSPLAY:	_set_instPath("GSPLAY"  ,Path_GSPLAY );	break;
			case _NO_HE386:		_set_instPath("HE386"   ,Path_HE386  );	break;
			case _NO_CCI:		_set_instPath("CCI"     ,Path_CCI    );	break;
			case _NO_SDK:		_set_instPath("Sidework",Path_SDK    );	break;
			case _NO_START:		goto _LOOP_EXIT;
		}
	}
_LOOP_EXIT:
	MNU_close(mnu);	mnu = NULL;
	MNU_free(obj);	obj = NULL;

	if ( ret == _NO_START )
	{	/* インストール開始	*/
		ret = _install_start();
		if ( ret > 0 )
			goto _MENU;
	}
	return (NORMAL);
}
