home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1998 January (DVD) / VPR980100.ISO / OLS / WIN32 / KAKIMAC / KAKIMACG.LZH / K_GREP3.MAC next >
Text File  |  1995-12-21  |  21KB  |  629 lines

  1. // k_GREP3.mac
  2. // ★変更可能な変数★ //
  3. #maxHidemaru=10;    //一度に開ける秀丸の数。(通常は10ですが、各自の環境により、10以上開いても安定である場合はもっと大きくしてください)
  4.  
  5. // [3.タイプイン方式]限定版
  6. $sBuffer=searchbuffer;#sFlug=searchoption;
  7. #hwndOrg=hidemaruhandle(0);
  8. disablebreak;
  9. top_grep:
  10. while(1){
  11. $outExtensionOrg="COM;EXE;DIC;DLL;FON;DRV;VBX;TTF;HLP;";
  12. $f0=hidemarudir+"\\kakimac\\k_grep00.kdf";
  13. #outExtensionYN=getininum($f0,"IT0","outExtensionYN");
  14. #showWide=getininum($f0,"IT0","HMSIZE");
  15. #historyFileYN=getininum($f0,"IT0","historyFileYN");
  16. if(#outExtensionYN){
  17.     $outExtension=getinistr($f0,"IT0","outExtension");
  18.     if($outExtension=="")$outExtension=$outExtensionOrg;
  19. }
  20. setGrepCondition1:
  21.     $TitleS="[タイプイン方式]";
  22.     $startDirIni=getinistr($f0,"IT0","startDirctory");
  23.     call checkOfRootDirOfINI $startDirIni;
  24.     $startDirInI=$$return;
  25.     $fileWildCardIni=getinistr($f0,"IT0","fileWildCard");
  26.     #subdirYN=getininum($f0,"IT0","subdirYN");
  27.     #regularYN=getininum($f0,"IT0","regularYN");
  28.     $sT0Ini=getinistr($f0,"IT0","sTarget0");
  29.     $sT1Ini=getinistr($f0,"IT0","sTarget1");
  30.     $sT2Ini=getinistr($f0,"IT0","sTarget2");
  31.     if(!#subdirYN)$mL1=" ◎ &D. grepを開始するディレクトリ= "+$startDirIni;
  32.     else $mL1=" ◎ &D. grepを開始するディレクトリ= "+$startDirIni+" ...<<subdir>>";
  33.     if(!#regularYN){
  34.         $mL3=" ◎ &1. 第1(最稀少)検索文字列= "+$sT0Ini;
  35.         $mL4=" ◎ &2. 第2(最必須)検索文字列= "+$sT1Ini;
  36.         $mL5=" ○ &3. 第3(次限定)検索文字列= "+$sT2Ini;
  37.     }else{
  38.         $mL3=" ◎ &1. 第1(最稀少)検索文字列= "+$sT0Ini+"  ...<<regular>>";
  39.         $mL4=" ◎ &2. 第2(最必須)検索文字列= "+$sT1Ini+"  ...<<regular>>";
  40.         $mL5=" ○ &3. 第3(次限定)検索文字列= "+$sT2Ini+"  ...<<regular>>";
  41.     }
  42.     menu 
  43.     "●ファイル検索の条件設定 "+$TitleS+" k_GREP Ver0.90 水銀水",
  44.     $mL1,
  45.     " ◎ &F. 検索ファイルワイルドカード指定= "+$fileWildCardIni,
  46.     $mL3,$mL4,$mL5,
  47.     "━━━━━━━━━━━━━━━━━━━━━━━━━━━",
  48.     "───[ k_GREP実行 &G ]───────────────",
  49.     "━━━━━━━━━━━━━━━━━━━━━━[停止 &e ]━",
  50.     "───────────[拡張設定 &s]──────────";
  51.  
  52.     if(result==0){endmacroall;goto setGrepCondition1;//whle-result のバグ(Ver.1.41?)回避
  53.     }else if(result==1){
  54.         call dispMSG 1;
  55.         message "●k_GREP Ver.1 ファイル検索の秘訣\n"+
  56.     "────────────────────────\n"+
  57.         "[高速検索の秘訣]..."+
  58.         "k_GREPの実効速度を決定するのは、\n(1)の最稀少文字列の選定です。"+
  59.         "\n 検索する文字列の中でできるかぎり「検出したいファ\nイル以外のファイルには、もっとも出現しないであろう\nと思われる文字列」(最稀少文字列)を(1)で指定する事\nが、スピードアップの秘訣です!!!\n"+
  60.         "────────────────────────\n"+
  61.         " Special Thanks to masasan in Seattle, U.S.A.\n"+
  62.         "(C)94,95 水銀水(Suigwinsui)/小田明夫(HGD01603)";
  63.         goto setGrepCondition1;
  64.     }else if(result==2){call getStartDir;goto setGrepCondition1;
  65.     }else if(result==3){call getFileWildcard;goto setGrepCondition1;
  66.     }else if(result==4){call set1stStrings;goto setGrepCondition1;
  67.     }else if(result==5){call set2ndStrings;goto setGrepCondition1;
  68.     }else if(result==6){call set3rdStrings;goto setGrepCondition1;
  69.     }else if(result==7){goto setGrepCondition1;
  70.     }else if(result==8){
  71.         call setNew101;
  72.         call wordCheck;
  73.         if(##return)break;
  74.         else goto setGrepCondition1;
  75.     }else if(result==9){
  76.         goto ending;
  77.     }else if(result==10){
  78.         execmacro "k_GREPst.mac";
  79.     }call setNew101;
  80.     if($startDir==""||$fileWildCard==""||$sT0==""||$sT1==""){
  81.         call dispMSG 2;
  82.     }
  83. }
  84. call ckeckFirstGrepOKFiles;//1回目のgrep結果からファイル名取得
  85. checkStrings2://ファイルに含まれる文字列をチェック
  86. call checkFileByString2;//第二文字列、第三文字列での再検索(全ファイルオープンによる)
  87. call firstInformation;
  88. if(##return)goto top_grep;
  89. #fsn=#fsn0;//現在までに開かれているファイルの数
  90. call dispResultOfFilesList;
  91. goto ending;
  92.  
  93. setNew101:
  94. $startDir=$startDirIni;
  95. $fileWildCard=$fileWildCardIni;
  96. $sT0=$sT0Ini;
  97. $sT1=$sT1Ini;
  98. $sT2=$sT2Ini;
  99. return;
  100.  
  101. wordCheck:// .Doc .DOc .DoC .DO? .d* などには未対応(^^;
  102. ##p1=strstr($fileWildCard,".doc");
  103. ##p2=strstr($fileWildCard,".DOC");
  104. ##p=##p1*##p2;
  105. if(##p<0){
  106.     question "●注意...検索ファイルの拡張子が\"DOC\"になっています。\n"+
  107.         "●説明...MS-WORDのファイルも検索対象に含んでしまいます。秀丸grepは、掟破り(推奨仕様外)であり(^^;、私の知る限りにおいて、あまり知られてもいないマイナーな使い方なんですけど、事実上、MS-WORDのファイルも検索できてしまいます。しかも、表題や著作名に記載されている文字列まで検索対象にしよりまんねん。ごっつい検索やりよりまぁ。\n"+
  108.         "●確認...まあ、検索スピードはえろお遅なりますけど。で、危ないのを承知でgrepしてもぉて、ほんま、よろしゅおまんねんな? ";
  109.     if(result)return 1;
  110.     else return 0;
  111. }else return 1;
  112.  
  113. ending:
  114. if(#changeFileName){
  115.     #hwndNow=hidemaruhandle(0);
  116.     if(#hwndOrg!=#hwndNow)setactivehidemaru #hwndOrg;
  117.     changename "";
  118.     insertfix "a";// (無題)(変更)の表示の(変更)を消すための操作(^^;ゞ
  119.     undo;
  120.     if(#hwndOrg!=#hwndNow)setactivehidemaru #hwndNow;
  121. }
  122. setsearch $sBuffer,#sFlug;
  123. title " ";
  124. title 1;
  125. endmacroall;
  126.  
  127. checkFileByString2:
  128. title "●第二検索文字列などで検索を開始...[Esc]中断";
  129. #MaxfNum=#fNum;
  130. #fsn0=0;
  131. #i=1;
  132. while(#i<=#MaxfNum){
  133.     disablebreak;
  134.     #gk=keypressed;
  135.     if(#gk==0x1B||#breakON==1){#breakON=1;break;}
  136.     if(findhidemaru($ffName[#i])==-1){
  137.         if($CurentFileON==$ffName[#i]){
  138.             #existedFile=1;
  139.             call check_ffNameOK_CaseOfOpenedFile;
  140.         }else{
  141.             #existedFile=0;
  142.             openfile "/h "+$ffName[#i];
  143.             if(!result){
  144.                 call dispMSG 3;
  145.                 setsearch $sBuffer,#sFlug;
  146.                 endmacroall;
  147.                 }
  148.             call check_ffNameOK_CaseOfOpenedFile;
  149.         }
  150.     }else{
  151.         #existedFile=1;
  152.         setactivehidemaru findhidemaru($ffName[#i]);
  153.         call check_ffNameOK_CaseOfOpenedFile;
  154.     }
  155.     if(#ffNameOK==1){
  156.         #MaxffNumY=#MaxffNumY+1;
  157.         if(#existedFile){
  158.             #fsn0=#fsn0+1;
  159.             if($CurentFileON==$ffName[#i]){
  160.                 $Mcheck[#MaxffNumY]="◎";
  161.                 #nijuu=#MaxffNumY;
  162.             }else{
  163.                 $Mcheck[#MaxffNumY]="○";
  164.             }
  165.             #openFileYN[#MaxffNumY]=1;
  166.             #openFileNumSN[#fsn0]=#MaxffNumY;
  167.         }else{
  168.             #openFileYN[#MaxffNumY]=0;
  169.              $Mcheck[#MaxffNumY]="□";
  170.         }
  171.         $ffNameMenu[#MaxffNumY]=$Mcheck[#MaxffNumY]+$ffName[#i];
  172.         $ffNameBody[#MaxffNumY]=$ffName[#i];
  173.     }
  174.     if($CurentFileON!=$ffName[#i]){
  175.         setactivehidemaru 1;
  176.         if(!#existedFile){closehidemaruforced #hwndGrepOK1;disablebreak;}
  177.     }
  178.     #gk=keypressed;
  179.     if(#gk==0x1B||#breakON==1){#breakON=1;break;}
  180.     title "● k_GREP 検索完遂度 [ "+str((100*#i)/#MaxfNum)+"%完了 ] (検出="+str(#MaxffNumY)+")  [Esc:中断]";
  181.     #i=#i+1;
  182. }
  183. return;
  184.  
  185. ckeckFirstGrepOKFiles://1回目のgrep結果からファイル名取得
  186. disabledraw;
  187. $CurentFileON=filename;
  188. title "●第一検索文字列のgrepの実行中...[Esc]中断";
  189. #hwndNOW=hidemaruhandle(0);
  190. if(filename!=""){
  191.     openfile "/(1500,1500,100,100)";
  192. }else{// 無題秀丸の場合は、無題を(ダミー)に換えて、k_GREP終了時に無題に戻す
  193.     changename "k_GREP.tmp";
  194.     #changeFileName=1;
  195.     openfile "/(1500,1500,1600,1600)";
  196. }
  197. #n1=1;
  198. #n0=0;
  199. #hwndGREPc=hidemaruhandle(0);
  200. $$gBuffer=searchbuffer;##gFlug=searchoption;
  201. if(#subdirYN){//★注意!『grepのパラメタは、いわゆるマクロ展開ができないので、文字型変数では設定出来ない。また、findup/downのようにsetsearchも当然効かない。』
  202.     if(!#regularYN)grep $sT0,$fileWildCard,$startDir,subdir,filelist;//この場合は([0-9]+)
  203.     else grep $sT0,$fileWildCard,$startDir,regular,subdir,filelist;//この場合は([0-9]+)
  204. }else{
  205.     if(!#regularYN) grep $sT0,$fileWildCard,$startDir,filelist;//
  206.     else grep $sT0,$fileWildCard,$startDir,regular,filelist;//
  207. }
  208. setsearch $$gBuffer,##gFlug;
  209. if(result==-1){
  210.     message "●報告...k_GREPは、第一段階のgrep実行中に途中停止されました。\n"+
  211.         "●対応...はじめの条件設定の画面に戻ります。";
  212.     setactivehidemaru #hwndNOW;
  213.     closehidemaruforced #hwndGREPc;
  214.     setsearch $sBuffer,#sFlug;
  215.     title " ";
  216.     title 1;
  217.     goto top_grep;
  218. }else if(!result){
  219.     if(#subdirYN==1)$sD="および以下のディレクトリからは";else $sD="では";
  220.     message "●検索結果\n第一指定の検索文字列『"+$sT0+"』を含むファイル("+$fileWildCard+")は、検索を開始したディレクトリ『"+$startDir+"』"+$sD+"見つかりませんでした ... ";
  221.     setactivehidemaru #hwndNOW;
  222.     closehidemaruforced #hwndGREPc;
  223.     setsearch $sBuffer,#sFlug;
  224.     title " ";
  225.     title 1;
  226.     goto top_grep;
  227. }
  228. #hwndGrep=hidemaruhandle(0);
  229. setactivehidemaru #hwndNOW;
  230. title "●結果を整理しています...[Esc]中断";
  231. setactivehidemaru #hwndGrep;
  232. disablebreak;
  233. gofiletop;
  234. while(1){
  235.     #gk=keypressed;
  236.     if(#gk==0x1B||#breakON==1){#breakON=1;break;}
  237.     searchdown "\\([0-9]+\\)",regular;
  238.     if(!result)break;
  239.     #tex=x;#tey=y;
  240.     $ffName=gettext(0,#tey,x,#tey);
  241.     if(#outExtensionYN){
  242.         if(strstr($outExtension,midstr($ffName,strstr($ffName,".")+1,3))>=0)continue;
  243.     }
  244.     #fNum=#fNum+1;
  245.     if(!#rootDir)$ffName[#fNum]=directory+"\\"+$ffName;
  246.     else $ffName[#fNum]=directory+$ffName;
  247. }
  248. setactivehidemaru 1;
  249. closehidemaruforced #hwndGrep;
  250. return;
  251.  
  252. check_ffNameOK_CaseOfOpenedFile://既に開いているファイルの場合の調査
  253. disablebreak;
  254. #gk=keypressed;
  255. if(#gk==0x1B){#breakON=1;return;}
  256. ##xO=x;##yO=y;
  257. disableinvert;
  258.     gofiletop;
  259.     if(!#regularYN)searchdown $sT1;else searchdown $sT1,regular;
  260.     if(result){
  261.         #gk=keypressed;
  262.         if(#gk==0x1B||#breakON==1){#breakON=1;return;}
  263.         if($sT2!=""){
  264.             gofiletop;
  265.             if(!#regularYN)searchdown $sT2;else searchdown $sT2,regular;
  266.             if(result) #ffNameOK=1;
  267.             else #ffNameOK=0;
  268.             #gk=keypressed;
  269.             if(#gk==0x1B||#breakON==1){#breakON=1;return;}
  270.         }else #ffNameOK=1;
  271.     }else #ffNameOK=0;
  272.     escape;
  273.     #hwndGrepOK1=hidemaruhandle(0);
  274. moveto ##xO,##yO;
  275. return;
  276.  
  277. firstInformation:
  278. if(#breakON){
  279.     message "●報告...k_GREPは、最終段階のファイル調査中に途中停止されました(;_;)\n"+
  280.         "●対応...はじめの条件設定の画面に戻ります(^^)。";
  281.     setsearch $sBuffer,#sFlug;
  282.     title " ";
  283.     title 1;
  284.     ##a=1;
  285.     #breakON=0;
  286. }
  287. if(#MaxffNumY==0){
  288.     call dispMSG 4;
  289.     ##a=1;
  290. }
  291. return ##a;
  292.  
  293. dispResultOfFilesList:
  294. disablebreak;
  295. $ffNameMenu[0]="● k_GREP 結果リスト  (検出="+str(#MaxffNumY)+")   (C) 水銀水";
  296. $ffNameMenu[#MaxffNumY+1]="──────────────────────";
  297. if(!#mop){
  298.     $ffNameMenu[#MaxffNumY+2]="━━━━━[結果の拡張処理  &option ]━━━━━━";
  299.     $ffNameMenu[#MaxffNumY+3]="━━━━━━━[k_GREP停止 &e]━━━━━━━━━";
  300. }else{//if(#mop)
  301.     $ffNameMenu[#MaxffNumY+2]="━━[リストをk_GREP履歴ファイルへ追加 &log]━━";
  302.     $ffNameMenu[#MaxffNumY+3]="━━━[リストをクリップボードへ転送 &clip]━━━";
  303. //    $ffNameMenu[#MaxffNumY+4]="━━━━━[全検索状態の個別保存  &keep]━━━━";
  304. //    $ffNameMenu[#MaxffNumY+5]="━━━━━━[絞り込み検索 &squeeze]━━━━━━";
  305. //    $ffNameMenu[#MaxffNumY+6]="━━━━━━━━[拡張処理停止 &e]━━━━━━━";
  306.     $ffNameMenu[#MaxffNumY+4]="━━━━━━━[拡張処理停止 &e]━━━━━━━━";
  307. }
  308. if(!#mop)menuarray $ffNameMenu,#MaxffNumY+4;
  309. else menuarray $ffNameMenu,#MaxffNumY+5;
  310. if(result==0){//esc(なぜかAlt,F-10もresult==0になる)じゃ、メニュー外をクリックした場合。カレントファイルなら閲覧。それ以外はメニューループ。
  311. //call checkFSN; 
  312. //showvars;
  313.     title " ";
  314.     title 1;
  315.     call checkCurFileNIJUU;
  316.     ##checkCurFileNIJUUYN=##return;
  317.     if(##checkCurFileNIJUUYN){
  318.         if(#showWide)showwindow 3;
  319.         execmacro "k_grepLK.mac";
  320.         if(#showWide)showwindow 1;
  321.         title " ";
  322.         title 1;// k_LOOK のサブセット版 
  323.     }else call dispMSG 9;
  324.     goto dispResultOfFilesList;//##result==0か、##result==1でk_greSR6を終了したか。でループ。
  325. }else if(result==1){
  326.     title " ";
  327.     title 1;
  328.     call dispMSG 5;
  329.     goto dispResultOfFilesList;
  330. }else if(result==#MaxffNumY+2){
  331.     title " ";
  332.     title 1;
  333.     goto dispResultOfFilesList;
  334. }else if(result==#MaxffNumY+3){
  335.     title " ";
  336.     title 1;
  337.     if(!#mop){
  338.         #mop=1;
  339.         goto dispResultOfFilesList;
  340.     }else{
  341.         if(!#historyFileYN)call k_GREPhistory;
  342.         else call dispMSG 14;
  343.         goto dispResultOfFilesList;
  344.     }
  345. }else if(result==#MaxffNumY+5){
  346.     title " ";
  347.     title 1;
  348.     #mop=0;goto dispResultOfFilesList;
  349. }else if(result==#MaxffNumY+4){
  350.     title " ";
  351.     title 1;
  352.     if(!#mop){//休止
  353.         question "●確認...k_GREPを休止して本当によろしいですね";
  354.         if(result)return;//endmacroall;
  355.         else goto dispResultOfFilesList;
  356.     }else{//[リストをクリップボードへ転送 &clip]
  357.         call copyListToClip;goto dispResultOfFilesList;
  358.     }
  359. //}else if(result==#MaxffNumY+5){
  360. //        message "■結果メニュー個別保存\n(名前を付けて、結果表示メニュー状態を保存/復元)"+
  361. //            "";
  362. ////        call setStringSaveFullSet;
  363. ////        goto dispResultOfFilesList;
  364. //         execmacro "k_grepRT";
  365. ////        endmacroall;
  366. //}else if(result==#MaxffNumY+6){
  367. //        message "■追加(論理積/排他積)の絞り込み実行\n";
  368. ////        call setStringSqueeze;
  369. ////        goto dispResultOfFilesList;
  370. //         execmacro "k_grepSQ";
  371. ////        endmacroall;
  372. }//else goto dispResultOfFilesList;
  373.  
  374.     title " ";
  375.     title 1;
  376. title 0;
  377. #openFileNum=result-1;
  378. #fsn=#fsn+1;//fsn(FilesSilialNumber)は、ここで設定すべきだろう!!!
  379. #openFileNumSN[#fsn]=#openFileNum;
  380. if($Mcheck[#openFileNum]=="□"){//指定ファイルが開いていない場合
  381.     if(hidemarucount>#maxHidemaru){
  382.         call dispMSG 15;
  383.         goto dispResultOfFilesList;
  384.     }
  385.     if(!#checkOfMcON)call setMarkOfOldFile;
  386.     openfile $ffNameBody[#openFileNum];
  387.     call setMarkOfCurentFile;
  388. }else if($Mcheck[#openFileNum]=="○"){
  389.             if(!#checkOfMcON)call setMarkOfOldFile;
  390.             setactivehidemaru findhidemaru($ffNameBody[#openFileNum]);
  391.             call setMarkOfCurentFile;
  392. }else if($Mcheck[#openFileNum]=="◎"){
  393.             call setMarkOfClosedFile;
  394.             call setNextActiveHM;
  395. }else message "enable take for ... anything ...";
  396. goto dispResultOfFilesList;
  397. return;
  398.  
  399. checkCurFileNIJUU://現在のhidemaruorder==0のファイル名が◎と同じか?、yes=1,no=0.
  400. if(#nijuu!=0){
  401.     if(filename==$ffNameBody[#nijuu])return 1;
  402.     else return 0;
  403. }else return 0;
  404.  
  405. setMarkOfClosedFile:
  406.     #openFileYN[#openFileNum]=0;
  407.     $Mcheck[#openFileNum]="□";
  408.     $ffNameMenu[#openFileNum]=$Mcheck[#openFileNum]+$ffNameBody[#openFileNum];
  409. return;
  410. setMarkOfClosedFileReverse:
  411.     #openFileYN[#openFileNum]=1;
  412.     $Mcheck[#openFileNum]="◎";
  413.     #nijuu=#openFileNum;
  414.     $ffNameMenu[#openFileNum]=$Mcheck[#openFileNum]+$ffNameBody[#openFileNum];
  415. return;
  416.  
  417. setNextActiveHM://#openFileSNの最大のファイルまで移動し、アクティブにする
  418. while(1){
  419. #fsn=#fsn-1;
  420.     if(#MaxffNumY==1||#fsn==0){
  421.         if(hidemarucount>1){
  422.             setactivehidemaru 1;
  423.             closehidemaru 1;
  424.             #openFileNum=#openFIleSN[#fsn];
  425.         }else{
  426.             call dispMSG 6;
  427.             call setMarkOfClosedFileReverse;
  428.             #fsn=1;
  429.             #openFileNumSN[#fsn]=#openFileNum;
  430.         }
  431.         call setMarkOfCurentFile;
  432.         break;
  433.     }else if(!#openFileYN[#openFileNumSN[#fsn]]){
  434.         continue;
  435.     }else if(#openFileNumSN[#fsn]==#openFileNumSN[#fsn+1]){
  436.         continue;
  437.     }else if(#openFileYN[#openFileNumSN[#fsn]]){
  438.         #closeFileHWND=hidemaruhandle(0);
  439.         #openFileNum=#openFileNumSN[#fsn];
  440.         #openFileYN[#openFileNum]=0;
  441.         setactivehidemaru findhidemaru($ffNameBody[#openFileNumSN[#fsn]]);
  442.         call setMarkOfCurentFile;
  443.         closehidemaru #closeFileHWND;
  444.         break;
  445.     }else{message "致命的なバグかも(^^)";setsearch $sBuffer,#sFlug;endmacroall;}
  446. }
  447. return;
  448.  
  449. setMarkOfCurentFile:
  450.     #openFileYN[#openFileNum]=1;
  451.     $Mcheck[#openFileNum]="◎";
  452.     #nijuu=#openFileNum;
  453.     $ffNameMenu[#openFileNum]=$Mcheck[#openFileNum]+$ffNameBody[#openFileNum];
  454. return;
  455.  
  456. setMarkOfPastFile:
  457.     $Mcheck[#openFileNumSN[#fsn-1]]="□";
  458.     #openFileYN[#openFileNum]=0;
  459.     $ffNameMenu[#openFileNumSN[#fsn-1]]=$Mcheck[#openFileNumSN[#fsn-1]]+$ffNameBody[#openFileNumSN[#fsn-1]];
  460. return;
  461.  
  462. setMarkOfOldFile:
  463.     $Mcheck[#openFileNumSN[#fsn-1]]="○";
  464.     $ffNameMenu[#openFileNumSN[#fsn-1]]=$Mcheck[#openFileNumSN[#fsn-1]]+$ffNameBody[#openFileNumSN[#fsn-1]];
  465. return;
  466.  
  467. getStartDir:
  468.     if(imestate)imeswitch;
  469.     $startDir=input("●GREP開始のディレクトリ(フルパスでの)指定\n (ドライブ名から「フルパス」でディレクトリを指定)\n (ルートディレクトリを除き末尾の「¥」は不要)",$startDirIni);
  470.     if(!result){return;message "実行がキャンセルされました";}
  471.     if($startDir==""||strstr($startDir,":")<0){
  472.         call dispMSG 13;
  473.     goto getStartDir;endmacro;}
  474.     call checkOfRootDirOfINI $startDir;
  475.     $startDir=$$return;
  476.     writeinistr $f0,"IT0","startDirctory",$startDir;
  477. if(imestate)imeswitch;
  478. return;
  479.  
  480. checkOfRootDirOfINI://ルートディレクトリか否かでの¥の扱い(結果を$$startDirIniYNで返す)
  481. $$startDirIniYN=$$1;
  482. if(midstr($$startDirIniYN,strlen($$startDirIniYN)-1,1)=="\\"){
  483.     if(midstr($$startDirIniYN,strlen($$startDirIniYN)-2,1)!=":"){
  484.         $$startDirIniYN=midstr($$startDirIniYN,0,strlen($$startDirIniYN)-1);
  485.         #rootDir=0;
  486.     }else{
  487.         $$startDirIniYN=$$startDirIniYN;
  488.         #rootDir=1;
  489.     }
  490. }else{
  491.     if(midstr($$startDirIniYN,strlen($$startDirIniYN)-1,1)!=":"){
  492.         $$startDirIniYN=midstr($$startDirIniYN,0,strlen($$startDirIniYN));
  493.         #rootDir=0;
  494.     }else{
  495.         $$startDirIniYN=$$startDirIniYN+"\\";
  496.         #rootDir=1;
  497.     }
  498. }
  499. return $$startDirIniYN;
  500.  
  501. getFileWildcard://ファイルワイルドカード指定
  502.     if(imestate)imeswitch;
  503.     $fileWildCard=input("●検索対象となるファイル名のワイルドカード指定\n 複数ワイルドカード指定は「;」で区切る\n <注意>拡張子は必ず指定して下さい!!!",$fileWildCardIni);
  504.     if(!result){return;message "実行がキャンセルされました";endmacro;}
  505.     if($fileWildCard==""){
  506.         call dispMSG 10;
  507.         $fileWildCard="*.txt";
  508.     }
  509.     writeinistr $f0,"IT0","fileWildCard",$fileWildCard;
  510.     if(imestate)imeswitch;
  511. return;
  512.  
  513. checkRegularStr:
  514. $$cS=$$1;
  515.     if(!#regularYN){//正規表現が設定されていない場合
  516.         if(strstr($$cS,"|")!=-1){//文字列「|」が発見された場合
  517.             question "●注意...「|」が検索文字列に含まれています。\n"+
  518.                 "●理由...正規表現を使用した検索において、パターンの論理和を示すメタキャラクタ「|」が、検索文字列の中に含まれていますが、正規表現による検索は設定されていません。"+
  519.                 "したがって「|」は「または」の意味では作動せず、単なる文字「|」として扱われます。\n"+
  520.                 "●選択...「はい」そうです、「|」は文字列でよろしい\n    「いいえ」あぅ、忘れてた。再入力やッ"+"\n\n(なお、正規表現によるk_GREP検索は,「拡張設定」で変更できます)";
  521.             if(!result)return 0;else return 1;
  522.         }else return 1;
  523.     }else return 1;
  524.  
  525. set1stStrings://第1検索文字列指定
  526.     if(!imestate)imeswitch;
  527.     $sT0=input("●第1検索文字列指定(必須)\n検出したいファイル『以外には存在し無い』だろうと思われるできるだけ特別な文字列を入力",$sT0Ini);
  528.     if(!result){return;endmacro;message "実行がキャンセルされました";}
  529.     if($sT0==""){
  530.         call dispMSG 11;
  531.         goto set1stStrings;
  532.     }
  533.     call checkRegularStr $sT0;
  534.     if(!##return)goto set1stStrings;
  535.     writeinistr $f0,"IT0","sTarget0",$sT0;
  536.     if(imestate)imeswitch;
  537. return;
  538.  
  539. set2ndStrings://第2検索文字列指定
  540.     if(!imestate)imeswitch;
  541.     $sT1=input("●第2検索文字列指定(必須)\n検出したい文字列で、『どうしても必要』な文字列を指定してネッ!!!",$sT1Ini);
  542.     if(!result){return;endmacro;message "実行がキャンセルされました";}
  543.     if($sT1==""){
  544.         call dispMSG 12;
  545.         goto set2ndStrings;
  546.     }
  547.     call checkRegularStr $sT1;
  548.     if(!##return)goto set2ndStrings;
  549.     writeinistr $f0,"IT0","sTarget1",$sT1;
  550.     if(imestate)imeswitch;
  551. return;
  552. set3rdStrings://第3検索文字列指定
  553.     if(!imestate)imeswitch;
  554.     if($sT1Ini=="")goto set2ndStrings;
  555.     $sT2=input("●第3検索文字列指定(任意)\n不必要なにに初期候補がある場合は、BackSpaceキーで消去してOKを選択",$sT2Ini);
  556.     if(!result){return;endmacro;message "実行がキャンセルされました";}
  557.     call checkRegularStr $sT2;
  558.     if(!##return)goto set3rdStrings;
  559.     writeinistr $f0,"IT0","sTarget2",$sT2;
  560.     if(imestate)imeswitch;
  561. return;
  562. dispMSG:
  563. writeininum $f0,"IT0","msg",##1;
  564. execmacro "k_grep3m.mac";
  565. return;
  566.  
  567. outputStr02:
  568. if(!#subdirYN)$cL1="1  grep・開始のディレクトリ=  "+$startDirIni;
  569. else $cL1="1  grep・開始のディレクトリ=  "+$startDirIni+" ...<<subdir>>";
  570. if(!#regularYN){
  571.     $cL3="3  第1(最稀少)文字列=  ";
  572.     $cL4="4  第2(最必須)文字列=  ";
  573.     $cL5="5  第3(次限定)文字列=  ";
  574. }else{
  575.     $cL3="3  第1(最稀少)文字列=  ";$cL3L="  ...<<regular>>";
  576.     $cL4="4  第2(最必須)文字列=  ";$cL4L="  ...<<regular>>";
  577.     $cL5="5  第3(次限定)文字列=  ";$cL5L="  ...<<regular>>";
  578. }
  579. return;
  580.  
  581. copyListToClip://結果リストをクリップボードへ転送(オプションの記述は添付しない)
  582. call outputStr02;
  583. $$toClip="----- k_GREP  Report  19"+date+time+"-----"+"\x0D\x0A"+
  584.     $cL1+"\x0D\x0A"+
  585.     "2  ファイル・ワイルドカード指定=  "+$fileWildCardIni+"\x0D\x0A"+
  586.     $cL3+$sT0Ini+$cL3L+"\x0D\x0A"+
  587.     $cL4+$sT1Ini+$cL4L+"\x0D\x0A"+
  588.     $cL5+$sT2Ini+$cL5L+"\x0D\x0A";
  589. setclipboard $$toClip;
  590. addclipboard "   検出ファイル総数="+str(#MaxffNumY)+"個"+"\x0D\x0A";
  591. while(##ii<#MaxffNumY){
  592.     addclipboard $ffNameBody[##ii+1]+"\x0D\x0A";
  593.     ##ii=##ii+1;
  594. }
  595. call dispMSG 8;
  596. return;
  597.  
  598. k_GREPhistory://履歴
  599. #historyFileYN=getininum($f0,"IT0","historyFileYN");
  600. if(#historyFileYN){
  601.     $historyFile=getinistr($f0,"IT0","historyFile");
  602. }else{
  603.     $historyFile=hidemarudir+"\\k_GREP01.LOG";
  604. }
  605. if(!existfile($historyFile)){message "●注意k_GREPの履歴ファイル指定がないので、ログを取れません<m(_._)m>\n"+
  606.                 "●対応...履歴ファイルを使用するにして、『設定』をクリックして下さい。";}
  607. call outputStr02;
  608. $$toHistory="----- k_GREP履歴  19"+date+time+"-----"+"\x0D\x0A"+
  609. $cL1+"\x0D\x0A"+
  610. "2  ファイル・ワイルドカード指定=  "+$fileWildCardIni+"\x0D\x0A"+
  611. $cL3+$sT0Ini+"\x0D\x0A"+
  612. $cL4+$sT1Ini+"\x0D\x0A"+
  613. $cL5+$sT2Ini+"\x0D\x0A";
  614. openfile "/h "+$historyFile;
  615. gofileend;
  616. insert $$toHistory;
  617. insert  "   検出ファイル総数="+str(#MaxffNumY)+"個"+"\x0D\x0A";
  618. while(##ii<#MaxffNumY){
  619.     insert $ffNameBody[##ii+1]+"\x0D\x0A";
  620.     ##ii=##ii+1;
  621. }
  622. insert "\x0D\x0A";
  623. save;
  624. setactivehidemaru 1;
  625. closehidemaruforced 1;
  626. call dispMSG 7;
  627. return;
  628.  
  629.