/*************************************************************************
*	GSPLAY
*************************************************************************/

/*#define	_GSPLAY_COPY_INSTDATA*/

int		_gsplay_set_instdata(char *instdir);

int		_gsplay_config(char *instdir, int item_setup)
{
	int			ret;
	char	   *mnu_midi, *mnu_internal, *mnu_rsmidi, *mnu;
	char		tmp[128], *msg;

	_gsplay_midi            =  0;	/* port A */
	_gsplay_rsmidi          = -1;
	_gsplay_internal        = -1;
	_gsplay_datapath_fmb[0] = '\0';
	_gsplay_datapath_pmb[0] = '\0';
	_gsplay_datapath_snd[0] = '\0';

	_tc_pre_config( instdir, "gsplay.exp", "GSPLAY" );

	if ( item_setup )
	{
		mnu_midi     = MNU_open();
		mnu_rsmidi   = MNU_open();
		mnu_internal = MNU_open();

		MNU_datAdd( mnu_midi   , 0, 'A', Rom16x16, 0x01, "", NULL, "port A (card-1)");
		MNU_datAdd( mnu_midi   , 0, 'B', Rom16x16, 0x02, "", NULL, "port B (card-1)");
		MNU_datAdd( mnu_midi   , 0, 'C', Rom16x16, 0x03, "", NULL, "port C (card-2)");
		MNU_datAdd( mnu_midi   , 0, 'D', Rom16x16, 0x04, "", NULL, "port D (card-2)");
		MNU_datAdd( mnu_midi   , 0, 'E', Rom16x16, 0x05, "", NULL, "port E (card-3)");
		MNU_datAdd( mnu_midi   , 0, 'F', Rom16x16, 0x06, "", NULL, "port F (card-3)");
		MNU_datAdd( mnu_midi   , 0, 'G', Rom16x16, 0x07, "", NULL, "port G (card-4)");
		MNU_datAdd( mnu_midi   , 0, 'H', Rom16x16, 0x08, "", NULL, "port H (card-4)");
		MNU_datAdd( mnu_midi   , 0,  0 , NULL    ,    0, "", 0, NULL );
		MNU_datAdd( mnu_midi   , 0, 'O', Rom16x16, 0x00, "", NULL, "MIDI device not use");
		MNU_setPosition(mnu_midi,-1);

		MNU_datAdd( mnu_rsmidi  , 0, '1', Rom16x16, 0x21, "", NULL, "ON  使う");
		MNU_datAdd( mnu_rsmidi  , 0, '0', Rom16x16, 0x20, "", NULL, "OFF 使わない");
		MNU_setPosition(mnu_rsmidi,-1);

		MNU_datAdd( mnu_internal, 0, '1', Rom16x16, 0x31, "", NULL, "ON  使う");
		MNU_datAdd( mnu_internal, 0, '0', Rom16x16, 0x30, "", NULL, "OFF 使わない");
		MNU_setPosition(mnu_internal,-1);

		do
		{
			if ( (mnu = MNU_open()) == NULL )
				break;
			MNU_setTitle( mnu, Fnt16x16, "GSPLAY 演奏データ出力デバイス" );
			if ( _gsplay_midi < 0 )
			{
				msg = "not use";
			} else
			{
				msg = tmp;
				sprintf(msg,"port %c",_gsplay_midi + 'A' );
			}
			MNU_mnuAdd( mnu, 0, 'M', Fnt16x16, mnu_midi    , "MIDI         [%s]", msg);

			msg = (_gsplay_rsmidi < 0) ? "not use" : "ON";
			MNU_mnuAdd( mnu, 0, 'I', Fnt16x16, mnu_rsmidi  , "RS-232C MIDI [%s]", msg);

			msg = (_gsplay_internal < 0) ? "not use" : "ON";
			MNU_mnuAdd( mnu, 0, 'I', Fnt16x16, mnu_internal, "内蔵音源     [%s]", msg);

			MNU_datAdd( mnu, 0,  0 , NULL    ,    0, "", 0, NULL );
			MNU_datAdd( mnu, 0, 'N', Rom16x16, 0xFF, "", 0, " >>> 次へ進む >>>");

			MNU_setPosition(mnu,DLGPOS_NORMAL,8,32);
			ret = MNU_start(mnu);
			if ( ret >= 0x01 && ret <= 0x08 )
			{
				_gsplay_midi = ret - 0x01;
			} else
			{
				switch ( ret )
				{
					case 0x00:	_gsplay_midi     = -1;	break;
					case 0x20:	_gsplay_rsmidi   = -1;	break;
					case 0x21:	_gsplay_rsmidi   =  0;	break;
					case 0x30:	_gsplay_internal = -1;	break;
					case 0x31:	_gsplay_internal =  0;	break;
				}
			}
			MNU_close(mnu);
			MNU_datClear(mnu);
		} while ( ret != 0xFF );
		MNU_datClear(mnu_midi    );
		MNU_datClear(mnu_rsmidi  );
		MNU_datClear(mnu_internal);
	}
	_gsplay_set_instdata(instdir);

	return (NORMAL);
}

