anchor.diff:      procedure SetupCellEdit(AGrid: TfpgStringGrid);
       procedure CleanupCompilerMakeOptionsGrid;
       procedure CleanupCompilerDirs;
  +    procedure CleanupUserMacrosGrid;
       procedure SaveToMacroList(AList: TIDEMacroList);
     public
       constructor Create(AOwner: TComponent); override;
  
positive.code:         grdCompilerDirs.Cells[j, i] := cCheck;
      end;
    end;
  end;
  
  procedure TProjectOptionsForm.SaveSettings;
  
negative.code:   begin
      if Trim(grdCompilerDirs.Cells[10, i]) = '' then
        grdCompilerDirs.DeleteRow(i);
    end;
  end;
  
  // remove all rows that have empty macro names or values
  procedure TProjectOptionsForm.CleanupUserMacrosGrid;
  var
    i: integer;
  begin
    for i := grdUserMacros.RowCount-1 downto 0 do
    begin
      if (Trim(grdUserMacros.Cells[6, i]) = '') or (Trim(grdUserMacros.Cells[7, i]) = '') then
        grdUserMacros.DeleteRow(i);
    end;
  end;
  
  