Browse Source

* update std handles after initing c

peter 24 years ago
parent
commit
65513e55d1
1 changed files with 36 additions and 4 deletions
  1. 36 4
      rtl/win32/initc.pp

+ 36 - 4
rtl/win32/initc.pp

@@ -1,3 +1,6 @@
+{
+  $Id$
+}
 unit initc;
 unit initc;
 
 
 interface
 interface
@@ -9,6 +12,7 @@ interface
 {$endif}
 {$endif}
 
 
  {$LINKLIB cygwin}
  {$LINKLIB cygwin}
+ {$linklib kernel32}
 
 
 { this unit is just ment to run
 { this unit is just ment to run
   startup code to get C code to work correctly PM }
   startup code to get C code to work correctly PM }
@@ -16,6 +20,9 @@ interface
 
 
 implementation
 implementation
 
 
+{$i textrec.inc}
+
+
 procedure cygwin_crt0(p : pointer);cdecl;external;
 procedure cygwin_crt0(p : pointer);cdecl;external;
 
 
 {
 {
@@ -35,17 +42,42 @@ end;
 
 
 procedure C_exit(status : longint);popstack;external name '_exit';
 procedure C_exit(status : longint);popstack;external name '_exit';
 
 
+const
+   STD_INPUT_HANDLE = $fffffff6;
+   STD_OUTPUT_HANDLE = $fffffff5;
+   STD_ERROR_HANDLE = $fffffff4;
+
+function GetStdHandle(nStdHandle:DWORD):longint;external 'kernel32' name 'GetStdHandle';
+
+procedure UpdateStdHandle(var t:TextRec;var stdHandle:longint;newHandle:longint);
+{ Check if the stdHandle is the same as the one in the TextRec, then
+  also update the TextRec }
+begin
+  if t.Handle=stdHandle then
+   t.Handle:=newHandle;
+  stdHandle:=newHandle;
+end;
+
+
 initialization
 initialization
-cygwin_crt0(nil);
+  cygwin_crt0(nil);
+{ Reinitialize std handles that can be changed }
+  UpdateStdHandle(TextRec(Input),StdInputHandle,GetStdHandle(STD_INPUT_HANDLE));
+  UpdateStdHandle(TextRec(Output),StdOutputHandle,GetStdHandle(STD_OUTPUT_HANDLE));
+  TextRec(StdOut).Handle:=StdOutputHandle;
+  UpdateStdHandle(TextRec(Stderr),StdErrorHandle,GetStdHandle(STD_ERROR_HANDLE));
 
 
 finalization
 finalization
 { should we pass exit code ?
 { should we pass exit code ?
   its apparently only used by _exit so it doesn't matter PM }
   its apparently only used by _exit so it doesn't matter PM }
-C_exit(0);
+  C_exit(0);
 
 
 end.
 end.
+{
   $Log$
   $Log$
-  Revision 1.2  2000-07-13 11:33:57  michael
+  Revision 1.3  2000-12-30 17:48:36  peter
+    * update std handles after initing c
+
+  Revision 1.2  2000/07/13 11:33:57  michael
   + removed logs
   + removed logs
- 
 }
 }