<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<div class="moz-text-flowed" style="font-family: -moz-fixed;
font-size: 14px;" lang="x-unicode">Hi Dieter
<br>
<br>
the corresponding module in A2 looks like the following (below my
signature). It should be widely applicable to ETHOberon for
Windows because lot of Kernel32 is shared.
<br>
<br>
Aside: Command.Context is the current's thread context. You don't
have this in Oberon -- that should be the greatest difference. [In
the current version of A2, the command context is stored
Thread-locally and does not have to be explicitly coded, cf.
module In or Out in the current version of A2].
<br>
<br>
Rgds
<br>
Felix
<br>
<br>
<br>
<br>
MODULE WinApplications; (* ll, fof : call windows applications
from within WinAos *)
<br>
(*ll, add statements for waiting
process terminate in procedure Callprocess, 23.11.2007*)
<br>
(*ll, add return result of CallProcess
Procedure. IF resturn result = 0 THEN execution success END,
28.11.2007*)
<br>
<br>
IMPORT Kernel32, KernelLog, Commands, Strings, SYSTEM, Options;
<br>
<br>
PROCEDURE CallProcess( par: ARRAY OF CHAR; visible: BOOLEAN ):
LONGINT;
<br>
VAR bool: LONGINT; start: Kernel32.StartupInfo; pi:
Kernel32.ProcessInformation; result: LONGINT;
<br>
BEGIN
<br>
result := -1;
<br>
start.cb := SIZEOF( Kernel32.StartupInfo );
<br>
start.dwFlags := {Kernel32.StartFUseShowWindow};
<br>
IF visible THEN start.wShowWindow := 1; ELSE
start.wShowWindow := 0; END;
<br>
<br>
KernelLog.String( "Calling Windows Application: " );
KernelLog.String( par ); KernelLog.Ln;
<br>
<br>
bool := Kernel32.CreateProcess( NIL , par, NIL , NIL ,
Kernel32.False, 0, NIL , NIL , start, pi );
<br>
result := Kernel32.WaitForSingleObject(pi.hProcess,
Kernel32.Infinite);
<br>
bool := Kernel32. GetExitCodeProcess(pi.hProcess, result);
<br>
<br>
RETURN result
<br>
END CallProcess;
<br>
<br>
PROCEDURE Call*( CONST proc, par: ARRAY OF CHAR): LONGINT;
<br>
VAR call: ARRAY 1024 OF CHAR;
<br>
BEGIN
<br>
call := '"'; Strings.Append (call, proc); Strings.Append
(call, '" '); Strings.Append (call, par);
<br>
RETURN CallProcess (call, TRUE);
<br>
END Call;
<br>
<br>
PROCEDURE Run*(context : Commands.Context);
<br>
VAR options: Options.Options; visible: BOOLEAN; cmdpar: ARRAY
256 OF CHAR; res: LONGINT;
<br>
BEGIN
<br>
NEW (options);
<br>
options.Add("h", "hide", Options.Flag);
<br>
IF options.Parse(context.arg,context.error) THEN
<br>
visible := ~options.GetFlag ("h");
<br>
ELSE
<br>
visible := TRUE;
<br>
END;
<br>
context.arg.Ln (cmdpar);
<br>
res := CallProcess (cmdpar, visible);
<br>
IF res = 0 THEN KernelLog.String( "should have worked
fine .... " ); KernelLog.Ln;
<br>
ELSE KernelLog.String( "ERROR: " ); res:=
Kernel32.GetLastError(); KernelLog.Int(res, 1 ); KernelLog.Ln;
<br>
END;
<br>
context.result := res;
<br>
END Run;
<br>
<br>
END WinApplications.
<br>
<br>
SystemTools.Free WinApplications ~
<br>
System.Free WinApplications ~
<br>
<br>
~
<br>
WinApplications.Run avrdude -help ~
<br>
<br>
Aos.Call WinApplications.Run avrdude -p m128 -c avrisp -P com1 -e
~
<br>
Aos.Call WinApplications.Run Notepad Test.bat ~
<br>
Aos.Call WinApplications.Run Test.bat ~
<br>
~
<br>
<br>
EditTools.OpenAscii Test.Bat ~
<br>
<br>
<br>
<br>
<br>
<br>
<blockquote type="cite" style="color: #000000;">Short question:
<br>
<br>
has anybody got an idea, how I could accomplish this?
<br>
<br>
Thanks and regards,
<br>
Dieter
<br>
<br>
</blockquote>
<br>
</div>
</body>
</html>