anchor.diff:  function FDI_FileOpen(lpPathName: PAnsiChar; Flag, Mode: Integer) : Integer;
     cdecl;
     {open a file}
  -begin
  -  Result := _lopen(lpPathName, Mode);
  +var
  +  Handle : Integer;
  +begin
  +  Handle := FileOpen(string(lpPathName), fmOpenRead or fmShareDenyWrite);
  +  if Handle <> -1 then
  +    Result := Integer(TFileStream.Create(Handle))
  +  else
  +    Result := -1;
   end;
   { -------------------------------------------------------------------------- }
   function FDI_FileRead(hFile: HFILE; lpBuffer: Pointer; uBytes: UINT) : UINT;
     cdecl;
     {read from a file}
   begin
  -  Result := _lread(hFile, lpBuffer, uBytes);
  +  Result := TStream(hFile).Read(lpBuffer^, uBytes);
   end;
   { -------------------------------------------------------------------------- }
   function FDI_FileWrite(hFile: HFILE; lpBuffer: Pointer; uBytes: UINT) : UINT;
     cdecl;
     {write to a file}
   begin
  -  Result := _lwrite(hFile, lpBuffer, uBytes);
  +  Result := TStream(hFile).Write(lpBuffer^, uBytes);
   end;
   { -------------------------------------------------------------------------- }
   procedure FDI_FileClose(hFile : HFILE);
     cdecl;
     {close a file}
   begin
  -  _lclose(hFile);
  +  TStream(hFile).Free;
   end;
   { -------------------------------------------------------------------------- }
   function FDI_FileSeek(hFile : HFILE; Offset : Longint; Origin : Integer) : Longint;
     cdecl;
     {reposition file pointer}
   begin
  -  Result := _llseek(hFile, Offset, Origin);
  +  Result := TStream(hFile).Seek(Offset, Origin);
   end;
   { -------------------------------------------------------------------------- }
   function FDI_EnumerateFiles(fdint : FDINOTIFICATIONTYPE;
  
positive.code:   NextCabName : string;
  begin
    Result := 0;
    Archive :=pfdin^.pv;
    case fdint of
      FDINT_Copy_File :
        begin
          if (string(pfdin^.psz1) = Archive.FItemInProgress.FileName) then
            Result := FileCreate(Archive.FIIPName)
          else
            Result := 0;
        end;
  
negative.code:       end;
      FDINT_Close_File_Info :
        begin
          if Archive.FIIPName <> '' then begin
            FileSetDate(TFileStream(pfdin^.hf).Handle,
              Longint(pfdin^.date) shl 16 + pfdin^.time);
            TFileStream(pfdin^.hf).Free;
            // [ 880505 ]  Need to Set Attributes after File is closed {!!.05}
            AbFileSetAttr(Archive.FIIPName, pfdin^.attribs);
          end;
          Archive.DoCabItemProcessed;
        end;
    end;
  