/*************************************************************************
*	"dcn.c"	: DOS コンソール用
*************************************************************************/

char	*_current_dcn;
char	*_cns_console;
char	_cns_comspec[128];

#define	DCNPTR	_current_dcn
#define	CONSOLE	_cns_console
#define	COMSPEC	_cns_comspec

#include	"dcntool.c"
#ifndef	_LHA_IGNORE
#	ifdef	_ARCHIVE_LHX
#		include	"lhx.c"
#	else
#		include	"lha.c"
#	endif
#endif
#include	"ish.c"
#include	"mktags.c"

/*************************************************************************
*	[COMMAND]ボタン
*************************************************************************/

int		DcnUsr_commandMenu( char *dcn, int x, int y )
{
	int		ret;
	char	*obj;
	char	*mnu;
	char	*cmd;

	obj = MNU_alloc(3);
	MNU_setObj(obj, 0, MNU_NOR, 'D', "Directory"    , NULL, 1, NULL, NULL );
	MNU_setObj(obj, 1, MNU_NOR, 'M', "MetaKey"      , NULL, 2, NULL, NULL );
	MNU_setObj(obj, 2, MNU_NOR, 'C', "CD Dictionary", NULL, 3, NULL, NULL );
	mnu = MNU_open( x, y, MNUATT_EXIT, obj, "COMMAND" );
	ret = MNU_start ( mnu );
	MNU_close(mnu);
	MNU_free(obj);
	switch ( ret )
	{
		case 1:
			cmd = "DIR";
			DCN_puts(dcn, cmd );
			DCN_puts(dcn, "\r\n" );
			DCN_exec(dcn, TRUE, cmd);
			ret = DCNCMD_PROMPT;
			break;
		case 2:
			DCN_metakey(dcn);
			ret = 0;
			break;
		case 3:
			DCN_puts(dcn, "\r\n" );
			DCN_dic(dcn);
			ret = DCNCMD_PROMPT;
			break;
	}
	return (ret);
}

/*************************************************************************
*	[PF-1]	MENU
*************************************************************************/

int		DcnUsr_func_01( char *dcn )
{
	return	DCN_menu( dcn );
}

/*************************************************************************
*	[PF-2]	DIR
*************************************************************************/

int		DcnUsr_func_02( char *dcn )
{
	int		ret;
	char	*fdl;

	if ( (fdl = FDL_open(0)) == NULL )
		return (ERR);
	FDL_set_title( fdl, "DIRECTORY");
	FDL_set_wildcard( fdl, "*.*");
	ret = FDL_start(fdl);
	FDL_close(fdl);

	DCN_puts(dcn, "\r\n" );
	if ( ret == NORMAL )
	{
#ifdef	_TAROPYON_SYSTEM
		DCN_exec( dcn, 0, "dr" );
#else
		DCN_exec( dcn, 0, "dir /w" );
#endif
	}
	return	(DCNCMD_PROMPT);
}

/*************************************************************************
*	[PF-3]	TOOL
*************************************************************************/

int		DcnUsr_func_03( char *dcn )
{
	int		ret;
	char	*mnu;
	char	*obj;

	obj = MNU_alloc(2);
	MNU_setObj(obj, 0, MNU_NOR, 'C' , "Copy"    , NULL, 1, NULL, NULL );
	MNU_setObj(obj, 1, MNU_NOR, 'D' , "Delete"  , NULL, 2, NULL, NULL );
	mnu = MNU_open( DLGPOS_MOS_SET_HOME, DLGPOS_MOS_SET_HOME,
	    MNUATT_EXIT, obj, "TOOL" );
	ret = MNU_start ( mnu );
	MNU_close(mnu);
	MNU_free(obj);
	switch ( ret )
	{
		case 1:	ret = _dcn_copy(dcn);	break;
		case 2:	ret = _dcn_delete(dcn);	break;
	}
	return (NORMAL);
}

/*************************************************************************
*	[PF-4]	UTY
*************************************************************************/

