[Back to TEXTFILE SWAG index] [Back to Main SWAG index] [Original]
{
³I would like to be able to read a standard ASCII Text File from disk into
³a section of memory so I would be able to call up the screen later. How
³would I accomplish this? I'm assuming that once I have it in memory I could
³copy the information into $B800 and so have it display on the screen. This
³would actually be useful For an instruction screen so I could scroll one
³screenful at a time With PgDn.
Sample code For viewing Text File. Feel free to experiment With it. If you
have any questions, just ask.
}
Uses
Crt, Dos;
Procedure ViewTextFile(fname: String);
{ fname - name of Text File to display }
Const
Bad = #255;
Null = #0;
ESC = #27;
Home = #71;
PgUp = #73;
PgDn = #81;
Done : Boolean = False;
PageIndex: Word = 1; { index to our screen/page }
Var
InFile : File; { unTyped File }
PFile : Pointer; { Pointer to our heap area }
Size, { size of File }
Result, { return code For BlockRead }
FileSeg, { Segment address of File in heap }
off: Word; { use as offset to our heap }
Pages: Array[1..2000] of Word; { define screen as Array of Words }
ch: Char; { For reading commands }
begin
Assign(InFile, fname);
{$I-} Reset(InFile, 1); {$I+}
if IOResult <> 0 then
begin
Writeln('File not found: ',fname);
Halt(1) { stop Program & return to Dos }
end;
Size := FileSize(InFile); { get size of File }
GetMem(PFile, Size); { allocate space in heap }
FileSeg := Seg(PFile^); { get Segment address of File in heap }
BlockRead(InFile, PFile^, Size, Result); { use BlockRead For fast File I/O }
FillChar(Pages, SizeOf(Pages), 0); { fill page With zeroes--ie:blank }
Repeat
ClrScr;
off := Pages[PageIndex];
Repeat { display screenfull at a time }
Write(Chr(Mem[FileSeg:off]));
inc(off);
Until (off = Size) or (WhereY = 25);
Repeat { inner event loop }
ch := ReadKey;
if ch = ESC then
Done := True { user escaped }
else
if ch = Null then
Case ReadKey of
Home: PageIndex := 1; { go to first page }
PgUp: if PageIndex > 1 then
Dec(PageIndex);
PgDn: if off < Size then
begin
Inc(PageIndex);
Pages[PageIndex] := off;
end
else
ch := Bad
end;
Until (ch = Null) or Done;
Until Done;
Close(InFile) { don't forget to close the File }
end; { DisplayTextFile }
begin
if ParamCount > 0 then
ViewTextFile(ParamStr(1))
else
Writeln('Error: Missing File parameter.')
end. { program }
[Back to TEXTFILE SWAG index] [Back to Main SWAG index] [Original]