/*************************************************************************
*	テキストエディタ・ツール
*************************************************************************/

int		_tdp_extra_filter(char *txd,int mode)
{
	int			ret;
	size_t		len;
	char		*dlg;
	char		*btn;
	static char	buf1[128], buf2[128];
	char		*pathtmp, pathsrc[256], pathdst[256], tmp[256];
	char		*buf, *msg, cmd[1024];

	DSP_writePage(1);
	if ( mode ==  0 )
	{	/* リダイレトク形式	*/
		buf = buf1;
		msg = "command  <input  >output （リダイレクト）";
	} else
	{	/* パラメータ形式	*/
		buf = buf2;
		msg = "command  input  output （パラメータ）";
	}
	dlg = DLG_getsOpen( DLGPOS_MOS_SET_HOME, DLGPOS_MOS_SET_HOME, 320,
	    "%s", msg );
	DLG_getsSetTitle( dlg, "外部フィルタコマンドの起動" );
	ret = DLG_getsStart( dlg, 127, buf );
	DLG_getsClose(dlg);
	if ( ret > 0 )
	{
		if ( (pathtmp = getenv("TMP")) == NULL )
			pathtmp = "./";	/* カレント	*/
		len = strlen(pathtmp);
		if ( len > 0 && FS_isdelim(pathtmp[len-1]) == 0 )
		{
			sprintf( tmp,"%s/$tdptmp.)1(", pathtmp );	FS_unix2dos(pathsrc,tmp);
			sprintf( tmp,"%s/$tdptmp.)2(", pathtmp );	FS_unix2dos(pathdst,tmp);
		} else
		{
			sprintf( tmp,"%s$tdptmp.)1(", pathtmp );	FS_unix2dos(pathsrc,tmp);
			sprintf( tmp,"%s$tdptmp.)2(", pathtmp );	FS_unix2dos(pathdst,tmp);
		}
		if ( mode ==  0 )
			sprintf( cmd, "%s <%s >%s", buf, pathsrc, pathdst );
		else
			sprintf( cmd, "%s %s %s", buf, pathsrc, pathdst );

		/* 実行の確認	*/
		btn = MNU_allocBtn(3);
		MNU_setBtn( btn, 0, '\r'  , KA_EXEC  , 1, "EXECUTE : [実行]" );
		MNU_setBtn( btn, 1, 'E'   , KA_E     , 2, "EX. (console) : [E]" );
		MNU_setBtn( btn, 2, '\x1B', KA_CANCEL, 3, "CANECEL : [取消]" );
		ret = MNU_selectBtn( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN, 
		    C_MBLACK, C_DLGBASE, COLMIX(C_WARNNING,C_GRAY),
		    SELBTN_ATT_CENTER, 3, btn,
		    "  command: %s  \n    実行しますか？  \n",
		    cmd );
		MNU_freeBtn( btn );

		if ( ret == 1 || ret == 2 )
		{	/* 実行	*/
			if ( TXD_saveFile2(txd,pathsrc,0) == NORMAL )
			{
				if ( ret == 1 )
					system( cmd );	/* サイレント	*/
				else
					cci_system( "FILTER COMMAND", cmd );

				btn = MNU_allocBtn(3);
				MNU_setBtn( btn, 0, 'E'   , KA_E     , 1, "EDIT : [E]" );
				MNU_setBtn( btn, 1, '\r'  , KA_EXEC  , 2, "VIEW : [実行]" );
				MNU_setBtn( btn, 2, '\x1B', KA_CANCEL, 3, "CANECEL : [取消]" );
				ret = MNU_selectBtn( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN, 
				    C_MBLACK, C_DLGBASE, COLMIX(C_WARNNING,C_GRAY),
				    SELBTN_ATT_CENTER, 3, btn,
				    "変換終了しました。\nEDIT   : 編集\nVIEW   : 閲覧\nCANCEL : 取消" );
				MNU_freeBtn( btn );

				if ( ret == 1 )
				{	/* 編集	*/
					TXD_clearBuffer(txd);
					TXD_readFile2(txd,pathdst,0);
				} else if ( ret == 2 )
				{	/* 閲覧	*/
					TXD_tmpEdit(txd,pathdst,"Extract filter");
				}
			}
		}
	}
	return (NORMAL);
}

int		TxdUsr_extra_filter(char *txd)
{
	return _tdp_extra_filter(txd,0);
}

int		TxdUsr_extra_filter2(char *txd)
{
	return _tdp_extra_filter(txd,1);
}

