Uses CRT, DOS; {-- read the character at the cursor and return it as a Char --} Function ScreenChar : Char; Var R : Registers; begin Fillchar(R, SizeOf(R), 0); R.AH := 8; R.BH := 0; Intr($10, R); ScreenChar := Chr(R.AL); end; {-- sample routine to read the screen and dump it to an ASCII file --} {-- it uses ScreenChar ----} Procedure DumpScreen; Var Num : Integer; X1,Y1, x,y : Byte; S : String[79]; {- line length string; some prefer string[80] -} Ch : Char; Buf : Array[1..25] of String[79]; {- buffer to hold the screen contents -} F : Text; FName:String[79]; begin x1 := WhereX; y1 := WhereY; {- save present location of the cursor -} {- initialise the variables --} Num := 0; X := 1; Y := 1; S := ''; FillChar(Buf, Sizeof(Buf), #0); {- do the stuff --} Repeat GotoXy(X,Y); {-- start from top left of screen --} Inc(Num); {-- increase line counter --} Ch := ScreenChar; {-- read the character at screen location --} S := S+Ch; {-- add it to temporary string --} Inc(X); {-- goto next screen column -} If (Ch = #13) or (X = 79) Then {- CR, or end of screen-width-} begin X := 1; {- back to column 1 -} Buf[Y] := s; {- put the line in buffer (string array) -} s := ''; {- empty the temporary string -} Inc(Y); {- goto next line (row) -} end; Until (Num = 1975); {- until we have read the screen (79*25 chars )-} {-- write the buffer to a text file --} FName := 'SCREEN.SAV'; Assign(F, FName); SetTextBuf(F, Buf); {$I-} Append(f); {- if the file exists, append buffer to it -} {$I+} If IoResult <> 0 Then ReWrite(f); {- else create a new one -} For x := 1 to 25 do Writeln(F, Buf[x]); {- write it -} {$I-} Close(F); {$I+} If IoResult <> 0 Then; GotoXy(x1,y1); {- return to original location -} end; BEGIN DumpScreen; END.