| module PIPEasp_Templates { |
| |
| import from PIPEasp_PortType all; |
| import from PIPEasp_Types all; |
| |
| template (value) ASP_PExecute ts_PExecute(template (value) charstring command, |
| template (value) charstring stdin) := { |
| command := command, |
| stdin := stdin |
| } |
| |
| template (present) ASP_PResult tr_PResult(template (present) charstring stdout, |
| template (present) charstring stderr, |
| template (present) integer code) := { |
| stdout := stdout, |
| stderr := stderr, |
| code := code |
| } |
| |
| template (value) ASP_PExecuteBackground ts_ExecBg(charstring cmd) := { |
| command := cmd |
| } |
| |
| template (present) ASP_PStdout tr_Stdout(template (present) charstring line) := { |
| stdout := line |
| } |
| |
| template (present) ASP_PStderr tr_Stderr(template (present) charstring line) := { |
| stderr := line |
| } |
| |
| template (value) ASP_PStdin ts_Stdin(template (value) charstring line) := { |
| stdin :=line |
| } |
| |
| /* Ignore output from stderr: */ |
| altstep as_ignore_stderr(PIPEasp_PT pt) { |
| [] pt.receive(tr_Stderr(?)) { repeat; } |
| } |
| |
| /* User should map(component_name:PIPE, system:PIPE) before using this function. */ |
| function f_PIPEasp_exec_sync_PResult(PIPEasp_PT pt, |
| charstring cmdline, |
| template (present) ASP_PResult res_exp := tr_PResult(?,?,0), |
| float time_out := 10.0) return ASP_PResult { |
| var ASP_PResult res; |
| timer t; |
| |
| if (time_out > 0.0) { |
| t.start(time_out); |
| } |
| |
| log ("Executing: ", cmdline); |
| pt.send(ts_PExecute(cmdline, "")); |
| |
| alt { |
| [] pt.receive(res_exp) -> value res; |
| [time_out > 0.0] t.timeout { |
| setverdict(fail, "Timeout: ", cmdline); |
| mtc.stop; |
| } |
| } |
| log ("Result: ", res); |
| return res; |
| } |
| |
| function f_PIPEasp_exec_sync(PIPEasp_PT pt, |
| charstring cmdline, |
| template (present) integer rc := 0) return ASP_PResult { |
| return f_PIPEasp_exec_sync_PResult(pt, cmdline, tr_PResult(?, ?, rc)); |
| } |
| |
| } |