{ > I can't find a procedure to call and display a text > to the screen inside a window [window(1,2,80,24)] and be able to put pauses > scrolling into it if'n it takes up more than 23 lines of text. I took a swing at this when I saw your message. I wrote a little unit called BuffrTxt that should be pretty self-explainatory, since I was so generous with my comments. Is this pretty much what you were looking for? { ********************************************************************** * BufferText * * by * * Todd A. Jacobs * * * * Buffers a text file to prevent a view port overflow. * ********************************************************************** This code is hereby released into the public domain. This program was an excercise I did when someone asked about how to read a text file into a text window without having it all scroll off the screen. This unit buffers the text into an array which is based on how many lines exist between the upper and lower boundaries of the window. One of the problems with doing it this way is that if the text read in is the same width as the view port, it will wrap--thereby throwing off the buffer. To "solve" this, I elected to truncate the lines to prevent wrapping. } Unit BuffrTxt; Interface Var Lines : Byte; {Example parameters for DefineWindow: DefineWindow (10, 3, 70, 23, 1, 15); The first four XY parameters are self-explanitory. BG & FG set the background and foreground colors for the text viewport. } Procedure DefineWindow (ULeftX, ULeftY, LRightX, LRightY, BG, FG : BYTE); Procedure ReadFile (FileName : String); {By keeping all the details hidden inside the implementation, you won't have to recompile every piece of source you have used this with if you change one of the constants, because the interface will remain the same. } Implementation Uses Crt; Const PauseStr = '-=[ Press any key to continue ]=-'; MaxScrWidth = 80; MaxArraySize = 25; Procedure DefineWindow; Begin {DefineWindow} Lines := LRightY - ULeftY; {Sets boundaries for use in ReadFile} Window (ULeftX, ULeftY, LRightX, LRightY); TextBackground (BG); TextColor (FG); ClrScr; End; {DefineWindow} Procedure ReadFile; {Set the size of the array from the window boundaries as defined in the constants} Type StringArray = Array [1..MaxArraySize] of String[MaxScrWidth]; Var F: Text; TmpBuf: String[MaxScrWidth]; {Will truncate longer lines to prevent wrap} StrBuf: StringArray; {This buffer holds 25 lines of 80 cols each} Counter1, Counter2: Byte; Begin {ReadFile} Assign(F, FileName); Reset(F); While not Eof(F) do Begin {Initialize the counters each time through the loop} Counter1 := 0; Counter2 := 0; Repeat {This is where the buffer is restricted to Y2 - Y1 Lines} Inc (Counter1); Readln(F, TmpBuf); StrBuf[Counter1] := TmpBuf; Until Eof(F) or (Counter1 = Lines); {Also prevents reading past EOF} {Write buffered lines to the screen} For Counter2 := 1 to Counter1 do Writeln (StrBuf[Counter2]); Write (PauseStr); Readln; End; {Goes back for more buffering "while not EOF"} Close(F); End; {ReadFile} End. {Unit}