int		DcnUsr_func_04( char *dcn )
{
	int		ret;
	char	*mnu;
	char	*obj;

	obj = MNU_alloc(2);
	MNU_setObj(obj, 0, MNU_NOR, 'M' , "Make \x22tags\x22 file"          , NULL, 1, NULL, NULL );
	MNU_setObj(obj, 1, MNU_NOR, 'S' , "Search function defined position", NULL, 2, NULL, NULL );
	mnu = MNU_open( DLGPOS_MOS_SET_HOME, DLGPOS_MOS_SET_HOME,
	    MNUATT_EXIT, obj, "CCI UTILITY" );
	ret = MNU_start ( mnu );
	MNU_close(mnu);
	MNU_free(obj);
	switch ( ret )
	{
		case 1:		ret = _dcn_mktags(dcn);			break;
		case 2:		ret = _dcn_searchFunction(dcn);	break;
/*		case 3:		ret = _dcn_ciFind(dcn);			break;	*/
		default:	ret = NORMAL;	break;
	}
	return (ret);
}

/*************************************************************************
*	[PF-5]	SETUP
*************************************************************************/

int		DcnUsr_func_05( char *dcn )
{
	char		*cns;
	int			ret;
	char		*mnu;
	char		*obj;

	cns = DcnGetCnsPtr( dcn );

	obj = MNU_alloc(5);
	MNU_setObj(obj, 0, MNU_NOR, 'C' , "Change color table",	NULL, 1, NULL, NULL );
	MNU_setObj(obj, 1, MNU_NOR, 'T' , "Save color table"  ,	NULL, 2, NULL, NULL );
	MNU_setObj(obj, 2, MNU_BLK,  0  , NULL                ,	NULL, 0, NULL, NULL );
	MNU_setObj(obj, 3, MNU_NOR, 'S' , "Command setup"     ,	NULL, 3, NULL, NULL );
	MNU_setObj(obj, 4, MNU_NOR, 'E' , "Exp search path"   ,	NULL, 4, NULL, NULL );

	mnu = MNU_open( DLGPOS_MOS_SET_HOME, DLGPOS_MOS_SET_HOME,
		MNUATT_EXIT, obj, "SETUP" );
	ret = MNU_start ( mnu );
	MNU_close(mnu);
	MNU_free(obj);

	switch ( ret )
	{
		case 1:	DCN_changeColor( dcn );		break;
		case 2:	CnsUsr_saveColTbl( cns );	break;
		case 3:	Dcn_cmdSetup();				break;
		case 4:	CCI_setExpSearchPath();		break;
	}
	return (NORMAL);
}

/*************************************************************************
*	[PF-6]	CD辞書検索
*************************************************************************/

int		DcnUsr_func_06( char *dcn )
{
	DCN_puts(dcn, "\r\n" );
	DCN_dic(dcn);
	return	(DCNCMD_PROMPT);
}

/*************************************************************************
*	[PF-7]	LHa
*************************************************************************/

int		DcnUsr_func_07( char *dcn )
{
#ifndef	_LHA_IGNORE
#	ifdef	_ARCHIVE_LHX
	return dcn_lhx_menu( dcn );
#	else
	return dcn_lha_menu( dcn );
#	endif
#else
	return (NORMAL);
#endif
}

/*************************************************************************
*	[PF-8]	ISH
*************************************************************************/

int		DcnUsr_func_08( char *dcn )
{
	return	dcn_ish_menu( dcn );
}

/*************************************************************************
*	[PF-9]	MIEL
*************************************************************************/

int		DcnUsr_func_09( char *dcn )
{
	char	cmd[256];

	sprintf( cmd, "%s %s /C miel *.*", CONSOLE, COMSPEC );
	DCN_exec( dcn, 1, cmd );
	return (NORMAL);
}

/*************************************************************************
*	[PF-10]	ORICON
*************************************************************************/

int		DcnUsr_func_10( char *dcn )
{
	char	cmd[256];

	DLG_tmpMsgTime( DLGPOS_MOS_SET_CENTER, DLGPOS_MOS_SET_CENTER,
	    C_MBLACK, C_DLGBASE, COLMIX(C_TIMEBOX,C_GRAY),
	    3, "  ORICON を起動します。  \n    HEwinに戻るには[EXIT]とタイプしてください。  " );

	sprintf( cmd, "%s %s", CONSOLE, COMSPEC );
	DCN_exec( dcn, 0, cmd );
	return (NORMAL);
}

/*************************************************************************
*	[PF-11]	HELP
*************************************************************************/

int		DcnUsr_func_11( char *dcn )
{
	DCN_help(dcn);
}

