Unit CrtSeg; { CRTSEG.TPU - Written by Tom Donnelly and placed into the public domain. Allow the video segment address in CRT.TPU to be overridden with a different address. Particularly useful under DesqView, to make Turbo Pascal programs more DesqView compliant. Example: SetCrtSeg(Desqview_video_buffer); This unit has only been tested under Turbo Pascal 6. It may or may not work under different TP versions. It is distributed "as is" without any claims or warranties expressed or implied. Use at your own risk. If anyone finds a problem with this code, I'd appreciate hearing about it. Tom Donnelly - 73200,1323 07/23/92 - Version 1.0 - Initial public-domain release. } Interface Uses CRT; Procedure SetCrtSeg(iSeg: Word); Implementation Const CRTSEGOFFSET = $5D3; {Offset in CRT.TPU to CRT buff seg value} OldCrtSeg : Word = $B800; Procedure SetCrtSeg; Var CrtSegAddr : ^Word; {Pointer to CRT buffer segment literal} CrtNoOps : ^Byte; {Pointer to area to no-op} Begin CrtSegAddr := Ptr(Seg(AssignCrt),CRTSEGOFFSET); CrtNoOps := Ptr(Seg(AssignCrt),CRTSEGOFFSET+2); If CrtSegAddr^<>OldCrtSeg Then Begin Writeln('CRTSEG.TPU: Could not find CRT segment address hook'); If ReadKey<>#0 Then; End Else Begin OldCrtSeg :=CrtSegAddr^; CrtSegAddr^:=iSeg; {Plug in new CRT buffer segment} FillChar(CrtNoOps^,9,$90); {No-op the remainder of the code} End; End; End.