/*************************************************************************
*	"ish.c" : ish file converter サポート用
*************************************************************************/

#define	_ISH_MD_S	0
#define	_ISH_MD_7	1
#define	_ISH_MD_8	2
#define	_ISH_MD_N	3

#define	_ISH_OS_MSDOS	0
#define	_ISH_OS_UNIX	1
#define	_ISH_OS_MAC		2
#define	_ISH_OS_CPM		3
#define	_ISH_OS_OS9		4
#define	_ISH_OS_OTHER	5
#define	_ISH_OS_ALL		6

int		_ish_md = _ISH_MD_S;
int		_ish_os = _ISH_OS_MSDOS;
int		_ish_mv = 0;

int		_ish_setMd()
{
	int		ret;
	char	*obj;
	char	*mnu;

	obj = MNU_alloc(4);
	MNU_setObj(obj, 0, MNU_NOR, 'S', " shift jis " , NULL, _ISH_MD_S, NULL, NULL );
	MNU_setObj(obj, 1, MNU_NOR, '7', " jis 7"      , NULL, _ISH_MD_7, NULL, NULL );
	MNU_setObj(obj, 2, MNU_NOR, '8', " jis 8"      , NULL, _ISH_MD_8, NULL, NULL );
	MNU_setObj(obj, 3, MNU_NOR, 'N', " non-kana"   , NULL, _ISH_MD_N, NULL, NULL );
	mnu = MNU_open( DLGPOS_MOS_SET_HOME, DLGPOS_MOS_SET_HOME,
	    MNUATT_EXIT, obj, "ISH 作成モード" );
	ret = MNU_start ( mnu );
	MNU_close(mnu);
	MNU_free(obj);
	if ( ret >= 0 )
		_ish_md = ret;
	return (0);
}

int		_ish_setOs()
{
	int		ret;
	char	*obj;
	char	*mnu;

	obj = MNU_alloc(7);
	MNU_setObj(obj, 0, MNU_NOR, 'D', " MS-DOS " , NULL, _ISH_OS_MSDOS, NULL, NULL );
	MNU_setObj(obj, 1, MNU_NOR, 'U', " UNIX"    , NULL, _ISH_OS_UNIX , NULL, NULL );
	MNU_setObj(obj, 2, MNU_NOR, 'M', " Mac"     , NULL, _ISH_OS_MAC  , NULL, NULL );
	MNU_setObj(obj, 3, MNU_NOR, 'C', " CP/M"    , NULL, _ISH_OS_CPM  , NULL, NULL );
	MNU_setObj(obj, 4, MNU_NOR, '9', " OS-9"    , NULL, _ISH_OS_OS9  , NULL, NULL );
	MNU_setObj(obj, 5, MNU_NOR, 'O', " other"   , NULL, _ISH_OS_OTHER, NULL, NULL );
	MNU_setObj(obj, 6, MNU_NOR, 'A', " all"     , NULL, _ISH_OS_ALL  , NULL, NULL );

	mnu = MNU_open( DLGPOS_MOS_SET_HOME, DLGPOS_MOS_SET_HOME,
		MNUATT_EXIT, obj, "ISH OS 種別" );
	ret = MNU_start ( mnu );
	MNU_close(mnu);
	MNU_free(obj);
	if ( ret >= 0 )
		_ish_os = ret;
	return (0);
}

int		_ish_setMv()
{
	int		ret;
	char	*dlg;
	char	tmp[16], mv[16];

	if ( _ish_mv == 0 )
		strcpy( mv, "off");
	else
		sprintf( mv,"%d", mv );
	dlg = DLG_getsOpen( DLGPOS_MOS_SET_HOME, DLGPOS_MOS_SET_HOME, 320,
	     "    １ファイルの行数を入力してください（100〜9999）。  \n現在：%s",
	     mv );
	DLG_getsSetTitle( dlg, "ISH マルチボリューム設定" );
	tmp[0] = 0;
	ret = DLG_getsStart( dlg, 15, tmp );
	DLG_getsClose(dlg);
	if ( ret >= 0 )
	{	ret = atoi(tmp);	/* BugFix ver.1.01c#07 1993/08/21 */
		if ( ret > 99 && ret < 10000 )
			_ish_mv = ret;
	}
	return (0);
}