/*************************************************************************
*	[PF-12]	▲▼
*************************************************************************/

int		DcnUsr_func_12( char *dcn )
{
	return	DCN_resizeMax(dcn);
}

/*************************************************************************
*	[SHIFT]＋[PF-12]	▽△
*************************************************************************/

int		DcnUsr_func_32( char *dcn )
{
	return	DCN_resizeMin(dcn);
}

#define	DCNTBL_NUM_SCNSAVE	(2)
char	*DcnTbl_scnSave[DCNTBL_NUM_SCNSAVE] = 
{
	"ARICON",	"ORICON"
};

/* 実行禁止	*/
#define	DCNTBL_NUM_IGNORE	(3)
char	*DcnTbl_ignore[DCNTBL_NUM_IGNORE] = 
{
	"386",	"RUN386", "OAK"
};

/* 確認	*/
#define	DCNTBL_NUM_CHECK	(2)
char	*DcnTbl_check[DCNTBL_NUM_CHECK] = 
{
	"POFF",	"REIPL"
};

char	*DcnTbl_pfkey[24] =
{
	"MENU",		"DIR",	"TOOL",	"UTY",	"SETUP",
	"CD.DIC",
#ifndef	_LHA_IGNORE
#	ifdef	_ARCHIVE_LHX
	"LHx",
#	else
	"LHa",
#	endif
#else
	"",
#endif

						"ISH",	"MIEL",	"ORICON",
	"HELP",	"▲▼",

	"",	"",	"",	"",	"",
	"",	"",	"",	"",	"",
	"",
	"▽△"
};

/*************************************************************************
*	DOS コンソール・システム初期化関数
*************************************************************************/

int		DcnUsr_sysInit()
{
	char	*s;
	int		i;

	if ( (s = getenv("COMSPEC")) == NULL )
		strcpy( COMSPEC, "C:\\COMMAND.COM" );
	else
		strcpy( COMSPEC, s );
	CONSOLE = "oricon";

	/* 画面の保存が必要なコマンド	------------------------------------*/
	for ( i = 0; i < DCNTBL_NUM_SCNSAVE; ++i )
		DcnSetCommand( DcnTbl_scnSave[i], DCN_CMDSYS_SCNSAVE);

	/* 実行を禁止するコマンド	----------------------------------------*/
	for ( i = 0; i < DCNTBL_NUM_IGNORE; ++i )
		DcnSetCommand( DcnTbl_ignore[i], DCN_CMDSYS_IGNORE);

	/* 実行前に確認を行うコマンド	------------------------------------*/
	for ( i = 0; i < DCNTBL_NUM_CHECK; ++i )
		DcnSetCommand( DcnTbl_check[i], DCN_CMDSYS_CHECK);

	/* ネイティブ子プロセス		----------------------------------------*/
	DcnSetCommand("LHx"    ,DCN_CMDSYS_EXP);
	DcnSetCommand("he386p" ,DCN_CMDSYS_EXP);
	DcnSetCommand("sz"     ,DCN_CMDSYS_EXP);
	DcnSetCommand("rz"     ,DCN_CMDSYS_EXP);
	DcnSetCommand("gsplay" ,DCN_CMDSYS_EXP|DCN_CMDSYS_SCNSAVE);
	DcnSetCommand("cci"    ,DCN_CMDSYS_EXP|DCN_CMDSYS_SCNSAVE);
	DcnSetCommand("znsplay",DCN_CMDSYS_EXP|DCN_CMDSYS_SCNSAVE);

	/* PFキー表示	----------------------------------------------------*/
	for ( i = 0; i < 24; ++i )
		DCN_setPfkeyMsg(  (i%12)+1, i/12, DcnTbl_pfkey[i] );

	return (NORMAL);
}

int		DcnUsr_sysTerm()
{
	return (NORMAL);
}

/*************************************************************************
*	DOS コマンド実行
*************************************************************************/

int		DcnUsr_system( char *dcn, char *cmd )
{
	DCN_system(dcn, cmd);
	return (NORMAL);
}

#undef	DCNPTR
#undef	CONSOLE
#undef	COMSPEC
#undef	DCNTBL_NUM_SCNSAVE
#undef	DCNTBL_NUM_IGNORE
#undef	DCNTBL_NUM_CHECK
