/*************************************************************************
*	テキストエディタ・ツール
*************************************************************************/

int		_txd_get_tmpPath( char *pathsrc, char *pathdst )
{
	size_t		len;
	char	   *pathtmp, tmp[256];

	if ( (pathtmp = getenv("TMP")) == NULL )
		pathtmp = "./";	/* カレント	*/
	len = strlen(pathtmp);
	if ( len > 0 && FS_isdelim(pathtmp[len-1]) == 0 )
	{
		sprintf( tmp,"%s/$xtrtmp.)1(", pathtmp );	FS_unix2dos(pathsrc,tmp);
		sprintf( tmp,"%s/$xtrtmp.)2(", pathtmp );	FS_unix2dos(pathdst,tmp);
	} else
	{
		sprintf( tmp,"%s$xtrtmp.)1(", pathtmp );	FS_unix2dos(pathsrc,tmp);
		sprintf( tmp,"%s$xtrtmp.)2(", pathtmp );	FS_unix2dos(pathdst,tmp);
	}
}

int		_tdp_extra_filter(char *txd,int mode)
{
	int				sel, ret, saveEofRead;
	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 )
		return (NORMAL);

	_txd_get_tmpPath( pathsrc, pathdst );
	if ( mode ==  0 )
		sprintf( cmd, "%s <%s >%s", buf, pathsrc, pathdst );
	else
		sprintf( cmd, "%s %s %s", buf, pathsrc, pathdst );
	if ( strlen(cmd) > 127 )
	{
		DLG_tmpMsgTime( DLGPOS_MOS_SET_CENTER, DLGPOS_MOS_SET_CENTER,
		    C_MBLACK, C_DLGBASE, COLMIX(C_TIMEBOX,C_GRAY),
		    3, "コマンド名が長すぎます" );
		return (ERR);
	}

	if ( TxdGet_selFlag(txd) )
	{	/* 選択範囲が対象	*/
		if ( TxdGet_selMode(txd) == TXD_CUTBUF_MODE_RECT )
		{	/* 矩形モードはサポートしない	*/
			return (ERR);
		}
		sel = 1;
	} else
	{	/* 全テキスト範囲が対象	*/
		sel = 0;
	}

	/* 実行の確認	*/
	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 ( sel )
		{
			if ( TXD_cutSave( txd, pathsrc, 0 ) )
				return (ERR);
		} else
		{
			if ( TXD_saveFile2(txd,pathsrc,0) )
				return (ERR);
		}

		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 == 2 )
		{	/* 閲覧	*/
			ret = 0;
			SYL_puts(C_INFO,"[SPACE:編集（結果の書き込み）");
			ret = TXD_tmpEdit(txd,pathdst,3,"Extract filter");
			if ( ret == ' ' )
				ret = 1;
		}

		if ( ret == 1 )
		{
			saveEofRead = TxdGet_eofRead(txd);
			TxdSet_eofRead(txd,FALSE);
			if ( sel )
			{
				TXD_cmdJump(txd,TXD_CUTDEL);		/* 選択範囲を削除		*/
				TXD_includeFile2(txd,pathdst,0);	/* 他ファイル取り込み	*/
			} else
			{	/* テキスト全体	*/
				TXD_clearBuffer(txd);
				TXD_readFile2(txd,pathdst,0);
			}
			TxdSet_eofRead(txd,saveEofRead);
			TXD_scnFlush(txd);	/* 画面再描画	*/
		}
	}
	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);
}


/*************************************************************************
*	全角スペースを半角に変換
*************************************************************************/

int		TxdUsr_spc_zen2han( char *txd )
{
	int			ret, mode, saveEofRead;
	size_t		len;
	char		*opt, *fnSetup;
	char		pathsrc[256], pathdst[256];
	char		cmd[1024];

	if ( TxdGet_editIgnore(txd) || TxdGet_writeIgnore(txd) )
		return (ERR);	/* 書き換え禁止	*/

	DSP_writePage(1);
	_txd_get_tmpPath( pathsrc, pathdst );

	if ( TxdGet_selFlag(txd) )
	{	/* 選択範囲が対象	*/
		if ( TxdGet_selMode(txd) == TXD_CUTBUF_MODE_RECT )
			return (ERR);	/* 矩形モードはサポートしない	*/
		mode = 1;
		if ( TXD_cutSave( txd, pathsrc, 0 ) )
			return (ERR);
	} else
	{	/* 全テキスト範囲が対象	*/
		mode = 0;
		if ( TXD_saveFile2(txd,pathsrc,0) )
			return (ERR);
	}

	/* コマンドの実行	------------------------------------------------*/
	sprintf(cmd,"sed -e \"s/　/  /g\" %s > %s", pathsrc, pathdst);

	cci_system("XTR TRANSFORM", cmd);

	saveEofRead = TxdGet_eofRead(txd);
	TxdSet_eofRead(txd,FALSE);
	if ( mode )
	{
		TXD_cmdJump(txd,TXD_CUTDEL);		/* 選択範囲を削除		*/
		TXD_includeFile2(txd,pathdst,0);	/* 他ファイル取り込み	*/
	} else
	{	/* テキスト全体	*/
		TXD_clearBuffer(txd);
		TXD_readFile2(txd,pathdst,0);
	}
	TxdSet_eofRead(txd,saveEofRead);
	TXD_scnFlush(txd);	/* 画面再描画	*/

	return (0);
}
