|
@@ -5,7 +5,7 @@ IMPORT Kernel32, Modules,Trace,Commands;
|
|
CONST
|
|
CONST
|
|
none = 0; console = 1; file = 2;
|
|
none = 0; console = 1; file = 2;
|
|
VAR
|
|
VAR
|
|
- hin-, hout-: Kernel32.HANDLE;
|
|
|
|
|
|
+ hin-, hout-, herr-: Kernel32.HANDLE;
|
|
mode: LONGINT; (* none, console or file *)
|
|
mode: LONGINT; (* none, console or file *)
|
|
|
|
|
|
(* Sender to be used with Stream.Writer *)
|
|
(* Sender to be used with Stream.Writer *)
|
|
@@ -18,11 +18,30 @@ BEGIN
|
|
END;
|
|
END;
|
|
END Send;
|
|
END Send;
|
|
|
|
|
|
|
|
+(* Sender to be used with Stream.Writer *)
|
|
|
|
+PROCEDURE SendError* (CONST buf: ARRAY OF CHAR; ofs, len: LONGINT; propagate: BOOLEAN; VAR res: LONGINT);
|
|
|
|
+VAR b: Kernel32.BOOL;
|
|
|
|
+BEGIN
|
|
|
|
+ IF mode # none THEN
|
|
|
|
+ b := Kernel32.WriteFile (herr, buf[ofs], len, len, NIL);
|
|
|
|
+ Kernel32.FlushFileBuffers(herr);
|
|
|
|
+ END;
|
|
|
|
+END SendError;
|
|
|
|
+
|
|
|
|
+
|
|
(* Receiver to be used with Stream.Reader *)
|
|
(* Receiver to be used with Stream.Reader *)
|
|
PROCEDURE Receive* (VAR buf: ARRAY OF CHAR; ofs, size, min: LONGINT; VAR len, res: LONGINT);
|
|
PROCEDURE Receive* (VAR buf: ARRAY OF CHAR; ofs, size, min: LONGINT; VAR len, res: LONGINT);
|
|
-VAR b: Kernel32.BOOL;
|
|
|
|
|
|
+VAR b: Kernel32.BOOL; tlen: LONGINT;
|
|
BEGIN
|
|
BEGIN
|
|
- b := Kernel32.ReadFile (hin, buf[ofs], min, len, NIL);
|
|
|
|
|
|
+ len := 0;
|
|
|
|
+ b := Kernel32.ReadFile (hin, buf[ofs], size, len, NIL);
|
|
|
|
+ DEC(size, len);
|
|
|
|
+ WHILE (len < min) DO
|
|
|
|
+ b := Kernel32.ReadFile (hin, buf[ofs], size, tlen, NIL);
|
|
|
|
+ INC(len, tlen);
|
|
|
|
+ DEC(size, tlen);
|
|
|
|
+ END;
|
|
|
|
+ res := 0;
|
|
END Receive;
|
|
END Receive;
|
|
|
|
|
|
PROCEDURE Init;
|
|
PROCEDURE Init;
|
|
@@ -59,6 +78,9 @@ BEGIN
|
|
hout := Kernel32.GetStdHandle (Kernel32.STDOutput);
|
|
hout := Kernel32.GetStdHandle (Kernel32.STDOutput);
|
|
ASSERT ((hout) # (Kernel32.InvalidHandleValue));
|
|
ASSERT ((hout) # (Kernel32.InvalidHandleValue));
|
|
|
|
|
|
|
|
+ herr := Kernel32.GetStdHandle (Kernel32.STDError);
|
|
|
|
+ ASSERT ((herr) # (Kernel32.InvalidHandleValue));
|
|
|
|
+
|
|
Trace.Char := Char;
|
|
Trace.Char := Char;
|
|
mode := console;
|
|
mode := console;
|
|
END OpenConsole;
|
|
END OpenConsole;
|
|
@@ -70,6 +92,7 @@ BEGIN
|
|
IF ~context.arg.GetString(filename) THEN filename := "WinTrace.Text" END;
|
|
IF ~context.arg.GetString(filename) THEN filename := "WinTrace.Text" END;
|
|
hout := Kernel32.CreateFile(filename, {Kernel32.GenericWrite}, {Kernel32.FileShareRead}, NIL, Kernel32.CreateAlways, {Kernel32.FileAttributeNormal}, Kernel32.NULL);
|
|
hout := Kernel32.CreateFile(filename, {Kernel32.GenericWrite}, {Kernel32.FileShareRead}, NIL, Kernel32.CreateAlways, {Kernel32.FileAttributeNormal}, Kernel32.NULL);
|
|
ASSERT ((hout) # (Kernel32.InvalidHandleValue));
|
|
ASSERT ((hout) # (Kernel32.InvalidHandleValue));
|
|
|
|
+ herr := hout;
|
|
Trace.Char := Char;
|
|
Trace.Char := Char;
|
|
mode := file;
|
|
mode := file;
|
|
END OpenFile;
|
|
END OpenFile;
|