anchor.diff:      raise EAbNoArchive.Create;
   end;
   { -------------------------------------------------------------------------- }
  -
   procedure TAbBaseBrowser.SetCompressionType(const Value: TAbArchiveType);
   begin
     if not Assigned(FArchive) or (Status <> asInvalid) then
  
positive.code:   else
      raise EAbArchiveBusy.Create;
  end;
  
  { -------------------------------------------------------------------------- }
  function AbDetermineArcType(const FN : string; AssertType : TAbArchiveType) : TAbArchiveType;
  var
    Ext : string;
    FS : TFileStream;
  begin
    Ext := UpperCase(ExtractFileExt(FN));
    Result := atUnknown;
  
    if AssertType = atUnknown then begin { use file extension as first guess }
      if not FileExists(FN) or (AbFileGetSize(FN) = 0) then begin          {!!.01}
      { file doesn't exist (or is empty) so presume to make one }          {!!.01}
        if Ext = '.ZIP' then
          Result := atZip;
        if Ext = '.JAR' then {!!.05}
          Result := atZip;
        if Ext = '.TAR' then
          Result := atTar;
        if (Ext = '.GZ') then
          Result := atGzip;
        if (Ext = '.TGZ') then
          Result := atGzippedTar;
        if (Ext = '.CAB') then
          Result := atCab;
      end
      else begin  { file exists so guess that's what it is and double check }
        FS := TFileStream.Create(FN, fmOpenRead or fmShareDenyNone);
        try
          Ext := UpperCase(ExtractFileExt(FN));
  
          if Ext = '.EXE' then
            Result := VerifySelfExtracting(FS);
          if Ext = '.ZIP' then
            Result := VerifyZip(FS);
          if Ext = '.JAR' then        {!!.05}
            Result := VerifyZip(FS);
          if Ext = '.TAR' then
            Result := VerifyTar(FS);
          if (Ext = '.GZ') or (Ext = '.TGZ') then
            Result := VerifyGzip(FS);
  {$IFDEF MSWINDOWS}
          if (Ext = '.CAB') then
            Result := VerifyCab(FN);
  {$ENDIF}
        finally
          FS.Free;
        end;
      end;
  
    end
    else begin  { we're told what it's supposed to be, so ignore file extension }
      if not FileExists(FN) then
        Result := AssertType
      else begin
        FS := TFileStream.Create(FN, fmOpenRead or fmShareDenyNone);
        try
          case AssertType of
            atZip : begin
              Result := VerifyZip(FS);
            end;
            atSelfExtZip : begin
              Result := VerifySelfExtracting(FS);
            end;
            atTar : begin
              Result := VerifyTar(FS);
            end;
            atGzip, atGzippedTar: begin
              Result := VerifyGzip(FS);
            end;
  {$IFDEF MSWINDOWS}
            atCab : begin
              Result := VerifyCab(FN);
            end;
  {$ENDIF}
          end;
        finally
          FS.Free;
        end;
      end;
    end;
  end;
  
negative.code: { -------------------------------------------------------------------------- }
  destructor TAbBaseBrowser.Destroy;
  begin
    FArchive.Free;
    FArchive := nil;
    inherited Destroy;
  