program reversefile2;
uses Windows;
const MAX_READ = 4096;
// avoids using SysUtils and its initializations
function FileRead(Handle: THandle; var Buffer; Count: LongWord): Integer;
begin
if not ReadFile(Handle, Buffer, Count, LongWord(Result), nil) then
Result := -1;
end;
function FileWrite(Handle: THandle; const Buffer; Count: LongWord): Integer;
begin
if not WriteFile(Handle, Buffer, Count, LongWord(Result), nil) then
Result := -1;
end;
var buf: array of char;
numRead: integer;
inHandle,outHandle: THandle;
filePos,i,e: cardinal;
begin
inHandle:=GetStdHandle(STD_INPUT_HANDLE);
outHandle:=GetStdHandle(STD_OUTPUT_HANDLE);
setLength(buf, MAX_READ);
numRead:=fileRead(inHandle,buf[0],MAX_READ);
filePos:=0;
while numRead>0 do begin
inc(filePos,numRead);
if integer(filePos)+MAX_READ-1>high(buf) then
setLength(buf, (high(buf)+1)*2);
numRead:=fileRead(inHandle,buf[filePos],MAX_READ);
end;
e:=filePos-1;
for i:=filePos-2 downto 0 do
if buf[i]=#10 then begin
fileWrite(outHandle,buf[i+1],e-i);
e:=i;
end;
fileWrite(outHandle,buf[0],e+1);
end.