/* 内蔵音源音色データのインストール指定	*/
int		_gsplay_set_instdata(char *instdir)
{
#ifdef	_GSPLAY_COPY_INSTDATA
	int			ret;
	char	   *dlgTxm;
	char	   *mnu, *mnu_fmb, *mnu_pmb, *mnu_snd;
	char	   *msg, *msg1, *msg2;

	dlgTxm = DlgTxm_open(ColBoxNormal);
	DlgTxm_setTitle(dlgTxm,Fnt16x16,"GSPLAY環境設定");

	DlgTxm_putf( dlgTxm, Fnt16x16, TXMDAT_ATT_CENTER, "内蔵音源用の音色データファイルをインストールしますか？");
	DlgTxm_putf( dlgTxm, Fnt16x12, TXMDAT_ATT_CENTER, "");
	DlgTxm_putf( dlgTxm, Fnt16x16, TXMDAT_ATT_CENTER, "　CD-ROMを指定すると音色データはCD-ROM（Ｑドライブ）から");
	DlgTxm_putf( dlgTxm, Fnt16x16, TXMDAT_ATT_CENTER, "読み込むように設定されます。                            ");

	DlgTxm_setBtn( dlgTxm, Fnt16x16, 128, 20, C_MBLACK, C_WHITE, C_HILIGHT, C_DARK,
	     'I'  , KA_I     , 1, "", 0, "ｲﾝｽﾄｰﾙする : [I]");
	DlgTxm_setBtn( dlgTxm, Fnt16x16, 128, 20, C_MBLACK, C_WHITE, C_HILIGHT, C_DARK, 
	    'R'   , KA_R     ,  2, "", 0, "CD-ROM : [R]");
	DlgTxm_setBtn( dlgTxm, Fnt16x16, 128, 20, C_MBLACK, C_WHITE, C_HILIGHT, C_DARK,
	    '\x1B', KA_CANCEL,  0, "", 0, "しない : [取消I]");

	DlgTxm_setSize(dlgTxm,320,40);
	DlgTxm_setPosition(dlgTxm,DLGPOS_CENTER_OF_SCREEN);
	do
	{
		ret = DlgTxm_start(dlgTxm);
	} while ( ret < 0 );
	DlgTxm_close(dlgTxm);

	if ( ret == 1 )
	{	/* インストールする	*/
		strcpy( _gsplay_datapath_snd, _gsplay_datapath); add_path_fn( _gsplay_datapath_snd, "SND");
		strcpy( _gsplay_datapath_fmb, _gsplay_datapath); add_path_fn( _gsplay_datapath_fmb, "FMB");
		strcpy( _gsplay_datapath_pmb, _gsplay_datapath); add_path_fn( _gsplay_datapath_pmb, "PMB");

		mnu_fmb = MNU_open();
		mnu_pmb = MNU_open();
		mnu_snd = MNU_open();

		msg1 = "ｲﾝｽﾄｰﾙ先を指定";
		msg2 = "CD-ROMから読込";

		MNU_datAdd( mnu_fmb, 0, '1', Rom16x16, 0x11, "", NULL, msg1);
		MNU_datAdd( mnu_fmb, 0, '0', Rom16x16, 0x10, "", NULL, msg2);
		MNU_setPosition(mnu_fmb,-1);

		MNU_datAdd( mnu_pmb, 0, '1', Rom16x16, 0x21, "", NULL, msg1);
		MNU_datAdd( mnu_pmb, 0, '0', Rom16x16, 0x20, "", NULL, msg2);
		MNU_setPosition(mnu_pmb,-1);

		MNU_datAdd( mnu_snd, 0, '1', Rom16x16, 0x31, "", NULL, msg1);
		MNU_datAdd( mnu_snd, 0, '0', Rom16x16, 0x30, "", NULL, msg2);
		MNU_setPosition(mnu_snd,-1);

		do
		{
			if ( (mnu = MNU_open()) == NULL )
				break;

			MNU_setTitle( mnu, Fnt16x16, "GSPLAY 音色データのインストール先" );

			msg = (_gsplay_datapath_fmb[0] != '\0') ? _gsplay_datapath_fmb : "CD-ROMから読み込む";
			MNU_mnuAdd( mnu, 0, 'F', Fnt16x16, mnu_fmb, "FMB ファイル [%s]", msg);

			msg = (_gsplay_datapath_pmb[0] != '\0') ? _gsplay_datapath_pmb : "CD-ROMから読み込む";
			MNU_mnuAdd( mnu, 0, 'P', Fnt16x16, mnu_pmb, "PMB ファイル [%s]", msg);

			msg = (_gsplay_datapath_snd[0] != '\0') ? _gsplay_datapath_snd : "CD-ROMから読み込む";
			MNU_mnuAdd( mnu, 0, 'S', Fnt16x16, mnu_snd, "SND ファイル [%s]", msg);

			MNU_datAdd( mnu, 0,  0 , NULL    ,    0, "", 0, NULL );
			MNU_datAdd( mnu, 0, 'N', Rom16x16, 0xFF, "", 0, " >>> 次へ進む >>>");

			MNU_setPosition(mnu,DLGPOS_NORMAL,8,32);
			ret = MNU_start(mnu);
			switch ( ret )
			{
				case 0x10: strcpy( _gsplay_datapath_fmb, "@:/TAROPYON/DATA/FMB");	break;
				case 0x11: APL_setInstallDir(_gsplay_datapath_fmb, "FMB ファイルのインストール先"); break;
				case 0x20: strcpy( _gsplay_datapath_pmb, "@:/TAROPYON/DATA/PMB");	break;
				case 0x21: APL_setInstallDir(_gsplay_datapath_pmb, "PMB ファイルのインストール先"); break;
				case 0x30: strcpy( _gsplay_datapath_snd, "@:/TAROPYON/DATA/SND");	break;
				case 0x31: APL_setInstallDir(_gsplay_datapath_snd, "SND ファイルのインストール先"); break;
			}
			MNU_close(mnu);
			MNU_datClear(mnu);
		} while ( ret != 0xFF );
		MNU_close(mnu_fmb);
		MNU_close(mnu_pmb);
		MNU_close(mnu_snd);
	} else if ( ret == 2 )
	{	/* CD-ROM 読み込み */
		strcpy( _gsplay_datapath_fmb, "@:/TAROPYON/DATA/FMB");
		strcpy( _gsplay_datapath_pmb, "@:/TAROPYON/DATA/PMB");
		strcpy( _gsplay_datapath_snd, "@:/TAROPYON/DATA/SND");
	}
#else
	int			ret;
	char	   *dlgTxm;
	char	   *mnu, *mnu_fmb, *mnu_pmb, *mnu_snd;

	if ( _gsplay_internal < 0 )
		return (NORMAL);

	dlgTxm = DlgTxm_open(ColBoxNormal);
	DlgTxm_setTitle(dlgTxm,Fnt16x16,"GSPLAY");

	DlgTxm_putf( dlgTxm, Fnt16x16, TXMDAT_ATT_CENTER, "内蔵音源で演奏するには音色データファイルが必要です。");
	DlgTxm_putf( dlgTxm, Fnt16x12, TXMDAT_ATT_CENTER, "");
	DlgTxm_putf( dlgTxm, Fnt16x16, TXMDAT_ATT_CENTER, "ただし，著作権の関係で音色データファイルは");
	DlgTxm_putf( dlgTxm, Fnt16x16, TXMDAT_ATT_CENTER, "CD-ROMには収録されていません。            ");

	DlgTxm_setBtn( dlgTxm, Fnt16x16, 128, 20, C_MBLACK, C_WHITE, C_HILIGHT, C_DARK, '\r' , KA_EXEC,
	    1, "", 0, "OK : [実行]");

	DlgTxm_setSize(dlgTxm,320,40);
	DlgTxm_setPosition(dlgTxm,DLGPOS_CENTER_OF_SCREEN);
	do
	{
		ret = DlgTxm_start(dlgTxm);
	} while ( ret < 0 );
	DlgTxm_close(dlgTxm);
#endif
	return (NORMAL);
}

