Browse Source

* always restore original window/buffersize for the console at exit

peter 20 years ago
parent
commit
3a505c44ad
1 changed files with 21 additions and 16 deletions
  1. 21 16
      rtl/win32/video.pp

+ 21 - 16
rtl/win32/video.pp

@@ -35,17 +35,19 @@ const
 var ConsoleInfo : TConsoleScreenBufferInfo;
 var ConsoleInfo : TConsoleScreenBufferInfo;
     ConsoleCursorInfo : TConsoleCursorInfo;
     ConsoleCursorInfo : TConsoleCursorInfo;
 
 
-    OrigCurType: TConsoleCursorInfo;
-    OrigVioMode: TConsoleScreenBufferInfo;
     OrigCP: cardinal;
     OrigCP: cardinal;
-
+    OrigConsoleCursorInfo : TConsoleCursorInfo;
+    OrigConsoleInfo : TConsoleScreenBufferInfo;
 
 
 procedure SysInitVideo;
 procedure SysInitVideo;
 
 
 begin
 begin
   ScreenColor:=true;
   ScreenColor:=true;
-  GetConsoleScreenBufferInfo(TextRec(Output).Handle, ConsoleInfo);
-  GetConsoleCursorInfo(TextRec(Output).Handle, ConsoleCursorInfo);
+  GetConsoleScreenBufferInfo(TextRec(Output).Handle, OrigConsoleInfo);
+  GetConsoleCursorInfo(TextRec(Output).Handle, OrigConsoleCursorInfo);
+  OrigCP := GetConsoleCP;
+  ConsoleInfo:=OrigConsoleInfo;
+  ConsoleCursorInfo:=OrigConsoleCursorInfo;
   {
   {
     About the ConsoleCursorInfo record: There are 3 possible
     About the ConsoleCursorInfo record: There are 3 possible
     structures in it that can be regarded as the 'screen':
     structures in it that can be regarded as the 'screen':
@@ -76,7 +78,10 @@ end;
 
 
 procedure SysDoneVideo;
 procedure SysDoneVideo;
 begin
 begin
+  SetConsoleScreenBufferSize (TextRec (Output).Handle, OrigConsoleInfo.dwSize);
+  SetConsoleWindowInfo (cardinal (TextRec (Output).Handle), true, OrigConsoleInfo.srWindow);
   SetCursorType(crUnderLine);
   SetCursorType(crUnderLine);
+  SetConsoleCP(OrigCP);
 end;
 end;
 
 
 
 
@@ -401,17 +406,14 @@ Const
   );
   );
 
 
 procedure TargetEntry;
 procedure TargetEntry;
-
 var
 var
   C: Coord;
   C: Coord;
   SR: Small_Rect;
   SR: Small_Rect;
-
+  VioMode: TConsoleScreenBufferInfo;
 begin
 begin
-  GetConsoleScreenBufferInfo (TextRec (Output).Handle, OrigVioMode);
-  GetConsoleCursorInfo (TextRec (Output).Handle, OrigCurType);
-  OrigCP := GetConsoleCP;
+  GetConsoleScreenBufferInfo (TextRec (Output).Handle, VioMode);
   { Register the curent video mode in reserved slot in System Modes}
   { Register the curent video mode in reserved slot in System Modes}
-  with OrigVioMode do
+  with VioMode do
     begin
     begin
       {Assume we have at least 16 colours available in "colour" modes}
       {Assume we have at least 16 colours available in "colour" modes}
       SysVMD[SysVideoModeCount-1].Col:=dwMaximumWindowSize.X;
       SysVMD[SysVideoModeCount-1].Col:=dwMaximumWindowSize.X;
@@ -421,7 +423,7 @@ begin
     end;
     end;
   GetMem (OrigScreen, OrigScreenSize);
   GetMem (OrigScreen, OrigScreenSize);
   with C do
   with C do
-    begin  
+    begin
       X := 0;
       X := 0;
       Y := 0;
       Y := 0;
     end;
     end;
@@ -429,10 +431,10 @@ begin
     begin
     begin
       Top := 0;
       Top := 0;
       Left := 0;
       Left := 0;
-      Right := Pred (OrigVioMode.dwSize.X);
-      Bottom := Pred (OrigVioMode.dwSize.Y);
+      Right := Pred (VioMode.dwSize.X);
+      Bottom := Pred (VioMode.dwSize.Y);
     end;
     end;
-  if not (ReadConsoleOutput (TextRec (Output).Handle, OrigScreen, OrigVioMode.dwSize, C, SR)) then
+  if not (ReadConsoleOutput (TextRec (Output).Handle, OrigScreen, VioMode.dwSize, C, SR)) then
     begin
     begin
       FreeMem (OrigScreen, OrigScreenSize);
       FreeMem (OrigScreen, OrigScreenSize);
       OrigScreen := nil;
       OrigScreen := nil;
@@ -447,7 +449,10 @@ initialization
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.15  2004-10-03 20:16:43  armin
+  Revision 1.16  2004-12-22 15:29:26  peter
+    * always restore original window/buffersize for the console at exit
+
+  Revision 1.15  2004/10/03 20:16:43  armin
   * SysUpdateScreen modified esi and edi
   * SysUpdateScreen modified esi and edi
 
 
   Revision 1.14  2004/09/15 18:59:40  hajny
   Revision 1.14  2004/09/15 18:59:40  hajny