anchor.diff:        SetLength(fSaves, fCount);
         fSaves[fCount-1] := TKMSaveInfo.Create(PathToSaves, TruncateExt(SearchRec.Name));
       end;
  -  until (FindNext(SearchRec)<>0);
  +  until (FindNext(SearchRec) <> 0);
     FindClose(SearchRec);
   end;
   
  
positive.code: 
  
  procedure TKMSavesCollection.Clear;
  var i:integer;
  begin
    for i:=0 to fCount-1 do
      fSaves[i].Free;
    fCount := 0;
  end;
  
  
  function TKMSavesCollection.GetSave(Index:integer):TKMSaveInfo;
  begin
    Assert(InRange(Index, 0, fCount-1));
    Result := fSaves[Index];
  end;
  
  
  procedure TKMSavesCollection.DeleteSave(Index:integer);
  var i:integer;
  begin
    Assert(InRange(Index, 0, fCount-1));
    DeleteFile(fSaves[Index].Path + fSaves[Index].fFilename + '.sav');
    DeleteFile(fSaves[Index].Path + fSaves[Index].fFilename + '.rpl');
    DeleteFile(fSaves[Index].Path + fSaves[Index].fFilename + '.bas');
    fSaves[Index].Free;
    for i:=Index to fCount-2 do
      fSaves[i] := fSaves[i+1]; //Move them down
    dec(fCount);
    SetLength(fSaves,fCount);
  end;
  
  
  //Scan either single or multiplayer saves
  function TKMSavesCollection.SavesList: string;
  var i:integer;
  begin
    Result := '';
    for i:=0 to fCount-1 do
      Result := Result + fSaves[i].Filename + eol;
  end;
  
  
  
negative.code: end;
  
  
  function TKMSaveInfo.IsValid: Boolean;
  begin
    Result := FileExists(fPath + fFilename + '.sav') and (fSaveError = '') and fInfo.IsValid;
  end;
  