[Back to TEXTFILE SWAG index] [Back to Main SWAG index] [Original]

    {
    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...

    ---------------------------<CUT HERE>---------------------------

    {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.

[Back to TEXTFILE SWAG index] [Back to Main SWAG index] [Original]