//{###テキスト塗りつぶし FillText Ver.0.01
//(c) 2000 Yujiro Nakamura(yujiro@botan.sakura.ne.jp)

/* 更新履歴
2000/08/27(Sun)16:15	作成開始 すぐ完成
2000/10/02(Mon)01:50	ダイアログが変だったのでちと直す（まだ変）
*/

#pragma TXE

#include <_wz.h>
#include "windows.h"

#define __FILLTEXT__ 001


void ChangeFile(txstr szSrc,txstr szDst)
{
	TX* textSrc = textopen(szSrc);
	TX* textDst = textopen(szDst);
	txDeleteText(textSrc);
	txInsertText(textSrc,textDst);
	txSave(textSrc);
	textclose(textSrc);
	textclose(textDst);
}

BOOL ChangeDir(txstr szSrcFolder,txstr szExt,txstr szDstFile,BOOL fSubFolder)
{
	txstr szFindBuff;
	sprintf(szFindBuff,"%s*.*",szSrcFolder);
	WIN32_FIND_DATA filefind;
	HANDLE hFindFile = FindFirstFile(szFindBuff,&filefind);
	do {
		txstr szFileName = filefind.cFileName;
		if(filefind.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){	//ディレクトリの場合
			if(fSubFolder && !(szFileName == "..") && !(szFileName == ".")){		//fSubFolderがONで、さらに.と..は除外
				if(!ChangeDir(szSrcFolder + szFileName + "\\",szExt,szDstFile,fSubFolder)){
					return FALSE;
				}
			}
		}
		else{
			if(pathIsExt(szFileName,szExt) || szExt == "*"){	//拡張子がszExtなら
				ChangeFile(szSrcFolder + szFileName,szDstFile);
			}
		}
	} while(FindNextFile(hFindFile,&filefind));
	FindClose(hFindFile);
	return TRUE;
	
}


void TxeMain()
{
	BOOL fSubFolder = TRUE;
	txstr szSrcFolder,szTargetExt,szDstFile;
	HDIALOG hd = dialog("テキスト塗りつぶし");
	dialogControlRefer(hd,"-d");
	dialogTxstr(hd,"入力フォルダ",10,szSrcFolder,40);
	dialogCheck(hd,"サブフォルダも対象",&fSubFolder);
	dialogTxstr(hd,"対象拡張子",10,szTargetExt,40);
	dialogCaption(hd,";で区切って複数指定");
	dialogControlRefer(hd,"-a");
	dialogTxstr(hd,"塗りつぶしに使うファイル",20,szDstFile,30);
	if(dialogOpen(hd)){
		if(strcmp(szSrcFolder,"")){
			TX* textExt = textnew();//拡張子展開用バッファ
			pathSetDir(szSrcFolder);

			//szTargetExtをバッファテキストに展開
			txInsertf(textExt,szTargetExt);
			txJumpFileEnd(textExt);
			if(txGetPrevChar(textExt) == ';') txDeletePrev(textExt);
			txJumpFileTop(textExt);
			txReplaceEx(textExt,";","\\n",NULL);
			//拡張子ごとに検索を行なう もうちと効率良くできんかね
			do {
				txstr szExt;
				txGetPara(textExt,szExt);
				ChangeDir(szSrcFolder,szExt,szDstFile,fSubFolder);
			} while(txNextPara(textExt));
		}
	}
}
