anchor.diff:  
     PAbIntegerArray = ^TAbIntegerArray;
     TAbIntegerArray = array[0..65535 div sizeof(integer)-1] of integer;
  +
  +  TAbZipEndOfCentralDirectoryRecord = packed record
  +    Signature               : Longint;
  +    DiskNumber              : Word;
  +    StartDiskNumber         : Word;
  +    EntriesOnDisk           : Word;
  +    TotalEntries            : Word;
  +    DirectorySize           : LongWord;
  +    DirectoryOffset         : LongWord;
  +    CommentLength           : Word;
  +  end;
   
     TAbFollower =                      {used to expand reduced files}
       packed record
  
positive.code:   Result := aStream.Seek(-sizeof(TailRec), soEnd);
    if (Result >= 0) then begin
      aStream.ReadBuffer(TailRec, sizeof(TailRec));
      if (TailRec.trSig = Ab_ZipEndCentralDirectorySignature) and
         (TailRec.trLen = 0) then begin
        aStream.Seek(Result, soBeginning);
        Exit;
      end;
  
negative.code: 
          {if it's as valid a tail as we can check here...}
          CommentLen := -Offset - (TestPos - Buffer + sizeof(TailRec));
          if (TailRec.CommentLength <= CommentLen) then begin
  
            {calculate its position and exit}
            Result := Result + (TestPos - Buffer);
  