int		_ish_make( char *dcn )
{
	int		ret;
	char	*fdl;
	char	ish[128], dir[128], cmd[256];
	char	tmp[128];
	char	*md, *os, mv[16];

	/* オプション作成	*/
	switch ( _ish_md )
	{
		case _ISH_MD_S:	md = "/ss";	break;
		case _ISH_MD_7:	md = "/s7";	break;
		case _ISH_MD_8:	md = "/s8";	break;
		case _ISH_MD_N:	md = "/sn";	break;
	}
	switch ( _ish_os )
	{
		case _ISH_OS_MSDOS:	os = "/m" ;	break;
		case _ISH_OS_UNIX:	os = "/u" ;	break;
		case _ISH_OS_MAC:	os = "/ma";	break;
		case _ISH_OS_CPM:	os = "/c" ;	break;
		case _ISH_OS_OS9:	os = "/9" ;	break;
		case _ISH_OS_OTHER:	os = "/?" ;	break;
		case _ISH_OS_ALL:	os = "/*" ;	break;
	}
	if ( _ish_mv ==  0 )
		mv[0] = '\0';
	else
		sprintf( mv,"/mv %d", _ish_mv );

	if ( (fdl = FDL_open(0)) == NULL )
		return (ERR);
	FDL_set_title( fdl, "ISH ファイル作成");
	FDL_set_wildcard( fdl, "*.*");
	SYL_puts(C_HGREEN,"ISH ファイルにしたいファイルを選択してください。");
	if ( FDL_start(fdl) == NORMAL && FS_setFullPathname( tmp, FDL_get_filename(fdl)) == NORMAL )
	{
		FS_unix2dos( ish, tmp );
		ret = NORMAL;
	} else
		ret = ERR;
	if ( ret == NORMAL )
	{
		DLG_tmpMsgTime( DLGPOS_MOS_SET_CENTER, DLGPOS_MOS_SET_CENTER,
		    C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY),
		    3, "  %s : \n    ISH ファイルを作成するディレクトリに移動してください。  ",
		    ish );
		FDL_set_defaultFilename( fdl, "");
		FDL_set_title( fdl, "ISH : ディレクトリ指定");
		SYL_puts( C_HGREEN,
		    "ISH ファイルを作成したいディレクトリに移動してください。");
		ret = FDL_start(fdl);
		if ( ret == NORMAL )
		{
			sprintf( tmp, "%c:/%s", FDL_get_drv(fdl) + 'A', FDL_get_whare(fdl) );
			FS_unix2dos( dir, tmp );
			FDL_close(fdl);
			sprintf( cmd, "ish %s %s %s %s %s", ish, md, os, dir, mv );
			DCN_puts( dcn, cmd );
			DCN_exec( dcn, 0, cmd );
			ret = DCNCMD_PROMPT;
		} else
			FDL_close(fdl);
	} else
		FDL_close(fdl);

	SYL_clear();
	return (ret);
}

