DOSコマンド実行(run)No.00603
あづまたいち さん 99/06/13 02:17
 
こんにちは。マクロ初心者の物です。

lsi-c で 今編集中のソースをコンパイルするというマクロを書いていますがうまく
いきません。
今、test.c というファイル名でソースを編集しているとして
[lcc test.c > error.log]
というDOSコマンドを実行したいので

run "lcc " + basename3 + "> error.log";

とマクロを書いたのですが、うまくいきません。
症状としては、ソースにエラーがないと、オブジェクトファイルがなぜか出来て
エラーがあってもerror.log は作られないという問題です。

massage "lcc " + basename3 + "> error.log";

とすると、ダイアログにきちんと lcc test.c > error.log と表示されます。

以前 gcc でマクロを作ったときは gcc がリダイレクトをしないので、
リダイレクトできるコマンドを実行したので問題なくできました。

lsi-c はリダイレクトできるとマニュアルに書いてあったので、出来るはずなのです


みなさま是非とも教えて下さい。(run の使用法について)

では、失礼いたします。


[ ]
RE:00603 DOSコマンド実行(run)No.00611
安久津 さん 99/06/16 01:39
 
はじめまして、あづまたいちさん。
安久津といいます。
発言00603で、あづまたいちさん書く。
>run "lcc " + basename3 + "> error.log";
>
>とマクロを書いたのですが、うまくいきません。
私は、今月で秀丸マクロ暦丸1年なのですが(秀丸暦1年半)
Win95の秀丸でリダイレクトはかなり難物のようです。
以下は、私がJavaソースのコンパイル用に使ったマクロ(ちょっと変更)です。

// 始まり compile.mac /////
//
// JDK javac 用のテスト
// $command = "javac -J-Djavac.pipe.output=true";
// $basename = basename2;
// あづまたいちさん用のテスト
$command = "lcc"; // この文字列を変更したら compile.bat を削除して下さい。
$basename = basename3;

$$ary[0] = "&1 run " + $command + " %b > con";
$$ary[1] = "&2 run " + $command + " " + $basename + " > error.log";
$$ary[2] = "&3 runsync " + $command + " " + $basename + " > error.log";
$$ary[3] = "&4 runsync2 " + $command + " " + $basename + " > error.log";
$$ary[4] = "&5 runsync compile.bat " + $basename + " error.log";
$$ary[5] = "&6 runsync2 compile.bat " + $basename + " error.log";
$$ary[6] = "&N キャンセル";
##end = 7;
menuarray $$ary, ##end;
##mode = result - 1;
##end = ##end - 1;
if( ##mode < 0 || ##mode == ##end ) endmacro;
call compile ##mode;
if( ##return == 0 ) message "mode = " + str(##mode) + "\nコンパイル失敗";

endmacro;
/////////
compile:
##mode = ##1;
// 以下全ての場合でカレントディレクトリはソースファイルのあるところ
if( ##mode == 0 ){
run $command + " %b >con";
##result = result;
// この場合の run はコンパイル終了を待つ
}else if( ##mode < 4 ){
$command = $command + " " + $basename + " > error.log";
if( ##mode == 1 ) run $command; // コンパイル終了を待たない
else if( ##mode == 2 ) runsync $command; // アイコン化する
else if( ##mode == 3 ) runsync2 $command;// アイコン化しない
##result = result;
}else{
// バッチファイルを使う
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
if( !result ){
message "レジストリオープン失敗";
return;
}
$__macroPath = getregstr( "MacroPath" );
closereg;
if( $__macroPath == "" ) $__macroPath = hidemarudir;
if( rightstr($__macroPath, 1) != "\\" ) $__macroPath = $__macroPath + "\\";

$$compileBat = $__macroPath + "compile.bat";
if( !existfile( $$compileBat ) ){
##h_clientFile = hidemaruhandle( 0 );
newfile;
insert "cls\n";
insert $command + " %1 > %2\n";
insert "@echo off\n";
insert "echo コンパイルしたファイル=%1 >>%2\n";
insert "echo コンパイルした日時=%3 >>%2\n";
saveas $$compileBat;
##h_batFile = hidemaruhandle( 0 );
setactivehidemaru ##h_clientFile;
closehidemaruforced ##h_batFile;
}
$command = "\"" + $$compileBat + "\" " + $basename + " error.log " + date +
time;
if( ##mode == 5 ) runsync $command;// アイコン化する
else runsync2 $command;// アイコン化しない
##result = result;
}
return ##result;
// 終り compile.mac /////

(A)私の所では、##mode == 1 | 2 | 3 がだめです。
 ##result も正しく取得できません。
(B)##mode == 0 は、動きます。
 しかし、コンパイルにかかる時間が長いです。#なぜ?
(C)高速で、文句の無いのが ##mode == 4 | 5 です。

 lcc ではなく javac の話なのですが、参考になるでしょうか?

あっ、そう言えば NT の場合は
run $command + " " + $basename + " 2> error.log";
もあったような?、# fj.comp.lang.java で聞いた。

ではでは。

[ ]
RE:00603 DOSコマンド実行(run)No.00612
Toni さん 99/06/16 18:18
 
あづまたいちさん、はじめましてToniです。

>lsi-c で 今編集中のソースをコンパイルするというマクロを書いていますがうまく
>いきません。

 私は、素人なのではずしていたら申し訳ないのですが、以下のようにマクロをくん
だところ動きましたので、投稿してみます。(かなり恥ずかしいけど)


// 取りあえず一つのファイルをLCCでコンパイルするマクロ
//  (超初心者向けσ(^_^;自分)
//
// まずLcc.exeと同じディレクトリにPIFファイルを作る
// (DOSプロンプト用のをコピーしてきてプロパティーを開いてコマンド
//  ラインをC:\lsic\Bin\Lcc.exeとかにして、実行時の大きさを最小化、
//  プログラム終了時にウィンドウを閉じるをチェック)
runsync2 "C:\\lsic\\Bin\\Lcc.pif -IC:\\lsic\\Include -j1 -LC:\\lsic\\Lib " +
 filename2 + " >lcc.log";
$directory2 = directory2;

//制御が戻っても、ファイルができるのを少し待つ
//(必要があるらしい<経験から>)
#i = 1;
while ( #i < 1000 ) #i = #i + 1;

//オブジェクトファイルはいらないので、削除する
$basename2 = basename2;
#len = strlen($basename2);
#comma = #len - 1;
while (#comma > 0) {
if (midstr($basename2, #comma, 1) != ".") {
#comma = #comma - 1;
} else break;
}
$name = leftstr($basename, #comma) + ".obj";
runsync2 "del " + $name;

//ログファイルを開く
//すでに同名のファイルが開かれているかチェック
#loghidemaruno = findhidemaru( $directory2 + "\\lcc.log" );
if( #loghidemaruno == -1 ) {
openfile "/(135,110,575,420) " + directory2 + "\\lcc.log";
//ログ用の強調ファイルを読み込む(必要なら)
loadhilight "lcclog.hilight", 0;
}
else {
setactivehidemaru #loghidemaruno;
//起動時のウィンドウの大きさはオプション
openfile "/(135,110,575,420) " + directory2 + "\\lcc.log";
loadhilight "lcclog.hilight", 0;
}
endmacro;

[ ]