{ Well, I'm writing a File Viewer and it works great, except for one thing, if you're on the last screen of the file you're viewing, and you hit Page Down... it will go BELOW the last line and display sime High ASCii Characters... I have tried many things to get this to work... but it won't.. If SWAG wants this, they can have it... ------------------------------------------------------ {This is Released Into the Public Domain on May 21 } {By Steven B Edwards. Do what you want to it, if yo , } {give me some credit if you use it. } Uses Crt, Dos; Type LinePtr = ^LineRec; LineRec = String[79]; Var CurLine: Array[1..16000] of LinePtr; Total: Integer; Current, OldLine: Integer; F: Text; I: Byte; Ch: Char; Done, Again: Boolean; procedure WriteColor(S : string); var I: byte; begin for I := 1 to Length(S) do begin case S[I] of '0'..'9' : textcolor(lightcyan); 'A'..'Z' : textcolor(LightGray); 'a'..'z' : textcolor(White); #9: Write(' ':8); else textcolor(3); end; If S[I] <> #9 then write(S[I]); end; I := 79 - Length(S); Write(' ':I); end; Begin ClrScr; Assign(F, ParamStr(1)); Reset(F); Total := 1; While not Eof(F) do begin New (CurLine[Total]); ReadLn(F, CurLine[Total]^); Inc(Total); end; Close(F); Current := 1; Again := True; Done := False; Repeat If Again then begin For I := 0 to 23 do begin GotoXY(1, I + 1); WriteColor(CurLine[Current + I]^); End; Again := False; End; Ch := ReadKey; Case Ch of #0: begin OldLine := Current; Ch := ReadKey; Case Ch of #72: If Current > 1 then Dec(Current); #80: If Current + 24 < Total then Inc(Current); #73: {Page Up} If Current > 23 then Dec(Current, 23); #81: {Page Down} If Current < Total - 25 then Inc(Current, 23) else Current := Total - 24; #71: {Home} Current := 1; #79: {End} Current := Total - 24; end; If OldLine <> Current then Again := True; end; end; Until Ch = #27; End.