/***********************************************************
"execscr.exe" main script
***********************************************************/
/* 実行ファイル作成オプション */
#packopt name "execscr"
#packopt hide 1
#packopt runtime "hsp3c.hrt"
/* ヘッダファイル、定数マクロなど */
#define NAME_BAT "execscr.bat" // スクリプト実行用バッチファイル名
#define OPTION_PAUSE "p" // オプション:スクリプト実行後コンソールウィンドウを閉じない
#define OPTION_MINIMIZE "m" // オプション:コンソールウィンドウを最小化状態で開く
/* 汎用モジュール */
#include "gm_rmquote.hsp" // 文字列両端の引用符を削除
#include "gm_jconv_dll.hsp" // 文字コード変換DLL
/* アプリケーション部品モジュール */
#include "m_cmdline_parser.hsp" // コマンドライン文字列処理
/**************/
/* メイン処理 */
/**************/
/* コマンドライン引数を取得 */
repeat
arg = getarg(cnt)
if arg="" {
break
}
_args(cnt) = arg
loop
prm_mark = _args(0) // 引数指定マーク
scr_path = _args(length(_args)-1) // 実行するスクリプトのパス
rmquote prm_mark, TYPE_DQUOTE@ // ""を除去
rmquote scr_path, TYPE_DQUOTE@
/* スクリプト存在チェック */
exist scr_path
if strsize=-1 {
dialog "指定されたスクリプトが見つかりません。execscr.exeを終了します。", 1, "エラー"
end
}
scr_dir = getpath(scr_path, 32) // ついでにスクリプトがあるフォルダのパスを取得しておく
/* 指定されたスクリプトに埋め込まれた(スクリプト用の)引数を切り出す */
notesel buf
noteload scr_path
buf = to_sjis(buf)
repeat notemax
noteget linestr, cnt
if instr(linestr, 0, prm_mark)=0 { // 引数指定マークが行頭にある
getstr prms, linestr, strlen(prm_mark) // 埋め込まれた引数を切り出す
break
}
loop
if prms!"" {
_args(length(_args)) = prms // コマンドライン項目の末尾に追加
}
/* バッチファイルの内容を作る */
bat = "@cd /d " + scr_dir + "\n@"
repeat length(_args)-1, 1
bat += _args(cnt) + " "
loop
if chkopt(OPTION_PAUSE) {
bat += "\n@pause"
}
/* バッチスクリプトに含まれている"%"記号を"%%"に変換 */
notesel bat
repeat notemax
noteget linestr, cnt
i = 0
newline = ""
repeat
getstr tmpstr, linestr, i, '%'
if strsize=0 {
break
}
newline += tmpstr
if strlen(tmpstr) ! strsize {
newline += "%%"
}
i += strsize
loop
if newline!"" {
noteadd newline, cnt, 1
}
loop
/* バッチファイルとして保存して実行 */
notesave NAME_BAT
if chkopt(OPTION_MINIMIZE) {
execmode = 2
}
else {
execmode = 0
}
exec NAME_BAT, execmode
end
|