anchor.diff:    Confirm : Boolean;
     Found : Boolean;
     i : Integer;
  -  FixedPath: string;
  +  FixedPath, OldFileName: string;
   begin
     CheckValid;
     FixedPath := FixName(NewStoredPath);
  
positive.code:   if not Confirm then
      Exit;
  
    with aItem do begin
      FileName := FixedPath;
      Action := aaMove;
    end;
    FIsDirty := True;
    if AutoSave then
      Save;
  
negative.code: var
    H : LongInt;
    Look : TAbArchiveItem;
    Last : ^TAbArchiveItem;
    FN : string;
  begin
    if FOwnsItems then begin
      FN := TAbArchiveItem(FList[Index]).FileName;
      Last := @HashTable[GenerateHash(FN)];
      Look := Last^;
      { Delete old index }
      while Look <> nil do begin
        if CompareText(Look.FileName, FN) = 0 then begin
          Last^ := Look.NextItem;
          Break;
        end;
        Last := @Look.NextItem;
        Look := Last^;
      end;
      { Free old instance }
      TObject(FList[Index]).Free;
      { Add new index }
      H := GenerateHash(Item.FileName);
      Item.NextItem := HashTable[H];
      HashTable[H] := Item;
    end;
    { Replace pointer }
    FList[Index] := Item;
  end;
  { -------------------------------------------------------------------------- }
  procedure TAbArchiveList.UpdateHash(aItem: TAbArchiveItem;
    const aOldFileName: string);
  var
    H : LongInt;
    Last : ^TAbArchiveItem;
    Look : TAbArchiveItem;
  begin
    if FOwnsItems then begin
      { Remove from old hash position }
      Last := @HashTable[GenerateHash(aOldFileName)];
      Look := Last^;
      while Look <> nil do begin
        if Look = aItem then begin
          Last^ := Look.NextItem;
          Break
        end;
        Last := @Look.NextItem;
        Look := Last^
      end;
      { Add to new hash position }
      H := GenerateHash(aItem.FileName);
      aItem.NextItem := HashTable[H];
      HashTable[H] := aItem
    end;
  end;
  
  
  