int		_gsplay_install(char *instdir,int item_setup)
{
	int			ret, att, drv;
	char	   *srcdir, *instfile;
	char	   *item_prog, *item_ttl, item_para[128];
	int			item_att;
	char		tmp[256], ttl[80];

	syl_putf("GSPLAY INSTALL");

	srcdir       = "/TAROPYON/GSPLAY";
	instfile     = "*.exp *.dat *.gsd *.doc *.mex *.mid *.mtk *.kok *.tif";
	item_prog    = "GSPLAY.EXP";
	item_ttl     = "GSPLAY/pure";
	item_para[0] = '\0';
	item_att     = 2;

	srcdir = _tc_getFcopySrcDir(srcdir,tmp);
	att    = _FCOPY_MODE_INIT;
	ret    =  FCOPY_exec(att, srcdir, instfile, instdir);

	/* 音色データのインストール	*/
	if ( ret == NORMAL && isalpha(_gsplay_datapath_fmb[0]) )
	{
		srcdir = _tc_getFcopySrcDir( "/TAROPYON/DATA/FMB", tmp);
		ret = FCOPY_exec(att, srcdir, "*.fmb", _gsplay_datapath_fmb);
	}
	if ( ret == NORMAL && isalpha(_gsplay_datapath_pmb[0]) )
	{
		srcdir = _tc_getFcopySrcDir( "/TAROPYON/DATA/PMB", tmp);
		ret = FCOPY_exec(att, srcdir, "*.pmb", _gsplay_datapath_pmb);
	}
	if ( ret == NORMAL && isalpha(_gsplay_datapath_snd[0]) )
	{
		srcdir = _tc_getFcopySrcDir( "/TAROPYON/DATA/SND", tmp);
		ret = FCOPY_exec(att, srcdir, "*.snd", _gsplay_datapath_snd);
	}

	/* 環境設定	--------------------------------------------------------*/
	if ( ret == NORMAL )
	{
		syl_putf("GSPLAY CUSTOMIZE");
		_gsplay_setup(instdir,item_setup);
	}

	if ( ret == NORMAL && item_setup != 0 )
	{	/* アイテム登録	*/
		syl_putf("GSPLAY ITEM SETUP");

		strcpy(tmp,instdir);
		add_path_fn(tmp,item_prog);

		drv = toupper(instdir[0]) - 'A';
		if ( _gsplay_midi >= 0 )
		{
			item_ttl = "GSPLAY/pure (MIDI)";
			sprintf(item_para,"-gsPort %c", _gsplay_midi + 'A');
			item_setApl( drv, 1024, item_ttl, tmp, item_para, item_att );
		}
		if ( _gsplay_internal >= 0 )
		{
			item_ttl = "GSPLAY/pure (内蔵)";
			strcpy(item_para,"-gsPort A -intPort A");
			item_setApl( drv, 1024, item_ttl, tmp, item_para, item_att );
		}
		if ( _gsplay_rsmidi >= 0 )
		{
			item_ttl = "GSPLAY/pure (RS)";
			strcpy(item_para,"-rsmidi -gsPort R");
			item_setApl( drv, 1024, item_ttl, tmp, item_para, item_att );
		}
	}

	return (ret);
}

