anchor.diff:  
       if ( pExtendedInfo^.w1 and 8 ) > 0 then
         // skip window controls
  -      inc( p, 2 );
  +      inc( p, sizeof(word) );
   
       if ( pExtendedInfo^.w2 and 4 ) > 0 then
       begin
         _ContentsGroupIndex := pint16(p)^;
         // read group
  -      inc(p, sizeof(int16));
  -    end;
  -  end;
  -
  +      inc(p, sizeof(word));
  +    end;
  +  end;
  +
  +  // offset of slots in INF file
  +  pSlotOffsets := FileData + FileHeader.slotsstart;
     // Read slot indices
     for i := 0 to _NumSlots-1 do
     begin
       SlotNumber:= pint16( p )^;
  -    if SlotNumber < FileHeader.nslots then
  -    begin
  -      pSlotOffsets := FileData + FileHeader.slotsstart;
  +    if SlotNumber < FileHeader.nslots then   // ??? graeme: I don't see the point of this check
  +    begin
         // point to correct slot offset
         pSlotData := pSlotHeader( FileData + pSlotOffsets^[ SlotNumber ] );
         if pSlotData^.stuff <> Byte(0) then
  
positive.code:       Slot.LocalDictSize := pSlotData^.nLocalDict;
        Slot.Size := pSlotData^.ntext;
  
        _Slots^[ _NumSlotsUsed ] := Slot;
        inc( _NumSlotsUsed );
  
      end;
      inc( p, sizeof( int16 ) );
    end;
  
    titleLen := _pTOCEntry^.length - ( longword(p) - longword(_pTOCEntry) );
  
    // Read title
  
negative.code: 
        if LocalDictIndex < Slot.LocalDictSize then
        begin
          // Normal word lookup: local dict i item = global dict i item
          GlobalDictIndex := Slot.pLocalDictionary^[ LocalDictIndex ];
          // normal lookup
          if GlobalDictIndex < _GlobalDictionary.Count then
            Word := _GlobalDictionary[ GlobalDictIndex ]
  