| procedure Readback (const f: integer; var Line: String; var _bof: boolean);
const
MAXLINELENGTH = 256;
var
curr,
Before : Longint;
Buffer : array [0..MAXLINELENGTH] of char;
p : PChar;
begin
curr := FileSeek (f, 0, 1);
Before := curr - MAXLINELENGTH;
if Before < 0 then
Before := 0;
FileSeek (f, Before, 0);
FileRead (f, Buffer, curr - Before);
Buffer[curr - Before] := #0;
p := StrRScan (Buffer, #10);
if p = Nil then
begin
Line := StrPas (Buffer);
FileSeek (f, 0, 0);
_bof := True
end
else
begin
Line := StrPas (p + 1);
FileSeek (f, Before + Longint (p) - Longint (@Buffer), 0);
_bof := False
end;
if length (Line) > 0 then
if Line[length (Line)] = #13 then
begin
SetLength (Line, length (Line) - 1)
end
end;
procedure TForm1.FormCreate (Sender: TObject);
const
FileName = 'c:\delphi3\bin\unit1.pas';
var
f : integer;
Line : string;
BeginOfFile : boolean;
begin
f := FileOpen (FileName, 0);
FileSeek (f, 0, 2);
repeat
Readback (f, Line, BeginOfFile);
ListBox1.Items.Insert (0, Line);
until BeginOfFile;
FileClose (f);
end; | |