int		_ish_restore( char *dcn )
{
	int		ret;
	char	*fdl;
	char	ish[128], cmd[256], tmp[128];

	if ( (fdl = FDL_open(0)) == NULL )
		return (ERR);
	FDL_set_title( fdl, "ISH ファイルの復元");
	FDL_set_wildcard( fdl, "*.*");
	SYL_puts(C_HGREEN,"復元したいファイルを指定してください。");
	if ( FDL_start(fdl) == NORMAL && FS_setFullPathname( ish, FDL_get_filename(fdl)) == NORMAL )
		ret = NORMAL;
	else
		ret = ERR;
	if ( ret == NORMAL )
	{
		DLG_tmpMsgTime( DLGPOS_MOS_SET_CENTER, DLGPOS_MOS_SET_CENTER,
		    C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY),
		    3, "  %s : \n復元先するディレクトリに移動してください。  ",
		    ish );
		FDL_set_defaultFilename( fdl, "");
		FDL_set_title( fdl, "ISH : 復元先ディレクトリの指定");
		SYL_puts(C_HGREEN,
		    "ISH ファイルを復元したいディレクトリに移動してください。");
		ret = FDL_start(fdl);
		FDL_close(fdl);
		if ( ret == NORMAL )
		{
			FS_unix2dos( tmp, ish );
			sprintf( cmd, "ish %s /r", tmp );
			DCN_puts( dcn, cmd );
			DCN_exec( dcn, 0, cmd );
			ret = DCNCMD_PROMPT;
		}
	} else
		FDL_close(fdl);

	SYL_clear();
	return (ret);
}

int		_ish_setobj( char *obj )
{
	char	*md, *os, mv[16];

	switch ( _ish_md )
	{
		case _ISH_MD_S:	md = "shift jis";	break;
		case _ISH_MD_7:	md = "jis7"     ;	break;
		case _ISH_MD_8:	md = "jis8"     ;	break;
		case _ISH_MD_N:	md = "non-kana" ;	break;
	}
	switch ( _ish_os )
	{
		case _ISH_OS_MSDOS:	os = "MS-DOS";	break;
		case _ISH_OS_UNIX:	os = "UNIX"  ;	break;
		case _ISH_OS_MAC:	os = "Mac"   ;	break;
		case _ISH_OS_CPM:	os = "CP/M"  ;	break;
		case _ISH_OS_OS9:	os = "OS-9"  ;	break;
		case _ISH_OS_OTHER:	os = "other" ;	break;
		case _ISH_OS_ALL:	os = "all"   ;	break;
	}
	if ( _ish_mv ==  0 )
		strcpy( mv, "off");
	else
		sprintf( mv, "%d", _ish_mv );

	MNU_setObj(obj, 0, MNU_NOR, 'I', " ISH ファイルの作成 "  , NULL, 1, NULL        , NULL );
	MNU_setObj(obj, 1, MNU_STR, 'S', " 作成モード       %s " , md  , 0, "_ish_setMd", NULL );
	MNU_setObj(obj, 2, MNU_STR, 'O', " OS種別           %s " , os  , 0, "_ish_setOs", NULL );
	MNU_setObj(obj, 3, MNU_STR, 'M', " マルチボリューム %s " , mv  , 0, "_ish_setMv", NULL );
	MNU_setObj(obj, 4, MNU_BLK,  0 ,  NULL                   , NULL, 0, NULL        , NULL );
	MNU_setObj(obj, 5, MNU_NOR, 'R', " ISH ファイルの復元 "  , NULL, 2, NULL        , NULL );

	return (0);
}

int		dcn_ish_menu( char *dcn )
{
	int		ret;
	char	*obj;
	char	*mnu;

	obj = MNU_alloc(6);
	_ish_setobj(obj);
	mnu = MNU_open( DLGPOS_MOS_SET_HOME, DLGPOS_MOS_SET_HOME,
	    MNUATT_EXIT, obj, "ISH MENU" );
	while ( 1 )
	{
		ret = MNU_start ( mnu );
		if ( ret != 0 )
			break;
		_ish_setobj(obj);
	}
	MNU_close(mnu);
	MNU_free(obj);
	switch ( ret )
	{
		case 1:		return _ish_make(dcn);		/* 作成			*/
		case 2:		return _ish_restore(dcn);	/* 復元			*/
	}
	return (ERR);
}

#undef	_ISH_MD_S
#undef	_ISH_MD_7
#undef	_ISH_MD_8
#undef	_ISH_MD_N

#undef	_ISH_OS_MSDOS
#undef	_ISH_OS_UNIX
#undef	_ISH_OS_MAC
#undef	_ISH_OS_CPM
#undef	_ISH_OS_OS9
#undef	_ISH_OS_OTHER
#undef	_ISH_OS_ALL