char	*_gsplay_snd_dir[12] =
{
	"808"  ,
	"BRUSH",
	"ELEC" ,
	"INST" ,
	"ORCHE",
	"PERC" ,
	"POWER",
	"ROOM" ,
	"SFX"  ,
	"STD"  ,
	NULL    
};

int		_gsplay_setup(char *instdir,int item_setup)
{
	int			i;
	char		fn[256], tmp[256], *dir;
	char	   *fp;

	/* FMB ファイル	*/
	if ( _gsplay_datapath_fmb[0] != '\0' )
	{
		strcpy( fn, instdir);	add_path_fn( fn, "fminst.dat");
		if ( (fp = FS_fopen(fn,"wb")) != NULL )
		{
			if ( _gsplay_datapath_fmb[0] == '@' )
			{	/* CD-ROM ドライブ読み込み	*/
				fprintf(fp,"Q:/TAROPYON/DATA/FMB\r\n");
			} else
			{	/* インストール	*/
				fprintf(fp,"%s\r\n", _gsplay_datapath_fmb );
			}
			FS_fclose(fp);
		}
	}

	/* PMB ファイル	*/
	if ( _gsplay_datapath_pmb[0] != '\0' )
	{
		strcpy( fn, instdir);	add_path_fn( fn, "pcminst.dat");
		if ( (fp = FS_fopen(fn,"wb")) != NULL )
		{
			if ( _gsplay_datapath_pmb[0] == '@' )
			{	/* CD-ROM ドライブ読み込み	*/
				fprintf(fp,"Q:/TAROPYON/DATA/PMB\r\n");
			} else
			{	/* インストール	*/
				fprintf(fp,"%s\r\n", _gsplay_datapath_pmb );
			}
			FS_fclose(fp);
		}
	}

	/* SND ファイル	*/
	if ( _gsplay_datapath_snd[0] != '\0' )
	{
		strcpy( fn, instdir);	add_path_fn( fn, "sndinst.dat");
		if ( (fp = FS_fopen(fn,"wb")) != NULL )
		{
			for ( i = 0; _gsplay_snd_dir[i] != NULL; ++i )
			{
				dir = _gsplay_snd_dir[i];
				if ( _gsplay_datapath_snd[0] == '@' )
				{	/* CD-ROM ドライブ読み込み	*/
					fprintf(fp,"Q:/TAROPYON/DATA/SND/%s\r\n", dir );
				} else
				{
					strcpy( tmp, instdir);
					add_path_fn(tmp,dir);
					fprintf(fp,"%s\r\n", tmp );
				}
			}
			FS_fclose(fp);
		}
	}

	return (NORMAL);
}
