韜晦日記

韜晦日記

Rietveldよりもプログラミングメインになりつつある

Rietveld解析初心者による備忘録とつぶやき

開発メモ。

卒論の気晴らしに、RietRunを使って秀丸エディタで出来ることを全て補間したくなった。特にDysnomiaを使って最大エントロピー法の計算をRietRunで手軽に実行できればいいと思う。
そこで秀丸エディタとRIETANを連携した際に使われる秀丸マクロの中味を調べ、同様の動きをRietRunに実装してみることにした。
こんな記事誰も読まないと思うので書き散らかしている。ご愛敬で。

RIETAN.batのなぞ。

insファイルのディレクトリを指定していないのに、秀丸エディタからRIETANを実行するとすんなり計算できるのはなぜなのか。
秀丸エディタのマクロの中味を見ると以下のようになっている。いや、正確に言えば秀丸とRIETANを連携させた時に登録するRIETAN.macの中味である。このマクロはRIETAN_VENUS\Macrosに格納されている。この一節の構文がこちら。

freedll; // tee.exeが別なDLLを使うため、田楽DLLを開放しておく
runsync2 "\"C:\\Program Files\\RIETAN_VENUS\\Batch_files\\RIETAN.bat\" " + $bn; // RIETAN.batの実行
freedll; // バッチファイル中で使用したDLLの開放
openfile $ins; // *.insの再読み込み(*.insが更新されている場合に備えて)

この中の$bnは計算に用いるinsファイルの名前である。hoge.insであればおそらくhogeとなるはず。
もしかしたらC:\RIETAN_ins\hoge.insというようなRIETAN_insフォルダhoge.insが格納されていた場合、$bnC:\RIETAN_ins\hogeとなるかなとも思ったけども。おそらく違う。
これは次のRIETAN.batの中味をみれば自明である。たぶん。

REM Base name
SET SAMPLE=%1
REM Absolute path for the location of RIETAN64.exe, seconds.exe, ALBA64.exe, etc.
SET RIETAN=C:\Program Files\RIETAN_VENUS
REM Absolute path for the location of ALBA.exe
SET ALBA=C:\Program Files\RIETAN_VENUS\
SET PATH=C:\Program Files\RIETAN_VENUS\Commands;%PATH%

FOR /F "USEBACKQ" %%T IN (`"%RIETAN%\seconds.exe"`) DO SET BEFORE=%%T
"%RIETAN%\RIETAN.exe" "%SAMPLE%.ins" "%SAMPLE%.int" "%SAMPLE%.bkg" "%SAMPLE%.itx" "%SAMPLE%.hkl" "%SAMPLE%.xyz" "%SAMPLE%.fos" "%SAMPLE%.ffe" "%SAMPLE%.fba" "%SAMPLE%.ffi" "%SAMPLE%.ffo" "%SAMPLE%.vesta" "%SAMPLE%.plt" "%SAMPLE

以上がRIETAN.batの中味(一部)であるが、これを見るとRIETANの実行する際の引数がhogeでないと上手く実行できないことは分かるでしょう。SAMPLE変数の説明にもBase name*1と書かれているし。
とにかく、秀丸エディタではRIETANの実行に関する構文で、insファイルの名前しか引数に与えておらず、ディレクトリの移動を行っていないように思える。

試しに、VBAマクロからShell関数を用いて実行してみた。以下のような構文である。

    Shell C:\Program Files\RIETAN_VENUS\RIETAN.exe hoge.ins

結果、ディレクトリが指定されていないためか、訳の分からないところ(USBの下層フォルダ)をカレントディレクトリに指定して計算を実行。エラーを吐き出した。おぅ、ファック
仕方ないのでRIETN.batに以下の構文を追加した。

SET LOCATION=%2
IF "%OS%" == "Windows_NT" CHDIR /D "%LOCATION%"
IF NOT "%OS%" == "Windows_NT" "%RIETAN%\pushd" "%LOCATION%"

これは第二引数としてhoge.insがあるディレクトリを指定して、そこをカレントディレクトリとして命令する文である。

VBA側からはRIETAN.batを実行するときに第二引数を入れてあげればいいだけである。
これにてプログラムは正常に実行されるようになった。
しかし、なんでこうもしないと動かないのか。なんで秀丸で動いて同様に指令しているVBAは実行できなかったのか。不思議です。どなたかわかる方はいないのでしょうか。ね。
まあいいや。RIETAN.batを書き換えたので秀丸エディタの連携に不備が起きるかもしれないと危惧したが、秀丸エディタはこれまで通り正常に動作した。
これで秀丸エディタからも、RietRunからもボタンひとつでRIETANが実行可能になりました。めでたしめでたし。

こんな感じで、RIETANに初めから入っているbatファイルとの連携を行うことで、ワンクリックでMEMの計算まで持っていけると思う。この調子でやって行きたい。

わざわざbatファイルを作っていたのが馬鹿らしくなるね。なんで初めからRIETANに付属していたbatファイルを使おうとしなかったのかね。

*1:Base nameは拡張子抜きのファイルの名前である。