anchor.diff:      FFDIContext      : HFDI;
       FFDICabInfo      : FDICabInfo;
       FErrors          : CabErrorRecord;
  -    FFileHandle      : Integer;
       FItemInProgress  : TAbCabItem;
       FIIPName         : string;
       FItemProgress    : DWord;
  
positive.code:   {Open an existing cabinet}
  var
    Abort : Boolean;
  begin
      {verify that the archive can be opened and is a cabinet}
    FFileHandle := FileOpen(FArchiveName, fmOpenRead or fmShareDenyNone);
    if (FFileHandle <= 0) then
      raise EAbReadError.Create;
    if not FDIIsCabinet(FFDIContext, FFileHandle, @FFDICabInfo) then begin
      CloseCabFile;
      raise EAbInvalidCabFile.Create;
    end;
  
      {store information about the cabinet}
    FileClose(FFileHandle);
    FCabSize := FFDICabInfo.cbCabinet;
    FFolderCount := FFDICabInfo.cFolders;
    FFileCount := FFDICabInfo.cFiles;
  
negative.code: uses
    AbExcept;
  
  {$WARN UNIT_PLATFORM OFF}
  {$WARN SYMBOL_PLATFORM OFF}
  
  type
  