2
0
Эх сурвалжийг харах

* fix several problems with go32v2 graphic support

pierre 23 жил өмнө
parent
commit
2673dda4d4
1 өөрчлөгдсөн 40 нэмэгдсэн , 26 устгасан
  1. 40 26
      ide/fpusrscr.pas

+ 40 - 26
ide/fpusrscr.pas

@@ -88,11 +88,11 @@ type
       VIDEBuffer   : PByteArray;
       IDEVideoInfo : TDOSVideoInfo;
       ctrl_c_state : boolean;
-{$ifdef TEST_GRAPH_SWITCH}
+{$ifdef USE_GRAPH_SWITCH}
       GraphImageSize : longint;
       GraphBuffer : pointer;
       ConsoleGraphDriver, ConsoleGraphMode : word;
-{$endif TEST_GRAPH_SWITCH}
+{$endif USE_GRAPH_SWITCH}
       function    GetLineStartOfs(Line: integer): word;
       procedure   GetBuffer(Size: word);
       procedure   FreeBuffer;
@@ -183,13 +183,13 @@ uses
     {$endif}
   {$endif}
     ,Drivers,App
-  {$ifdef TEST_GRAPH_SWITCH}
+  {$ifdef USE_GRAPH_SWITCH}
     ,Graph,VESA
-  {$else not TEST_GRAPH_SWITCH}
+  {$else not USE_GRAPH_SWITCH}
   {$ifdef VESA}
     ,VESA
   {$endif VESA}
-  {$endif not TEST_GRAPH_SWITCH}
+  {$endif not USE_GRAPH_SWITCH}
   ;
 
 function TScreen.GetWidth: integer;
@@ -283,21 +283,29 @@ end;
 
 
 procedure TDOSScreen.GetLine(Line: integer; var Text, Attr: string);
-var X: integer;
-    W: word;
+var
+  X: integer;
+  W: word;
 begin
   Text:=''; Attr:='';
-  if Line<GetHeight then
-  begin
-    W:=GetLineStartOfs(Line);
-    for X:=0 to GetWidth-1 do
-     begin
-       {Text:=Text+chr(VBuffer^[W+X*2]);
-       Attr:=Attr+chr(VBuffer^[W+X*2+1]);}
-       System.Insert(chr(VBuffer^[W+X*2]),Text,Length(Text)+1);
-       System.Insert(chr(VBuffer^[W+X*2+1]),Attr,Length(Attr)+1);
-     end;
+  { VBuffer remains empty if in graph mode ... PM }
+  if (Line<GetHeight) and assigned(VBuffer) then
+    begin
+      W:=GetLineStartOfs(Line);
+      for X:=0 to GetWidth-1 do
+        begin
+          {Text:=Text+chr(VBuffer^[W+X*2]);
+          Attr:=Attr+chr(VBuffer^[W+X*2+1]);}
+          System.Insert(chr(VBuffer^[W+X*2]),Text,Length(Text)+1);
+          System.Insert(chr(VBuffer^[W+X*2+1]),Attr,Length(Attr)+1);
+        end;
+{$ifdef USE_GRAPH_SWITCH}
+    end
+  else if assigned(GraphBuffer) and (Line=0) then
+    Text:='Console in graph mode, use Alt+F5';
+{$else not USE_GRAPH_SWITCH}
   end;
+{$endif USE_GRAPH_SWITCH}
 end;
 
 
@@ -340,13 +348,13 @@ end;
 procedure TDosScreen.SaveConsoleScreen;
 var
   VSeg,SOfs: word;
-{$ifdef TEST_GRAPH_SWITCH}
+{$ifdef USE_GRAPH_SWITCH}
   saved : boolean;
   GraphDriver,GraphMode : integer;
-{$endif TEST_GRAPH_SWITCH}
+{$endif USE_GRAPH_SWITCH}
 begin
   GetVideoMode(ConsoleVideoInfo);
-{$ifdef TEST_GRAPH_SWITCH}
+{$ifdef USE_GRAPH_SWITCH}
   saved:=false;
   if assigned(GraphBuffer) then
     begin
@@ -391,6 +399,9 @@ begin
               GetMem(GraphBuffer,GraphImageSize);
               FillChar(GraphBuffer^,GraphImageSize,#0);
               GetImage(0,0,Graph.GetmaxX,Graph.GetMaxY,GraphBuffer^);
+              ConsoleVideoInfo.Rows:=Graph.GetMaxY div 8;
+              ConsoleVideoInfo.Cols:=Graph.GetMaxX div 8;
+              FreeBuffer;
               saved:=true;
             end
 {$ifdef DEBUG}
@@ -402,7 +413,7 @@ begin
     end;
   { mode < $100 so use standard Save code }
   if not saved then
-{$endif TEST_GRAPH_SWITCH}
+{$endif USE_GRAPH_SWITCH}
   begin
     GetBuffer(ConsoleVideoInfo.ScreenSize);
     if ConsoleVideoInfo.Mode=7 then
@@ -421,13 +432,13 @@ end;
 procedure TDOSScreen.SwitchToConsoleScreen;
 var
   VSeg,SOfs: word;
-{$ifdef TEST_GRAPH_SWITCH}
+{$ifdef USE_GRAPH_SWITCH}
   restored : boolean;
   GraphDriver,GraphMode : integer;
-{$endif TEST_GRAPH_SWITCH}
+{$endif USE_GRAPH_SWITCH}
 begin
   SetVideoMode(ConsoleVideoInfo);
-{$ifdef TEST_GRAPH_SWITCH}
+{$ifdef USE_GRAPH_SWITCH}
   restored:=false;
   if assigned(GraphBuffer) then
     begin
@@ -466,7 +477,7 @@ begin
     end;
   { mode < $100 so use standard Save code }
   if not restored then
-{$endif TEST_GRAPH_SWITCH}
+{$endif USE_GRAPH_SWITCH}
     begin
       if ConsoleVideoInfo.Mode=7 then
         VSeg:=SegB000
@@ -1226,7 +1237,10 @@ end;
 end.
 {
   $Log$
-  Revision 1.20  2002-09-13 08:15:06  pierre
+  Revision 1.21  2002-09-13 22:27:07  pierre
+   * fix several problems with go32v2 graphic support
+
+  Revision 1.20  2002/09/13 08:15:06  pierre
    * fix cursor position for linux vcsa support
 
   Revision 1.19  2002/09/13 07:17:33  pierre