diff --git a/ide/text/fpusrscr.pas b/ide/text/fpusrscr.pas index 99d486e3e6..1ffe74cc5d 100644 --- a/ide/text/fpusrscr.pas +++ b/ide/text/fpusrscr.pas @@ -72,8 +72,10 @@ type procedure SwitchBack; virtual; private VideoInfo : TDOSVideoInfo; - VBufferSize : word; + VBufferSize : longint; + VIDEBufferSize : longint; VBuffer : PByteArray; + VIDEBuffer : PByteArray; TM : TDOSVideoInfo; function GetLineStartOfs(Line: integer): word; procedure GetBuffer(Size: word); @@ -252,12 +254,30 @@ begin {$endif} end; - procedure TDOSScreen.SwitchTo; var VSeg,SOfs: word; begin GetVideoMode(TM); + { First keep a copy of IDE screen } + if VideoInfo.Mode=7 then + VSeg:=SegB000 + else + VSeg:=SegB800; + SOfs:=MemW[Seg0040:$4e]; + if not assigned(VIDEBuffer) or (VIDEBufferSize<>TM.ScreenSize) then + begin + if assigned(VIDEBuffer) then + FreeMem(VIDEBuffer,VIDEBufferSize); + GetMem(VIDEBuffer,TM.ScreenSize); + VIDEBufferSize:=TM.ScreenSize; + end; +{$ifdef FPC} + DosmemGet(VSeg,SOfs,VIDEBuffer^,TM.ScreenSize); +{$else} + Move(ptr(VSeg,SOfs)^,VIDEBuffer^,TM.ScreenSize); +{$endif} + SetVideoMode(VideoInfo); if VideoInfo.Mode=7 then @@ -274,9 +294,22 @@ end; procedure TDOSScreen.SwitchBack; +var + VSeg,SOfs: word; begin Capture; SetVideoMode(TM); + if VideoInfo.Mode=7 then + VSeg:=SegB000 + else + VSeg:=SegB800; + SOfs:=MemW[Seg0040:$4e]; + if assigned(VIDEBuffer) then +{$ifdef FPC} + DosmemPut(VSeg,SOfs,VIDEBuffer^,TM.ScreenSize); +{$else} + Move(VIDEBuffer^,ptr(VSeg,SOfs)^,TM.ScreenSize); +{$endif} end; @@ -669,7 +702,10 @@ end; end. { $Log$ - Revision 1.9 2000-02-04 23:17:25 pierre + Revision 1.10 2000-03-13 20:30:37 pierre + + stores IDE screen before Switching for DOS + + Revision 1.9 2000/02/04 23:17:25 pierre * Keep the entry ScreenBuffer at exit Revision 1.8 1999/12/01 16:17:18 pierre