home *** CD-ROM | disk | FTP | other *** search
- {
- ERIC MILLER
- read a Text File and scroll
- }
-
- Uses
- Crt;
-
- Const
- MaxLine = 200;
- MaxLength = 80;
-
- Var
- Lines : Array [1..MaxLine] of String[MaxLength];
- OldLine,
- L,
- CurrentLine,
- NumLines : Word;
- TextFile : Text;
- Key : Char;
- Redraw,
- Done : Boolean;
-
- begin
- ClrScr;
- Assign(TextFile, 'MCGALIB.PAS');
- Reset(TextFile);
- NumLines := 0;
- While not EOF(TextFile) and (NumLines < MaxLine) DO
- begin
- Inc(NumLines);
- Readln(TextFile, Lines[NumLines]);
- end;
- Close(TextFile);
-
- {
- Well...that handles getting the File into memory...but
- to scroll through using Up/Down & PgUp PgDn is a lot harder,
- but not incredibly difficult.
- }
- Done := False;
- Redraw := True;
- CurrentLine := 1;
-
- While not Done DO
- begin
- if Redraw then
- begin
- GotoXY(1,1);
- For L := CurrentLine to CurrentLine + 22 DO
- Write(Lines[L], ' ':(80-Length(Lines[L])));
- Redraw := False;
- end;
- Key := ReadKey;
- Case Key of
- #0:
- begin { cursor/page keys }
- OldLine := CurrentLine;
- Key := ReadKey;
-
- Case Key of
- #72: { up }
- if CurrentLine > 1 then
- Dec(CurrentLine);
- #80: { down }
- if CurrentLine < (NumLines-22) then
- Inc(CurrentLine);
- #73: { page up }
- if CurrentLine > 23 then
- Dec(CurrentLine, 23)
- else
- CurrentLine := 1;
- #81: { page down }
- if CurrentLine < (NumLines-44) then
- Inc(CurrentLine, 23)
- else
- CurrentLine := NumLines-22;
- end;
-
- if CurrentLine <> OldLine then
- Redraw := True;
- end;
-
- #27: Done := True;
-
- end; {Case}
- end; {begin}
- end. {Program}
-
- {
- That should work For scrolling through the lines. Sorry
- 'bout not commenting the code alot; it is almost self-explanatory
- though. But it works! You could optimize it For larger Files
- by using an Array of Pointers to Strings. But enough For now.
- }