; $1- = item to execute & args
; or if $prop is set
; $1 = com object returned by exec()
; $prop = Terminate or pid or Status or eos or Line or ReadLine or WriteLine or debug
alias exec {
if ($0 == 0) return
if ($prop) {
if (!$com($1)) return
if ($prop == Terminate) noop $com($1,Terminate,1)
elseif ($prop == pid) noop $com($1,ProcessID,2)
elseif ($prop == Status) noop $com($1,Status,2)
elseif ($prop == EOS) {
; BUG: causes mirc to freeze when used on a running task when it should return $true! Unfreezes on task exit.
var %exec_stdout exec_stdout $+ $ticks
if ((!$com($1,StdOut,2,dispatch* %exec_stdout)) || ($comerr)) return -1
if ((!$com(%exec_stdout,AtEndOfStream,2)) || ($comerr)) var %res = -2
else var %res = $com(%exec_stdout).result
.comclose %exec_stdout
return %res
}
elseif ($prop == ReadLine) {
; BUG: causes mirc to freeze when used on a running task when it should return 0! Unfreezes on task exit.
; NB: results can be an empty line, 1 used to make it clear this is a good result
var %exec_stdout exec_stdout $+ $ticks
if ((!$com($1,StdOut,2,dispatch* %exec_stdout)) || ($comerr)) return -1
if ((!$com(%exec_stdout,AtEndOfStream,2)) || ($comerr)) var %res = -2
elseif ($com(%exec_stdout).result) var %res = 0
elseif ((!$com(%exec_stdout,ReadLine,1)) || ($comerr)) var %res -3
else var %res = 1 $com(%exec_stdout).result
.comclose %exec_stdout
returnex %res
}
elseif ($prop == WriteLine) {
var %exec_stdin exec_stdout $+ $ticks
if ((!$com($1,StdIn,2,dispatch* %exec_stdin)) || ($comerr)) return -1
if ((!$com(%exec_stdin,WriteLine,1,bstr,$2)) || ($comerr)) var %res = -3
else var %res = 1
.comclose %exec_stdin
return %res
}
elseif ($prop == Line) {
var %exec_stdout exec_stdout $+ $ticks
if ((!$com($1,StdOut,2,dispatch* %exec_stdout)) || ($comerr)) return -1
if ((!$com(%exec_stdout,Line,2)) || ($comerr)) var %res = -2
else var %res = $com(%exec_stdout).result
.comclose %exec_stdout
return %res
}
elseif ($prop == debug) {
echo -s start
var %exec_stdout exec_stdout $+ $ticks
if ((!$com($1,StdOut,2,dispatch* %exec_stdout)) || ($comerr)) return -1
echo -s got stdout
if ((!$com(%exec_stdout,AtEndOfStream,2)) || ($comerr)) var %res = -2
else {
echo -s got AtEndOfStream
var %res = $com(%exec_stdout).result
}
echo -s ok
.comclose %exec_stdout
return %res
}
else return
return $com($1).result
}
var %% = s $+ $ticks, %exec_com = $+(%%,_exec), %exec_stdout = %exec_com $+ _stdout.txt
if (!$com(%%)) .comopen %% wscript.shell
if ($comerr) return
.comclose %% $com(%%,exec,1,bstr,$1-,dispatch* %exec_com)
return %exec_com
}