anchor.diff:      PrintFileName:=FileNameList.Count>1;
       for FileNameIndex:=0 to FileNameList.Count-1 do begin
        FileName:=FileNameList[FileNameIndex];
  -     FileMappedStream:=TBeRoFileMappedStream.Create(FileName,fmOpenRead);
  +     if FileName='-' then begin
  +      IsStdIn:=true;
  +      FileMappedStream:=nil;
  +     end else begin
  +      IsStdIn:=false;
  +      FileMappedStream:=TBeRoFileMappedStream.Create(FileName,fmOpenRead);
  +     end;
        try
         HighResolutionTimer:=THighResolutionTimer.Create;
         try
          Count:=0;
  +       SlidingOffset:=0;
          StartTime:=HighResolutionTimer.GetTime;
  -       while FileMappedStream.Position<FileMappedStream.Size do begin
  -        SlidingOffset:=FileMappedStream.Position;
  -        ToDo:=FileMappedStream.Size-SlidingOffset;
  -        Memory:=FileMappedStream.Memory;
  -        MemoryViewSize:=FileMappedStream.MemoryViewSize;
  -        if ToDo>MemoryViewSize then begin
  +       while (assigned(FileMappedStream) and (FileMappedStream.Position<FileMappedStream.Size)) or (IsStdIn and not eof(Input)) do begin
  +        if assigned(FileMappedStream) then begin
  +         SlidingOffset:=FileMappedStream.Position;
  +         ToDo:=FileMappedStream.Size-SlidingOffset;
  +         Memory:=FileMappedStream.Memory;
  +         MemoryViewSize:=FileMappedStream.MemoryViewSize;
  +         if ToDo>MemoryViewSize then begin
  +          ToDo:=MemoryViewSize;
  +         end;
  +         if ToDo=0 then begin
  +          break;
  +         end;
  +        end else begin
  +         MemoryString:='';
  +         while not eof(Input) do begin
  +          Read(Input,BufferChar);
  +          MemoryString:=MemoryString+BufferChar;
  +          if BufferChar=SplitCharacter then begin
  +           break;
  +          end;
  +         end;
  +         MemoryViewSize:=length(MemoryString);
            ToDo:=MemoryViewSize;
  -        end;
  -        if ToDo=0 then begin
  -         break;
  +         if ToDo=0 then begin
  +          break;
  +         end;
  +         Memory:=@MemoryString[1];
           end;
           LastLineOffset:=-1;
           LastEndLineOffset:=-1;
  
positive.code:          end;
  
          end;
          FileMappedStream.Seek(ToDo,soCurrent);
         end;
         EndTime:=HighResolutionTimer.GetTime;
         case Mode of
  
negative.code:     Memory:pointer;
      MultiCaptures:TFLREMultiCaptures;
      FileNameIndex,Count,Index,SubIndex,FirstNewLine,Mode,LastLineOffset,LastEndLineOffset,LineEndOffset,LineOffset,MaximumCount:longint;
      Parameter,Argument,RegularExpression,Directory,FileName,MemoryString:ansistring;
      HasRegularExpression,HasFileName,SuppressErrorMessages,Quiet,LineBuffered,ByteOffset,OnlyMatching,PrintFileName,IsStdIn:boolean;
      RegularExpressionFlags:TFLREFlags;
      SplitCharacter,BufferChar:ansichar;
      HighResolutionTimer:THighResolutionTimer;
      StartTime,EndTime:int64;
      FileNameList,StringList:TStringList;
  