ROOT Version 2.23 Release Notes

//
// 01/02/2000  16.35.57  by  Rene Brun
//
//________________________________________________________________________
//
//::>          VERSION  2.23/12   01/02/2000 16.21.14
//
//
// 31/01/2000  11.23.56  by  Rene Brun
//
- CheckByteCount
  ==============
  All Root Streamers include now the CheckByteCount facility.
  All LinkDef files modified accordingly.
  For users intending to use the same facility, modify your Linkdef file
  adding a + character at the end of the class name, eg:
          #pragma link C++ class TLeafB+;
  The code generated for Streamers with the bytecount facility is backward
  compatible with Streamers not including this code.

- Modify Root header files declaring pointers to basic types in view
  of the planned rootcint extensions. For example the TPolyLine header
  looks like:
        Int_t        fN;            //Number of points
        Float_t      *fX;           //[fN] Array of X coordinates
        Float_t      *fY;           //[fN] Array of Y coordinates
        TString      fOption;       //options
  The string [fN] immediatly following the // indicates that the length
  of the arrays fX and fY is the value of the data member fN.
  Thanks to this change, rootcint will be able to automatically generate
  a valid Streamer for the class.

- Several headers modified for "char*" to "const char*". This concerns
  the G3D classes in particular.

- The StreamerInfo facility
  =========================
  A new function  const char *TObject::StreamerInfo has been introduced.
  Returns a string describing the names/types of object attributes
  as written by the Streamer function.
  A set of corresponding new functions has been added to the class TClass.
     void TClass::SetStreamerInfo(const char *info)
        info is a string describing the names and types of attributes
        written by the class Streamer function.
        If info is an empty string (when called by TObject::StreamerInfo())
        the default Streamer info string is build. This corresponds to
        the case of an automatically generated Streamer.
        In case of user defined Streamer function, it is the user responsability
        to implement a StreamerInfo function (overriding TObject::StreamerInfo).
        The user must call IsA()->SetStreamerInfo(info) from this function.
    void TClass::FillStreamerInfoList(TList *list)
        Fill a TList with all attributes names and types corresponding
        to this class, base classes, used classes, etc. The TList will contain
        a list of TNamed objects with attributeName and attributeType.
        class names are recursively analyzed to end-up with basic types only
        Other types are resolved to known basic types.
    void TClass::PrintStreamerInfoList(TList *list)
        print StreamerInfo items in the list.
        If the list pointer is null, print StreamerInfo for this class.
        For example, the following statement:
           TArrow::Class()->PrintStreamerInfoList(0);
        produces the following output:
           TArrow;1
                TLine;TAttFill;Float_t fAngle;Float_t fArrowSize;
                TString fOption;
           TLine;1
                TObject;TAttLine;Coord_t fX1;Coord_t fY1;
                Coord_t fX2;Coord_t fY2;
           TObject;1
                UInt_t fUniqueID;UInt_t fBits;
           TAttLine;1
                Color_t fLineColor;Style_t fLineStyle;Width_t fLineWidth;
           TAttFill;1
                Color_t fFillColor;Style_t fFillStyle;

   The TObject::StreamerInfo() function may be redefined in a class, eg
      const char *Myclass::StreamerInfo() {
         IsA()->SetStreamerInfo("TObject;TAttLine;fX;fY;Int_t i,j,k;Float_t x,y,z;");
         return IsA()-GetStreamerInfo();
      }
      This corresponds to the description of Streamer (write part)
            TObject::Streamer(R__b);
            TAttLine::Streamer(R__b);
            R__b << fX;
            R__b << fY;
            Int_t i,j,k;
            i = ...;
            j = ...;
            k = ...;
            R_b << i;
            R_b << j;
            R_b << k;
            Float_t x,y,z;
            x = ...;
            y = ...;
            z = ...;
            R_b << x;
            R_b << y;
            R_b << z;

   The StreamerInfo facility is currently implemented in the TTree system.
   The class TTree includes a new member:
        TList *fStreamerInfoList;
   that contains the StreamerInfo for all classes referenced in the
   Tree branches. This information is saved in the Tree header.
   We intend to make further extensions in future versions to use this
   information in: browsers, Inspectors, MakeClass.
   It should be possible to read any Root Tree when the code used to fill
   the Tree is not available any more.
   In the same way, we intend to add the StreamerInfoList in the TDirectory
   class to save the dictionary information of any object written into a
   Root file.

   We stronly suggest users implementing their own Streamers to also
   implement the corresponding StreamerInfo function.

- Functions DistancetoPrimitive and ExecuteEvent promoted from protected
  to public in classes TBox, TLine and Tmarker3DBox.

- Replace Text_t declarations by char in all Root classes.

- In classes TLorentzVector, TVector2 and TVector3, the TObject info
  is not Streamed anymore.

- New function TPad::WaitPrimitive(const char *pname, const char *emode)
  ======================================================================
  Loop and sleep until a primitive with name=pname
  is found in the pad.
  If emode is given, the editor is automatically set to emode, ie
  it is not required to have the editor control bar.
  The possible values for emode are:
   emode = "" (default). User will select the mode via the editor bar
         = "Arc", "Line", "Arrow", "Button", "Diamond", "Ellipse",
         = "Pad","pave", "PaveLabel","PaveText", "PavesText",
         = "PolyLine", "CurlyLine", "CurlyArc", "Text", "Marker", "CutG"
  if emode is specified and it is not valid, "PolyLine" is assumed.
  if emode is not specified or ="", an attempt is to use pname[1...]
  for example if pname="TArc", emode="Arc" will be assumed.
  When this function is called within a macro, the macro execution
  is suspended until a primitive corresponding to the arguments
  is found in the pad.
  While this function is executing, one can use the mouse, interact
  with the graphics pads, use the Inspector, Browser, TreeViewer, etc.
  Examples:
    c1.WaitPrimitive();      // Return the first created primitive
                             // whatever it is.
    c1.WaitPrimitive("ggg"); // Set the editor in mode "PolyLine/Graph"
                             // Create a polyline, then using the context
                             // menu item "SetName", change the name
                             // of the created TGraph to "ggg"
    c1.GetPrimitive("Arc");  // Set the editor in mode "Arc". Returns
                             // as soon as a TArc object is created.
    c1.GetPrimitive("lat","Text"); // Set the editor in Text/Latex mode.
                             // Create a text object, then Set its anme to "lat"

  The following macro waits for 10 primitives of any type to be created.
  {
     TCanvas c1("c1");
     TObject *obj;
     for (Int_t i=0;i<10;i++) {
        obj = gPad->WaitPrimitive();
        printf("Loop i=%d, found objIsA=%s, name=%sn",
               i,obj->ClassName(),obj->GetName());
     }
  }

- IMPORTING NEW CLASSES FROM STAR
  ===============================
  A new set of classes written in the context of the STAR collaboration
  at BNL have been added to the root.cmz file. The corresponding source
  files are not part of the released source tree. Discussions are going on
  with the STAR group to make several suggested changes.
//
// 29/01/2000  02.49.59  by  Fons Rademakers
//
- rootd: a new authentication method is to create a file ~/.rootdpass
  containing an encrypted password. If this file exists its password
  is used for authentication. This method overrides all other
  authentication methods. To create an encrypted password do
  something like:
     perl -e '$pw = crypt("<secretpasswd>","<salt>"); print "$pwn"'
  and store this string in ~/.rootdpass.
  Use this solution if your system has shadow passwords and you
  cannot run rootd from inetd. Or if you don't want to use your
  real password with rootd.
//
// 27/01/2000  18.44.06  by  Fons Rademakers
//
- Cleanup in the thread releated classes. Also removed any special
  R__THREAD ifdef's, so there is now only one thread capable version
  of ROOT instead of two different versions. All decks related
  to thread involved.

- TUnixSystem: Which() now also correctly finds files specified as
  dir/file.

- TVector: another fix to ResizeTo().

- TBuffer: CheckByteCount() returns now 0 in case of success or
  the amount of bytes beings skipped. This allows
  explicit error trapping in Streamers().

- TFile: fix in case gProof symbol is not known anymore to CINT.
//
// 21/01/2000  12.50.35  by  Rene Brun
//
- A small fix in TCanvas::EditorBar. The tooltip text for latex and marker
  were inverted (thanks Nick van Eijndhoven ).

- A small fix in TF1::Derivative (thanks Federico Carminati) in case
  the requested point is at the boundaries.

//
// 20/01/2000  18.03.54  by  Rene Brun
//
- Implement a better algorithm in TGraph::Fit to take into account
  errors along X and Y. This algorithm was proposed a long time ago
  by Jacek Holeczek, but never implemented , see URL:
        http://root.cern.ch/root/roottalk/roottalk98/0382.html
  The modification is in TGraph::GraphFitChisquare and is effective
  when a TGraphErrors::Fit is called.

- Port to LynxOS (thanks Vincent Boudry for providing a test machine).
  add new Makefile.lynxos
  Modify RConfig.h to support new compiler flag R__LYNXOS.
  Mods in Makemacros and makelib.
  Changes have been made in the following classes/functions
  class TUnixSystem, TMapFile, TNetFile, TGFSContainer.
  function TMinuit::mnexcm (TString replaced by const char*).
  R__LYNXOS flag added in C functions getline, attach and keys.

- add new function TMinuit::mnhelp(). It is equivalent to mnhelp("*").

- Modify the logic to accumulate/reset statistics for a 2-d histogram.
  2-d stats are now OK following TH1::Add, Divide and Multiply calls.
  New function TH1::PutStats.

- New versions of TPGON and TPCON from Valery Fine. The definition
  of parameters is consistent with the definition of these shapes in Geant3.

- fix a problem in TTreePlayer::MakeClass when generating the code
  to set the branch address of a branch corresponding to a class
  not available.
//
// 14/01/2000  10.27.08  by  Rene Brun
//
- Add two new functions in TH1:
    virtual Float_t  GetTitleSize(Option_t *axis="X");
    virtual void     SetTitleSize(Float_t size=0.02, Option_t *axis="X");

- Add TGraph::GetFunction(const char *name).

- Modify TTreePlayer::DrawSelect to not call gPad->Clear() in case one
  generates a 2-d or 3-d histogram. This has a side-effect when
  a TPostScript object was open to store multiple canvases.

- One of the TRotmatrix constructors was not setting correctly fType.
  The rotation matrix was called in case of an identity matrix.
  (thanks Andrzej Olszewski for reporting).

- Modify all TArrayx classes to preset the array to 0.
  When lNew is not used or on some machines (aix), the array was not
  preset.
//________________________________________________________________________
//
//::>          VERSION  2.23/11   12/01/2000 12.11.46
//
//
// 12/01/2000  09.56.24  by  Rene Brun
//
- Modify TTreePlayer::MakeClass and TTreePlayer::MakeCode to support
  branches with variable length strings.

- Move TGraph::LeastSquareFit and TGraph::LinearLeastSquareFit
  from public to private. These two functions use internally the
  static variables xfirst, xlast.
//
// 11/01/2000  18.43.07  by  Rene Brun
//
- Fix a bug in TTreeFormula::EvalInstance in case 4 when dividing
  expressions like x/y where y=0. the variable pos was not decremented
  in this case. (thanks Alexey Toptygin for reporting this case).
  The same fix has been applied to TFormula::EvalPar.

- Fix a bug in TLeafF::ReadBasketExport when a TClonesArray contains
  a data member that is an array and the number of elements in the array=1.
  We had a test in this case to avoid calling ReadFastArray.
  The test was "if(n==1)". Now changed to "if(n*flen==1)".
  (thanks to George Irwin and Stephan Hurling for reporting this problem).
  The same fix has been applied to TLeafI and TLeafS.

- Replace stack TObjArray loc in TGeometry::Get by a heap object instead.
  The static object was generating problems when the TGeometry object was
  destroyed before the file destructors.

- some cleanup in the original TAxis3D code from Valery.

- Modify the TMinuit constructor to allocate mne doubles to fGin
  instead of mni doubles. This was generating a problem when the
  option Gradient was used.
//
// 11/01/2000  08.53.16  by  Valery Fine
//
- TGWin32WindowsObject - kKeyPress event has been activated for TCanvas
                         under Windows

- new G3D class: TAxis3D to paint axis "around" TView object
//
// 09/01/2000  15.54.21  by  Rene Brun
//
- Implement new class TInspectCanvas. This class replaces
  the functionality previously provided by TPad::InspectObject.
  New functions added. Two buttons "Backward" and "Forward"
  can be used to naviguate in the list of already inspected
  objects.
  Files cint_gpad, gpad_linkdef and make-macros updated.

- Remove functions TVirtualPad::InspectObject and TPad::InspectObject.

- TObject::Inspect invokes directly the static function
  TInspectCanvas::Inspect via the interpreter.

- Fix a minor Y2K bug in TRINT::PrintLogo.

- Minor update in zdemo (do not set the TPaveLabel size).

- In class TButton, use a TLatex instead of TText.

- In TBox::ExecuteEvent remove obsolete statements from the time
  when TVirtualPad derived from TBox.
//
// 07/01/2000  15.40.08  by  Rene Brun
//
- Several changes in classes TVirtualPad, TPad and TCanvas to implement
  the AutoExec facility.
  The class TPad has a new data member TList *fExecs.
  fExecs may contain one or more TExec objects.
  Use TPad::addExec to enter a new TExec object in the list
  Use TPad::DeleteExec to remove&delete a TExec from the fExecs list.
  When a pad event occurs (mouse move, click, etc) all the commands
  contained in the fExecs list are executed in the order found in the list.
  This facility is activated by default. It can be deactivated by using
  the canvas "Option" menu.
  The following examples of TExec commands are provided in the tutorials:
  macros exec1.C and exec2.C.
  Example1 of use of exec1.C
  ==========================
  Root > TFile f("hsimple.root")
  Root > hpx.Draw()
  Root > c1.AddExec("ex1",".x exec1.C")
   At this point you can use the mouse to click on the contour of
   the histogram hpx. When the mouse is clicked, the bin number and its
   contents are printed.
  Example2 of use of exec1.C
  ==========================
  Root > TFile f("hsimple.root")
  Root > hpxpy.Draw()
  Root > c1.AddExec("ex2",".x exec2.C")
    When moving the mouse in the canvas, a second canvas shows the
    projection along X of the bin corresponding to the Y position
    of the mouse. The resulting histogram is fitted with a gaussian.
    A "dynamic" line shows the current bin position in Y.
    This more elaborated example can be used as a starting point
    to develop more powerful interactive applications exploiting CINT
    as a development engine.

- Include some corrections from Valery in:
  TShape:  Improve drawing speed
  TControlBarImp: working now on NT

- Modify TBox::ExecuteEvent, TPaveVar::ExecuteEvent, TPad::ExecuteEvent
  to execute the case kMouseEnter when the pad is not editable.
  With this change, the tooltip is again operational in all classes
  deriving from TBox and TPad such as TPavevar and TButton.
//
// 06/01/2000  08.24.52  by  Rene Brun
//
- Modify TNamed::SetName, SetTitle to Modify the current pad only
  if the bit kObjInCanvas is set.

- Protection added in TBasket::Streamer in case fLast > fBufferSize.
  This case could happen in case one entry occupies more than the original
  declared buffer size. (thanks Bill Love & Victor Perevoztchikov).

- Implement a new constructor in class TGaxis. The new constructor has
  an argument "funcname" replacing the arguments wmin,wmax and referencing
  an existing TF1 object mapping the user coordinates in the pad with
  the axis values. A new data member fFunction points to this TF1.
  The function TGaxis::PaintAxis has been updated to support the new
  functionality (thanks Mathieu de Naurois for this contribution).

- Modify the test program $ROOTSYS/test/MainEvent to add an new case
  with arg4 = 2 (write=0, fill=0).

//
// 04/01/2000  08.49.55  by  Rene Brun
//
- New styles "Bold" and "Video" are created by default (thanks Art Poskanzer).
  New static function TStyle::BuildStyles creating all standard styles
  "Default", "Plain" ,"Bold" and "Video".
  This function is called by the TROOT constructor.
//
// 03/01/2000  19.55.50  by  Rene Brun
//
- Reimplement TTreeViewer::BuildInterface. By default all Tree variables
  are created in the viewer. The canvas size is set with vertical and
  horizontal scroll bars.
  Remove the fCommand TPaveVar. Previous fCommand functionality is now
  provided by the TButton fRecord.

- Modify TPaveVar constructor to take the text attribute
  from the TreeViewer.
  Optimize speed by removing some unnecessary calls to TPad::Modified.

- Changes in TButton::ExecuteEvent. Do not call canvas->Modified.
  Automatically repaint current button title.

- Modify TPaveLabel::PaintPaveLabel. Do not use automatic text size
  computation when the text size is not zero or 0.9.

- Modify Aclock constructor in $ROOTSYS/test/Aclock.
  The canvas size may be specified as an optional argument.
//
// 31/12/1999  15.06.13  by  Rene Brun
//
- Modify TPad::Paint. Replace the statement fPrimitives->Paint(option)
  by an explicit loop. Following the modification in TCollection::Paint,
  TPad::Paint must transfer the GetDrawOption instead of option.
//
// 30/12/1999  17.32.33  by  Rene Brun
//
- Fix a problem in TTreeViewer::IsUnderW.
  This is a side effect of the introduction of the command/echo buttons.
  The test to find if a TPaveVar is under the selection button was not correct.
  When the selection TPavevar was moved out of the selection button,
  the command/echo TPaveVar was selected by mistake.

- Some improvements in TTreePlayer::MakeClass:
  Generate new function GetEntry.
  Take into account case of two levels of objects in one branch when
  generating the statement const Int kMaxBranchname. For example
  the branch HRichHit.fData.fRing generated the code kMaxHRichHit_fData.fRing
  instead of kMaxHRichHit_fData_fRing (thanks Thomas Eberl).

- Promote data members of class TGaxis from private to protected.

- Modify TTreePlayer::DrawSelect to use the new possibilities provided
  by the new version of TAxis::FindBin and TH1::RebinAxis.
  DrawSelect sets automatically the bit kCanRebin in the created histogram.
  In the previous versions, the parameter SetEstimate was essential to
  compute the histogram axis limits from the SetEstimate number of entries.
  With the new version, a first guess for the axis limits is computed
  from the current SetEstimate. If a new value is outside the axis limits,
  the limits will be automatically recomputed by doubling the current
  axis range. This algorithm works for 1-d, 2-d and 3-d histograms.

- Add new Function TH1::RebinAxis(Axis_t x, const char *axis="X")
  This function is automatically called by TAxis::FindBin, but may also
   be called by a user to automatically recompute the axis limits such
   that x is inside the axis limits.

- New option in TH1::Reset. If option="ICE", only the Integral, the Contents
  and the Errors are reset. Existing statistics and number of entries are
  not reset. This new option is used by the new TH1::RebinAxis.

- New function TAxis::FindFixBin (a copy of the previous FindBin).
  New functionality in TAxis::FindBin. In case of an underflow or overflow,
  FindBin may invoke TH1::RebinAxis if the new bit TH1::kCanRebin is set.
  Many calls to TAxis::FindBin have been replaced by calls to TAxis::FindFixBin
  in classes TH1, TAxis and THistPainter.
//
// 29/12/1999  14.20.26  by  Rene Brun
//
- Modify TCollection::Paint to use the argument option instead
  of taking the GetDrawOption for the current element in the list.

- Initialize member fAngle in the default TArrow constructor.

- In TMarker3DBox::SizeofH3 and TPolyMarker3D::SizeofH3, take into
  account the size of the DrawOutlinetoCube.

- Modify THistPainter::PaintH3 to specify the argument option
  when drawing the OutlinetoCube (for x3d).

- Add more comments in the TH1 documentation.
//
// 28/12/1999  18.50.04  by  Rene Brun
//
- New class TExec in BASE.
   TExec is a utility class that can be used to execute a CINT command.
  This class is useful to execute one or more commands when painting
  objects such as histograms or graphs.
  When a TExec object is found in the list of functions of graphs or
  histograms, its Paint function is called to execute a command.
  The command in turn can invoke a CINT macro to paint graphics objects
  at positions depending on the histogram or graph contents
  Example:
     Assume an histogram TH1F *h already filled.
     TExec *ex1 = new TExec("ex1","DoSomething()");
     TExec *ex2 = new TExec("ex2",".x macro.C");
     h->GetListOfFunctions()->Add(ex1);
     h->GetListOfFunctions()->Add(ex2);
     h->Draw();
  When the Paint function for the histogram will be called, the "DoSomething"
  function will be called (interpreted or compiled) and also the macro.C.
  Modify BASE2_LinkDef, cint_base2 and makemacros accordingly.

- Modify THistPainter::PaintFunction to save the current pad before
  painting objects in the list of functions and restore it after painting.
  With the introduction of the new class TExec, gPad may be modified.

- New functions in TH1 class
    Int_t    GetMaximumBin();
             returns the location of the bin with the maximum value.
             If histogram is 1-d, returns locmax below.
    Int_t    GetMaximumBin(Int_t &locmax, Int_t &locmay, Int_t &locmaz);
             returns the location of the bin with the maximum value.
             returns the bin numbers in x, y, z corresponding to the maximum.
    Int_t    GetMinimumBin();
             returns the location of the bin with the minimum value.
             If histogram is 1-d, returns locmix below.
    Int_t    GetMinimumBin(Int_t &locmix, Int_t &locmiy, Int_t &locmiz);
             returns the location of the bin with the minimum value.
             returns the bin numbers in x, y, z corresponding to the minimum.

- Rewrite functions TH1::GetMaximum and TH1::GetMinimum.
  The new algorithm works for 1,2 and 3-d histogram and takes into account
  the current bin range.

- Remove TH2x::Fill(Axis_t, Stat_t) from the list of private functions.
  It is now possible to fill a 2-d histogram with h->Fill(x,y)
  where the argument y may be float or double.
//
// 22/12/1999  22.11.33  by  Rene Brun
//
- One more protection added in TKey::ReadObj in case R__Unzip returns nout=0.
  In this particular case, not only one must break the loop but also
  the obj->Streamer must not be executed (thanks Valery Fine).

- Optimize algorithm in THistPainter::Init calculating the minimum on y axis
  in case of a logy scale. In case of bins with null contents, the minimum
  is set to max(1,ymax/1000) if ymax is greater than 1 and to ymax/1000
  if ymax < 1.

- In TGaxis::PaintAxis add a protection against an infinite loop
  when drawing secondary and tertiary tick marks. This could happen
  in case the axis limits contain an infinite or NaN number.

- Reimplement code for TArrayF::Set. The new logic preserves the previous
  array contents. Thanks George Heintzelman for the suggestion.
  Same modification in TArrayC::Set, TArrayS::Set, TArrayI::Set, TArrayL::Set
  and TArrayD:Set.

- Add a new data member fName in TCollection with corresponding SetName
  and GetName. As a result, all Root collections can now be named.
  Modify TCollection::Streamer, TMap::Streamer, TObjArray::Streamer
  and TClonesArray::Streamer to take into account the schema evolution.
//
//________________________________________________________________________
//
//::>          VERSION  2.23/10   17/12/99 12.31.22
//
//
// 17/12/1999  11.20.52  by  Rene Brun
//
- Modify TMapfile.h (due to one more MS oddity !!)
  Because Microsoft has many include files with statements such as
    #define GetObject  xxxxx
  one has to undo all this garbage by using a Root well know technique:
    including Windows4Root.h

- Activate button "Hist" in the TTreeViewer. One can press this button
  while the histogram is being filled by a previous "Draw" command
  to display the current histogram during the filling process.

- Implement a new option "sames" in TH1::Draw.
  When option "same" is specified, the statistic box is not drawn.
  Specify option "sames" to force painting statistics with option "same"
  When option "sames" is given, one can use the following technique
  to rename a previous "stats" box and/or change its position
  Root > TPaveStats *st = (TPaveStats*)gPad->GetPrimitive("stats")
  Root > st->SetName(newname)
  Root > st->SetX1NDC(newx1); //new x start position
  Root > st->SetX2NDC(newx2); //new x end position
  Root > newhist->Draw("sames")
//
// 16/12/1999  19.08.50  by  Rene Brun
//
- Remove data member fTimerInterval from TTreePlayer (also Get/Set).
  Add TTree::GetTimerInterval.
  Modify TTreePlayer::EntryLoop to call the fTree->GetTimerInterval.
  With this change, the timer is now operational in the TreeViewer
  and the vertical slider shows the progress in the file(s).

- Font size optimisation in TPad::InspectObject. This is the function
  called by TObject::inspect(). In many cases for large objects, the
  font size was too small.

- Add a protection in TKey::ReadObj in case one part of a file has
  been corrupted (thanks Valery Fine).

- Add new attribute fTitleStyle in TStyle (fill area style for title box)
  void  TStyle::SetTitleStyle(Int_t style=1001)
  Int_t TStyle::GetTitleStyle().
  Modify THistPainter::PaintTitle to use the new TStyle::GetTitleStyle.

- Increase buffer to print a row in the stats box from 32 to 64 characters.

- Protect TKey::Browse in case the current directory is not the
  directory referenced by the key.

- Modify TLatex::Paint to support NDC coordinates.
  One can now do:
     TLatex l(.5,.5,"text in NDC");
     l.SetNDC(); // this means that l has its coordinates set in NDC
     l.Draw();

- Document option "HIST" in TH1::Draw.

- Several changes in class TDatabasePDG (thanks Marcel Kunze).
  The static function Instance previously inline has been moved to the
  implementation file to avoid problems with DLLs on NT.
  New function TDatabasePDG::ReadPDGtable(const char *filename).
  Instead of using the default Init function one can call this function
  to read particle definition from a table.
  An example of table has been inserted in $ROOTSYS/tutorials/pdg.dat.
  The PDGcode for the Upsilon(4S) has been changed from 40553 to 300553.


- Remove TAttParticle::Hash. This functions prevented a search in
  the particle list by name.

- In TPaveText::SavePrimitive and TPaveLabel::SavePrimitive, take into account
  option "NDC" when generating the code for the constructor.
  Save the fBorderSize attribute.
//
// 16/12/1999  02.06.52  by  Fons Rademakers
//
- TRootBrowser: each browser sets now the gDirectory before
  executing an action.

- TGFileDialog, TGFSContainer: don't change anymore current working
  directory. TGFileDialog now returns a full pathname instead of
  a file name (in the new working directory).

- TProof, TProofServ, TGListBox: renamed Active() to IsActive().
//
// 14/12/1999  20.07.46  by  Fons Rademakers
//
- TObjArray: fixed bug in AddAtFree(), fLast was not correctly updated.

- TEnv: fix for handling system.rootrc.

- Exported to CINT: kWarning, kError, kSysError and kFatal.
//
// 13/12/1999  19.51.49  by  Fons Rademakers
//
- TProofServ: don't use global gProofServ anymore via interpreter
  interface, use static function TProofserv::This() instead.
//
// 13/12/1999  09.38.27  by  Rene Brun
//
- Add 3 new functions in class TRandom (suggested by Christian Lacunza).
   virtual  Double_t Exp(Double_t tau);
   virtual  UInt_t   Integer(UInt_t imax);
   virtual  Double_t Uniform(Double_t x1=1);
     where:
        Exp returns an exponential deviate  exp( -t/tau )
        Integer returns a random integer on [ 0, imax-1 ]
        Uniform returns a uniform deviate on the interval ( 0, x1 ].
   Modify return type from Float_t to Double_t for:
   virtual  Double_t Gaus(Float_t mean=0, Float_t sigma=1);
   virtual  Double_t Landau(Float_t mean=0, Float_t sigma=1);

//
// 11/12/1999  16.44.04  by  Rene Brun
//
- Add output of cint/sunstrm in script install_others.

- Modify script bind_lib_alpha_cxx. Under alpha/cxx, libCore must contain libGraf.
  The loader under alpha seems to not correctly initialize some dynamically
  linked libs. Already reported to Compaq.

- On all Unix systems, FLT_MAX is in float.h

- Modify importcint (SOLARIS and KCC case) for libstrm and sunstrm.

- Fix a problem in TPad::PaintBorder when the pad fill area=0.
  This problem was introduced in the early 2.23 when changing the inheritance
  from TWbox/TBox in TPad. With this fix, pads will a fill area=0 are
  correctly repaint during an axis zoom/unzoom.
//
// 10/12/1999  16.52.05  by  Rene Brun
//
- Small algorithm change in THistPainter::PaintBoxes.
  the minimum box size in x or y has been changed from 1 pixel to 0.5pixel.

- Modify TBranch and TTree to support any type of file including
  remote files (ROOT, HTTP, RFIO, etc).
  Invoke the static function TFile::Open instead of the TFile constructor.

- Modify TPad::UseCurrentStyle to inherit the pad color from TStyle::GetPadColor
  instead of TStyle::GetCanvasColor. (thanks Christian Lacunza for the remark).

- Add an optional paramter to TParticle::GetPDG():
   TParticlePDG *TParticle::GetPDG(Int_t mode=0)
   returns a pointer to the TParticlePDG object using the pdgcode
   if mode == 0 (default) always get a fresh value for the pointer.
   if mode != 0 this function returns directly the previously
                computed pointer from a previous call
   One can use mode=1 (faster) when the TParticle object is not part of a
   TClonesArray used in split mode in a Root TTree.
//
// 10/12/1999  15.33.32  by  Fons Rademakers
//
- TMapFile: correctly handle a growing TMapFile. The "size" argument
  in TMapFile::Create() is a specification of the minimum file size.
  Also optimize the initial TBuffer size to match the average size
  of the objects in the TMapFile (SumBuffer() and GetBestBuffer()).
//
// 09/12/1999  12.01.41  by  Fons Rademakers
//
- TObjArray, TClonesArray: recalculate fLast in Remove() and
  RemoveAt() (fix proposed by Valery Fine).

- TEnv: system version of envronment file is now called:
  system<name>, where <name> is ".rootrc": $ROOTSYS/system.rootrc.
  For backward compatibility also $ROOTSYS/.rootrc is checked if
  system.rootrc does not exist.

//
// 08/12/1999  22.12.58  by  Rene Brun
//
- Update makefiles: makelinuxkcc and makesolariscc5.

- Philippe Canal added a protection in X3D to avoid a segmentation
  violation in some cases. MakePolygonArray allocated exactly
  gSize3D.numPolys but sort use list[numPolys+1] ( sort first
  do a  while(v0 < v1) { ....; v0++ } and the next usage of v0
  is ... line 201: *v0 = *v3, so sort seems to use list[numPolys+1]
  as a temporary holding place.)
//
// 07/12/1999  18.04.57  by  Rene Brun
//
- Modify logic in THistPainter::Paint when invoking the PaintStat function.
  The previous logic assumed that all objects in the histogram list of functions
  were TF1 objects. The new code authorizes any kind of objects in this list.
  This is useful to draw objects associated to an histogram.
  (thanks Otto Schaile for the remark).

- Modify TH1::Fit to not delete the non-TF1 objects from the list of functions.
  Same for TGraph::Fit.

- Implement a new function in TTreePlayer to copy a Tree into another Tree
  by specifying a selection.
  This implies 3 new functions:
  TTree *TTreePlayer::CopyTree(const char *selection, Option_t *option="",Int_t nentries=1000000000, Int_t firstentry=0);
  TTree *TVirtualTreePlayer::CopyTree(const char *selection, Option_t *option="",Int_t nentries=1000000000, Int_t firstentry=0);
  TTree *TTree::CopyTree(const char *selection, Option_t *option="",Int_t nentries=1000000000, Int_t firstentry=0);
  The user invokes TTree::CopyTree. This function calls TTreePlayer::CopyTree
  via the abstract interface.
  See an example of use in TTreePlayer::CopyTree.

- Add an optional argument (Option_t *option="") in TTree::CloneTree.
  It is foreseen to use this option to implement the logic to copy only
  the active branches in the cloned tree.

- in TLegend constructor, do not create a TLegendEntry if the argument
  header is empty or null.

- In TPad::PaintPolymarker, add the logic to clip at the frame boundary
  or pad boundary.

- Small modification in TPad::PaintFillArea. When the new fill area
  clipping algorithm was introduced, a special case was forgotten.
  If the clipped area was just tangent at one of the pad boundaries,
  the segment was not clipped. This affected for example TPaveText objects
  occupying the entire pad (as in benchmarks.C).
//
// 01/12/1999  12.54.06  by  Fons Rademakers
//
- TVector: fixed a problem in ResizeTo(). When reducing a vector size
  by less than 7/8 of the original the memory is not actually recuperated.
  However, the real (old) memory size was not correctly saved in this
  case and wronly passed to the ReAlloc() method in case the vector
  had to be grown. This caused warning messages in CustomReAlloc2().

- Thread: protect PosixThreadInc.h for rootcint. Also removed erroneously
  <errno.h> from PosixCondition.

- TTree: two new classes TTreeResult and TTreeRow. Both classes derive
  from the abstract TSQLResult and TSQLRow. They provide access to
  results of simple TTree queries just like for SQL RDBMS queries.

- TTreePlayer: new method Query() (basically same as Scan()) but returning
  a TSQLResult object. Both Scan() and Query() are fixed and protected
  to be fully dynamic (no limit on number of columns).

- TTreeFormula: PrintValue() simplified to return non-formatted strings
  that can be used in to build a TTreeResult object. TTreePlayer::Scan()
  is doing all needed formatting.
//
// 01/12/1999  08.33.04  by  Rene Brun
//
- Add some improvements suggested by Otto Schaile in TCurlyArc
  and TCurlyLine:
  Change default values for wavelength and amplitude respectively
  to 0.02, 0.01 instead of 0.06 and 0.03.
  Save the wavelength and amplitude in TCurlyLine::SavePrimitive.
  Modify TCurlyLine.h to add enum kTooShort. When creating a TCurlyLine
  or arc too short, the bit kTooShort is set in the object.

- Protect TGaxis::Optimize in case the specified range includes NaN values.

- Add #include <errno.h> in TPosixThread.h
  change statement static void **volatile fgXArr;
  to static void ** volatile fgXArr;
  to avoid a CINT error when ruuning rootcint on TThread.h.

- Use the definition in math.h of FLT_MAX (maximum value for a float)
  instead of 1e30 in the following classes:
     TChain, TTree, TTreePlayer, TGaxis.
//
// 28/11/1999  13.53.35  by  Rene Brun
//
- Implement clipping for fill areas in TPad::PaintFillArea.

- Protect TPad::CreateNewPolyLine in case the start point and end point
  are on the same pixel.
//
// 27/11/1999  12.40.16  by  Rene Brun
//
- Modify the TGraph constructor to set the kClipFrame bit
  before returning in case the arrays x and y are not specified.
  (thanks Anton Fokin for reporting).
//________________________________________________________________________
//
//::>          VERSION  2.23/09   26/11/99 08.35.55
//
//
// 26/11/1999  08.33.14  by  Rene Brun
//
- Modify TTreePlayer::TakeEstimate and TPolyMarker3D::PaintH3
  to draw the axis for a 3-d scatter plot.
//
// 25/11/1999  19.13.44  by  Fons Rademakers
//
- Added set of SQL abstract base classes:
  TSQLServer, TSQLResult and TSQLRow.
  These abstract base classes provide an interface to typical SQL
  DBMS systems, like MySQL, Oracle, SysBase, Informix,etc.
  A concrete implementation for MySQL is available (separate tar
  file ftp://pcroot.cern.ch/root/MySQL.tar.gz). For more
  information see http://root.cern.ch/root/html/TSQLServer.html.
  Via the TSQLServer et al. classes it is trivial to access SQL
  DBMS via the interpreter and scripts.
//
// 25/11/1999  19.00.19  by  Rene Brun
//
- Modify THistPainter::PaintBox to draw a box with a size always greater
  than one pixel.

- In THistPainter activate option "Z". When option "Z" is specified
  together with one drawing option like "CONT", "COL", a Z scale palette
  is drawn on the right side of the pad.

- Add a new function TH1::GetPainter returning a pointer to the painter
  for a given histogram. Note that each histogram object has its own painter.

- In the new TTree::Delete, add code to delete all keys with the same
  name as the key being deleted. This is necessary because keys
  corresponding to previous TTree::AutoSave cannot reference the deleted baskets.

- Modify TClonesArray::ExpandCreate to uncomment a piece of code
  previously deactivated. Thanks Fred Gray for fixing this problem.
  A new function TClonesArray::ExpandCreateFast is now called by
  TBranchClones::GetEntry instead of TClonesArray::ExpandCreate.
//
// 24/11/1999  18.59.00  by  Rene Brun
//
- Reimplement TTree::SetBranchStatus such that
      tree->SetBranchStatus(branchname,0)
  TTree::UpdateActiveBranches deleted.
  All TBranch::GetEntry functions have an additional parameter Int_t getall.

- Take into account overflow bins in the following functions:
    TH1::ProfileX
    TH1::ProfileY
    TH1::ProjectionX
    TH1::ProjectionY
    TH1::ProjectionZ
  This solves a problem reported by Rutger van derEijk.

- Rename the following functions in the ZIP package to avoid naming clashes
  with applications using the original ZIP functions.
   void     R__bi_init    OF((FILE *zipfile));
   void     R__send_bits  OF((int value, int length));
   unsigned R__bi_reverse OF((unsigned value, int length));
   void     R__bi_windup  OF((void));
   void     R__copy_block OF((char far *buf, unsigned len, int header));
   int      R__seekable   OF((void));
   extern   int (*R__read_buf) OF((char *buf, unsigned size));
   ulg      R__memcompress OF((char *tgt, ulg tgtsize, char *src, ulg srcsize));
   void     R__error      OF((char *h));

- In the TGenerator constructor check if the TDatabasePDG tables are already
  created. If yes, skip this step.

- Add new option "M" (More) in TH1::Fit and struct Foption.
  When this fit option is selected the TMinuit IMPROVE mechanism is called.

- New possibility in the TTree::Branch with a TObject*.
     New option "splitlevel=2".
     if splitlevel=1 (default), this branch will automatically be split
      into subbranches, with one subbranch for each data member or object
      of the object itself. In case the object member is a TClonesArray,
      the mechanism described in case C is applied to this array.
     if splitlevel=2 ,this branch will automatically be split
       into subbranches, with one subbranch for each data member or object
       of the object itself. In case the object member is a TClonesArray,
       it is processed as a TObject*, only one branch.

//
// 23/11/1999  15.19.15  by  Fons Rademakers
//
- TROOT: fix in ProcessLine() to save the original line which may come
  from the From() buffer and which may be overwritten during the
  TApplication::CreateApplication() execution.

- TCanvas: protect From() buffer in MakeDefCanvas().
//
// 22/11/1999  12.29.04  by  Rene Brun
//
- Merge with latest Fons version.

- Protect TButton::ExecuteEvent in case the action executed by the TButton
  deletes the button itself.

- In THistPainter::PaintStat2, take into account the lowest and highest bins
  to draw the integral of bin contents.

- In TH1::Integral do not call TH1::GetStats. Instead call the TH1::Integral
  functions for 1-d, 2-d, 3-d histogram respectively.
  TH1::Integral() now returns the sum of weights instead of the sum
  of the absolute value of values returned by TH1::GetStats.

//
// 21/11/1999  19.44.19  by  Fons Rademakers
//
- rootcint: fix for handling of "#pragma link C++ defined_in".

- Several classes: declare enums for special bits in the header
  file instead of hidden away in the source. User's deriving need
  this info.

//
// 20/11/1999  17.35.14  by  Rene Brun
//
- clean up class TAxis. Remove the following unused functions:
  Draw, DrawAxis, ls, Paint, Print, PaintAxis, Print.

- clean up class TLeaf, TLeafObject. Remove TLeaf::Print, TLeafObject::Print.

- clean up class TText, TLine. Remove TText::Draw, TLine::Draw.

- Several fixes in class TButton. Side-effects of the previous changes
  related to SetEditable have been corrected.

- New functions in the graphics editor. 4 new options have been added:
   - Line: to draw a single line segment
   - Marker: to drawn one marker
   - CurlyLine to draw a TCurlyLine
   - CurlyArc to draw a TCurlyArc.
   The following classes and functions have been modified accordingly;
    - TROOT::SetEditorMode
    - TPad::CreateNewArrow has been changed to TPad::CreateNewLine
    - TPad::CreateNewText
    - TCanvas::EditorBar

- Update the HelpText deck to document the new graphics editor options.

- Adapt two new classes TCurlyArc and TCurlyLine originaly developed by
  Otto.Schaile@Physik.Uni-Muenchen.DE
  These classes can be used to draw Feynman diagrams.
  See new example in tutorials/feynman.
  TCurlyArc derives from TCurlyLine and TCurlyLine derives from TPolyLine.
  Like TPolyLine and TArcs, these objects can be edited interactively
  with the mouse.
  (thanks to Otto for this nice contribution).

- Add a few corrections from Valery Fine in TView, TWin32Canvas.
//
// 19/11/1999  13.31.52  by  Fons Rademakers
//
- Introduced the GetErrno() and ResetErrno() also in rootd, rootx
  and thread code.

- Fixes to the configure and Makefile's.
//
// 19/11/1999  09.16.45  by  Rene Brun
//
- Include Philippe Canal changes in $G__ci, kccstrm and meta/Cint.

- Merge with Valery Fine version. Valery added the menus Inspect and Classes
  in the NT canvas menu bar.

- Introduce new version (non-truncated) of kccstrm for KCC (thanks Philippe).

- In the TStyle destructor, set gStyle to the last defined TStyle
  in case the TStyle being destroyed is the current style.
  (thanks Peter Filip for the suggestion).
//
// 18/11/1999  17.49.38  by  Rene Brun
//
- Generate new dictionaries G__Winnt and G__Win32.

- Add new examples in tutorials:
   - manyaxis: to draw many TGaxis of different styles
   - two:      to draw two histograms in the same pad and different scales

- Modify comments in TGaxis and generate a new gaxis.gif file.

- Modify TTree::GetMaximum and TTree::GetMinimum to have their arguments
  of type const char* instead of char*.

- several changes to compile under Solaris new CC5 compiler.
  - All references to errno (from errno.h) have been replaced by
    TSystem::GetErrno() or TSystem::ResetErrno().
    The machine dependencies of errno are in these two functions only.
  - With this new compiler the C string library is backward incompatible.
    For example strchr and strstr returns a const char* instead of char*
    In a few places where we had
       char *s = strstr(...)
    we force a cast to char*
       char *s = (char*)strstr(...)
   *** Many thanks to Dave Morrison for help in this conversion process***.

//
// 17/11/1999  12.45.19  by  Rene Brun
//
- Add a new function TBranch::ResetReadEntry. This function can be called
  when reading branches of a Tree to force an update of the branch data
  in case of two consecutive calls to TBranch::GetEntry for the same entry
  and in the case where the branch data in memory has been modified between
  the two calls.

- In the TCanvas destructor, move the statement to delete the contextmenu
  before the test on gPad. This prevents a possible memory leak in case
  on calls TCanvas::Close bedore deleting a TCanvas.
  (Thanks to Kristjan Gulbrandsen for notifying the problem).

- In TPad::PaintModified replace iterator on list of primitives
  by an explicit loop on TObjOptLink objects instead.
  This solves a problem reported by Selim Issever when an object being painted
  deletes another object in the pad list.

- Modify::THistPainter::PaintLego and THistPainter::PaintSurface to
  paint with the original histogram line color.

- Fix a problem In TGraph::Fit, TGraph::InitGaus, TGraph::InitPolynom
  and TGraph::InitExpo when fitting in a sub-range of a graph.
  The parameters xfirst/xlast were not correctly set and used.
  (thanks Frank Lavaud for reporting this problem).
//
// 16/11/1999  18.02.10  by  Rene Brun
//
- TLatex::GetXsize and TLatex::GetYsize are now operational.
  These two functions return the size along X/Y of the Tlatex object
  in pad user coordinates.

- Recode TPaveText::PaintPrimitives to take advantage of the new TLatex
  function GetXsize.

- Fix a problem in TPad::SavePrimitive. In case of a pad hierarchy with
  more than 2 levels, the macro generated was not correctly setting
  the current pad.

- Fix a problem in TPolyMarker3D::Paint preventing to view a TPolyMarker3D
  with X3D or OpenGL.

- Add a protection in TPadOpenGLView in case gGeometry = 0.

- In THistPainter::PaintH3 add call to PaintTitle.

- Remove the limitation to 255 colors in TPostScript::SetColor.

- Comment one line in CINT function libstrm for operator !
  This was a fatal compilation error on alpha/cxx.

- Adds proposed mods by Masa in CINT function parse.c.
  This solves a problem reported by Rutger van derEijk.
//
// 15/11/1999  15.41.51  by  Rene Brun
//
- New functionality in class TLatex (by Marthe Brun)
   You can produce 3 kinds of proportional delimiters.
   #[]{....} or "a la" Latex #left[.....#right] : big square brackets
   #{}{....} or              #left{.....#right} : big curly brackets
   #||{....} or              #left|.....#right| : big absolute value symbol
   New example latex3.C added to tutorials.

- Small rewrite (thanks Valery Fine) to TShape::ShapeDistancetoPrimitive
  to make the code more efficient.

- in TTree::CloneTree, do not set the compression level for the new Tree
  to the new file compression level. Keep the old branch compression level
  instead. The previous algorithm made the test program stress much slower
  because all the branches were compressed in the cloned Tree.
  (thanks Sergei Avvakumov for noticing the effect).

- Several enhancements to the branch/basket/tree logic.
  TBranch::GetBasket has been rewritten to take advantage of the new
  functions in TBasket.
  TBranch has a new data member fBasketBytes (an array of Int_t) keeping
  the number of bytes on the file for each branch basket. In order to read
  existing TTrees, a special function TBasket::ReadBasketBytes has been
  implemented to read the first bytes of a logical record and return
  the number of bytes in the logical record.

- Correct a problem in TBranch::DropBaskets (thanks Stefan Kluth).
  The algorithm managing the short list of baskets in memory was wrong
  in some cases.

- New functions in TBasket;
  TBasket::ReadBasketBytes to return the length of a basket.
  TBasket::ReadBasketBuffers, a rewrite of the old function. The new version
  has a more efficient TBuffer management minimizing the number of buffer
  copies.

- New function TBuffer::SetBuffer. This new function is used by
  TBasket::ReadBasketBuffers in case of compressed buffers.

- Correct a typo in TGraph.h (removed a comma in the enum list).

//
// 12/11/1999  16.12.57  by  Fons Rademakers
//
- Introduced new configure script and Makefiles by Christian Holm.
  The new build system makes it possible to build ROOT in a fixed
  location not depending on ROOTSYS. Typically you want to do this
  when installing in a location like `/usr/local/bin' or even
  `/usr/bin'. This allows you, and all others on your system, to run
  ROOT without having to setup ROOTSYS and special PATH and LD_LIBRARY_PATH
  variables. This scheme also makes it easier to make ROOT
  distributions/installations that fit with an existing system. E.g., it
  should be trivial to install ROOT via a RedHat (.rpm) or Debian (.dep)
  package. See AA_INSTALL for more.

- In all source files where $ROOTSYS was used/referenced we now
  include the header `config.h' which is generated by `configure'.
  When compiling with the flag -DHAVE_CONFIG the absolute paths
  provided by this include will be used. The option will be enabled
  automatically in the Makefile generated by `configure <archs> --prefix'.

- THashTable: Rehash() call Clear() with the option "nodelete". During
  rehashing we don't want to delete any objects (the ones with the
  kCanDelete bit were deleted).
//
// 11/11/1999  23.16.26  by  Rene Brun
//
- Increase maximum file name length from 300 to 1000 characters
  in TFile::Init (requested by BaBar).

- Implememt support in TString::Streamer for strings greater
  than 256 characters. This change is backward compatible.

- Several changes in class TLegend and TLegendEntry.
  New function TLegend(const char *name, const char *label, const char *option).
  In TLegendEntry the members fLabel and fOption previously char *
  have been changed to TString. As a result TLegendEntry is now correct.
  A TLegend object can be saved in a Root file or on a macro.

- Add new class TMessageHandler.
  This class handle messages that might be generated by the system.
  By default a handler only keeps track of the different messages
  generated for a specific class. By deriving from this class and
  overriding Notify() one can implement custom message handling.
  In Notify() one has access to the message id and the object
  generating the message. One can install more than one message
  handler per class. A message handler can be removed or again
  added when needed.
  a default Messagehandler is created by the TROOT constructor.
  The existing functions TObject::Warning and TObject::Error register
  the messages to the messahe handler.
  One can print the Message Hanler(s) status by calling
    gROOT->GetListOfMessagehandlers()->Print().
  To keep track of the individual messages for each class, one change
  has been necessary in the TClass constructor. The UniqueID of the
  TClass object is set to the serial number (starting at 1) of
  the TClass constructor.

- Introduce Philippe Canal changes in
  CINT:  ifunc, loadfile
  TCint.h and TInterpreter.h

//
// 10/11/1999  19.13.47  by  Rene Brun
//
- Modify TLatex::PaintLatex to invoke TAttText::Modify.
  This fixes a problem when drawing TPaveText objects when text
  is not automatically positionned in the TPaveText (eg via DrawClass).

- Modify The TLatex constructors to set the default line width to 2.
  Modify TLatex::DrawLine to use the LineWidth from TAttLine instead
  of computing it.

- Modify class TAxis to support pointer to parent.
  in TAxis::ExecuteEvent, use the fParent info instead of looping in
  the list of pad primitives to find the first TH1 object.

- Modify TH1::Build to set the TAxis parent to this.
  Add new option "AXIS" in the list of possible drawing options.
  When this option is used, only histogram axis are drawn. Using this option
  is a better solution than using TPad::RedrawAxis.
  In case multiple histograms are drawn in the same pad and some fill area
  hides the axis, one can call h1->Draw("sameaxis") to redraw only
  the axis on top of the picture, where h1 is the first histogram drawn
  in the pad (and setting the scale).

- Modify THistPainter::Paint and THistPainter::PaintAxis to support
  the new histogram drawing option "AXIS"

- TPad::RedrawAxis rewritten to take advantage of the new option "AXIS"
  described above in TH1::Draw.

- Minor modification in a print format in class TMutex.

//
// 09/11/1999  17.36.05  by  Rene Brun
//
- Add drawing of axis in the TH3x Paint functions.
  A 3-d box outline is also drawn like in the case of lego/surf plots.
  THistPainter::PaintH3 modified accordingly.

- In TObject::Clone set internally gFile=0 before calling obj->Streamer.
  gFile is reset to its original value when returning.

- Protect TPaveStats::Streamer, TMarker3DBox::Streamer and TShape::Streamer
  for the case when gFile=0.

- Implement TH3x::DrawCopy functions. TH3F::DrawCopy is used by
  the new functionality of TTreePlayer::TakeAction and TakeEstimate.

- New functionality supported by TTreePlayer. one can now do:
    tree->Draw("x:y:z>>h3")
  where h3 is a 3-d histogram. Like for the 1-D and 2-D case, if
  h3 is non-existing before the call, it is created internally.
  If h3 exists, it is reset (unless +h3 is specified).
  Functions modified are:
    TTreePlayer::DrawSelect, TTreePlayer::TakeAction ,TTreePlayer::TakeEstimate.

- class TView inherits also from TAttLine. The view line attributes
  are used when drawing the "OutlineToCube" when rotating a 3-D view.

- TPolyLine3D::DrawOutlineToCube modified to read the TView line attributes.

- Add new function TPostScript::SetLineScale(Float_t scale).
  This function can be used to select the default line width scale factor.
  The default is set to 3.

- Add new functions in TStyle;
   -SetLineScalePS(Float_t scale=3)
   -GetLineScalePS();
   The LineScalePS is used by TPostScript constructor to set the current
   line width scale factor.

- Make all TPad::Createxxx functions public instead of protected.
  On NT, these functions are called via the interpreter.
//
// 08/11/1999  16.55.38  by  Rene Brun
//
- Modify clipping logic in TPad::Clip
   use Cohen Sutherland algorithm.
   If Clip ==2 the segment is outside the boundary.
   If Clip ==1 the segment has one point outside the boundary.
   If Clip ==0 the segment is inside the boundary.

- Modify TPad::PaintLine and TPad::PaintPolyLine to use new Clip logic.

- Add clipping to the frame boundary to TGraphErrors and TGraphAsymErrors.

//
// 07/11/1999  10.29.35  by  Rene Brun
//
- Add several protections (thanks Robert Rowe) in the logic of TTreeViewer.
  A segmentation violation was generated in some cases when drawing the histogram.
  Subsequent attempts to draw anything results in the  histogram being drawn
  and a segmentation violation.
  Additionally if the window containing the histogram is closed any attempts at
  drawing result only in a segmentation violation without anything displayed.
  The Draw method in the TTreeViewer attempts to write the
  Tree->Draw(....) command to the CINT history file, which it gets from gEnv by
  looking for "Rint.History". If not set in .rootrc this attempt returns "".
  Naturally the file open command doesn't succeed and the thing bombs at the
  write operation.
  The TRint constructor has been protected in this case.

- In TPad::Close add the statement:
  if (gROOT->GetSelectedPad()== this) gROOT->SetSelectedPad(0);
  in order to remove the pad from being returned as the selected pad after
  it has gone. (fix also proposed by Robert Rowe)
//
// 06/11/1999  19.26.07  by  Rene Brun
//
- Important improvement in TF1::GetRandom. Instead of doing a linear
  interpolation in the bins of the function integral, the integral
  is now parametrized with a parabola for each bin. The parabola
  coefficients are stored as data members of the class.
  This change improves substantially the quality of the random numbers
  in case the number of bins is small (less than 20).
  With the new technique, 50 bins are in general enough.
  The default (100 bins) should always give good results.

- Modify TCanvas::SetBatch. Remove the test in case fCanvasImp==0.
  It was not possible to SetBatch(kFALSE) in the following situation:
  Read a TCanvas from a file (no graphics yet)
  canvas->Print(); //this sets internally batch mode and attempts to reset
                     to kTRUE when Print has completed.
  canvas->Draw(); // no graphics in canvas
  (thanks to Frank Hartmann for reporting this problem).
//
// 05/11/1999  11.41.49  by  Rene Brun
//
- function TFile::ReadFree. Fix a problem that could occur in some cases
  when reading the list of free blocks. stop reading when one block with
  upper limit greater than fEND.

- class TCTUB. New constructor and graphics support for this shape
  implemented by Valery Fine.
//
// 04/11/1999  11.26.52  by  Fons Rademakers
//
- TDatime: added more convenint time setting ctor's, assignment operator,
  comparison operators.
//
// 04/11/1999  08.03.36  by  Rene Brun
//
- Correct a typo in TH1::ProjectionZ.
  if (iymax > nx) iymax = ny; ==> if (iymax > ny) iymax = ny;
  Thanks to Urs Langenegger for reporting
//
// 03/11/1999  18.57.10  by  Philippe Canal
//
- Protection added in TLeaf::Browse.
  If you double click in the TBrowser, on a leaf of an empty
  Tree, you get a core dump. This poped-up when a user used TBranch::Fill
  instead of TTree::Fill.

- Changes in TTreePlayer::MakeClass and TTreePlayer::MakeCode.
  MakeClass and MakeCode produced invalid code when a branch
  contains mode than one leaf.  Namely, it defines all the variable
  corresponding to the leaf of a branch with the exact same name.
  With the fix, when a branch has more than one leaf it create
  the variable name as 'branchname_leafname'
//
// 03/11/1999  16.58.34  by  Rene Brun
//
- Implement new function TTree::Delete(Option_t *option).
  to delete a Tree from memory or/and disk.
  if option == "all" delete Tree object from memory AND from disk
                     all baskets on disk are deleted.
  if option =="" only Tree object in memory is deleted.

- Implement new function TFile::GetRecordHeader (see description).
  This new function is called by TTree::Delete and will be called
  by existing TTree functions or planned new functions.

- Increase Postscript line size from 120 to 250.
  This solves a problem when printing the application title that must fit
  on one single line.
//
// 02/11/1999  15.27.59  by  Fons Rademakers
//
- rootcint: fix which allows again the LinkDef.h file to be in a directory
  specified via an -I argument (functionaly was broken since 2.23/07).
//
//________________________________________________________________________
//
//::>          VERSION  2.23/08   02/11/99 09.36.56
//
//
// 02/11/1999  09.17.47  by  Rene Brun
//
- Correct kumac file for installation on SGI with CC.
  The CILIBS symbol was not set in case of SGI64.

- Add +IF,KCC in deck CINT/kccstrm

- Modify kumac install_others to export CINT_kccstrm
//
// 01/11/1999  18.28.43  by  Masaharu Goto
//
- New CINT 5.14.21 22 Oct 1999
  1208, class A { public: operator const char*(); }; cin>>a; bug fix, risk2
  1209, class A { public: void f() const; private: void f();}; bug fix, risk4
  1210, G__ignoreinclude, G__set_ignoreinclude added, risk1
 -1211, opr overloading, search order changed, not std compliant still,
  1212, vector<A*> v; v[0]->f(); bug fix, risk3
  -   , G__splitfilename((char*)NULL) bug fix, risk0
  1213, base to derived conversion disabled at initialization, risk4
  1214, if(1!=libp->paran) ; in dictionary, eliminated, risk1
  1215, func( f();  error detection, risk4
  1216, A* volatile a; supported, risk1
  1217, Unnamed macro error detection for G__loadfile(), risk1
  1218, Fons's change,  risk1
  1219, func arg conversion from/to p2f disabled, risk3
//
// 01/11/1999  17.32.01  by  Rene Brun
//
- Modify TTree::AutoSave. The new version saves the current Tree header
  then deletes the previous header (if one). The Print statement
  in the function has also been removed.
  Note that calling TTree::AutoSave too frequently (or similarly calling
  TTree::SetAutoSave with a small value) is an expensive operation.
  You should make tests for your own application to find a compromize
  between speed and the quantity of information you may loose in case of
  a job crash.
//
// 01/11/1999  16.58.54  by  Fons Rademakers
//
- rootcint: added extra checks in case files don't exist.

- DataMbr: correctly update G__ClassInfo::class_property (side effect
  of perofmance enhancement in G__ClassInfo::Property()).

- TList: members AddBefore(), AddAfter() and AddAt() call now explicitely
  the TList methods AddFirst() and Addlast() and not any possibly
  overridden methods.
//
// 01/11/1999  17.07.46  by  Rene Brun
//
- IMPORTANT CHANGE IN POSTSCRIPT OUTPUT
  =====================================
  The line width is now multiplied by 4 instead of the original 1.5.
  This makes Postcript outputs looking more comparable to the screen.

- Implement a more efficient version of TPad::PaintPolyline.
  Instead of calling TPad::PaintLine for each segment, the new function
  implements the clipping logic of TPad::PaintLine directly in the loop.
  This generates a huge gain for Postscript files in case of histograms
  or functions with a large number of bins.
//
// 31/10/1999  14.13.40  by  Rene Brun
//
- New function void TBranchObject::SetAutoDelete(Bool_t autodel)
  This new function can be used to instruct Root to not delete the object
  referenced by a branchobject before reading a new entry.
  By default, the object is deleted.
  If autodel is kTRUE, this existing object will be deleted, a new object
    created by the default constructor, then object->Streamer called.
  If autodel is kFALSE, the existing object is not deleted. Root assumes
    that the user is taking care of deleting any internal object or array.
    This can be done in Streamer itself.
  If this branch has sub-branches, the function sets autodel for these
  branches as well.
  We STRONGLY suggest to activate this option by default when you create
  the top level branch. This will make the read phase more efficient
  because it minimizes the numbers of new/delete operations.
  Once this option has been set and the Tree is written to a file, it is
  not necessary to specify the option again when reading, unless you
  want to set the opposite mode.
  We also STRONGLY suggest to revisit your Streamer functions
  such that in the read part all previously dynamically allocated
  objects are correctly cleaned, resized or deleted.
  Thanks to Stefan Kluth (BaBar) for making this nice suggestion.

- Modify TLeafObject::ReadBasket to take into account the new
  AutoDelete option.

- Modify $ROOTSYS/test/MainEvent to call TBranchObject::SetAutoDelete(kFALSE)
  to take advantage of the new facility above.
  Modify Event accordingly. Event::Streamer is now part of the Event.cxx
  file instead of being generated automatically by rootcint.
  The new Streamer function takes care of cleaning up the Event
  structure correctly before importing a new entry.

- Modify TH1::Streamer (read part) to make sure that the function can be
  called for an existing and non-empty histogram. This is now used
  for example by the new test/Event program as explained above.

- Changes in TH1::Print. The new version prints more detailed information like
  the bin number and the center of the bin coordinate for 1-D, 2-D and 3-D histograms.
  (suggestion from Christian Lacunza).

- Modify TGaxis::PaintAxis. When drawing the scale factor (x10)
  the new logic uses a TLatex expression x10^{n}.
  With TLatex, the exponent is placed at a better position
  than with the previous algorithm.

- Modify TAxis::ExecuteEvent and TAxis::UnZoom to support zoomimg/unzooming
  of the Y axis of a 1-d histogram. Zooming the Y axis, invokes TH1::SetMinimum
  and TH1::SetMaximum.
//
// 30/10/1999  09.29.57  by  Rene Brun
//
- Introduce the changes in the CINT function CallFunc proposed by Philippe.
  The problem was due to a side effect of the 1167 modifications
  (enhancement for reference resolutions). For reference arguments,
  the actual type of the argument is now being used
  (unlike the G__CallFunc::SetArgArray comment suggest).
  This fixes a problem when running the tutorial Ifit.C
//
// 29/10/1999  10.30.36  by  Rene Brun
//
- Modify TRint constructor for WIN32.
  cannot process the statement: ProcessLine("#include <iostream>");

- In class TGenerator, remove include TCanvas.

- In TTree::CloneTree add possibility to set the compression level
  in the cloned Tree to the compression level of the new file.

//________________________________________________________________________
//
//::>          VERSION  2.23/07   27/10/99 18.00.59
//
//
// 27/10/1999  14.58.12  by  Rene Brun
//
- Added some statements in GX11GUI to execute Root with Threads.
  (thanks Marc Hemberger).

- Some changes in the TCanvas constructors:
  replace gROOT->FindObject(name) by
  gROOT->GetListOfCanvases()->FindObject(name)

- Regenerate the G__Thread dictionary.

- Update Makefiledeb2 to include CRYTLIBS.
//
// 27/10/1999  12.22.51  by  Fons Rademakers
//
- All containers: Remove(TObject*) returns a pointer to the actual
  object removed. This pointer can be different from the one passed as
  arguments to Remove() depending on what IsEqual() decides. The
  new functionality allows more specific checks on what Remove() is
  doing (only for expert usage).

- rootcint: Changes for template handling by Stefan Kluth.
//
// 26/10/1999  17.48.25  by  Rene Brun
//
- TREES: I/O improvements
  =======================
  Thanks to a nice Tree provided by the H1 collaboration (Thanks Ursula Berthon)
  an important gain in performance when reading Trees has been obtained.
  The following changes have been made:
   - In class TBuffer, modify the constant kMapSize from 67 to 503.
     This minimizes the number of TExmap extensions. (20% improvement)
   - Discover that a lot of time was spent in invoking the class constructor
     via the interpreter. A new version of G__ClassInfo::New has been
     consequently implemented by Fons. (20% improvement)
   - Some per cent gained in recoding (Fons) TClass::GetBaseClass.
     This function is called in TBuffer::ReadClass when calling InheritsFrom.
   - TObjArray::Streamer has been recoded (20% improvement).
     The previous version was calling TObjArray::AddAtAndExpand in the loop
     of objects. The new version extends the array only once.
   - TBranch::DropBaskets has been recoded/extended. Instead of looping
     on the TObjArray of baskets (several thousand baskets/branch in the H1
     example), a new table of active baskets in memory has been introduced.
     typically only one or two baskets are in memory/per branch. It is more
     economical to loop on the short list (5% improvement).
   - TExmap::FindElement. more efficient coding
   - TExmap::GetValue: replace call to FindElement by inline code.
     These two functions are called extremely frequently in case, for example,
     a branch contains a TObjArray of objects. (3% improvement).
   - Put the code from TBasket::GetEntryPointer inline in TBranch::GetEntry.
   - TBranchClones::GetEntry is now calling TBranch::GetEntryClones.
     In turn, GetEntryClones has some improved logic with respect to
     TBranch::GetEntry in case of branches of a TClonesArray.
     A new function Tleaf::ReadBasketExport has been introduced (also
     in all TLeaf derived classes). This new function combines the two
     functions TLeaf::ReadBasket and TLeaf::Export.
 The gains quoted above are specific to the H1 tree (30 branches TClonesArray
 and 3 branches TObjArray).
 PLEASE REPORT TO US THE PERFORMANCE IMPROVEMENT OBSERVED IN YOUR CASE.
 (together with the result of tree->Print()).

//
// 25/10/1999  19.02.40  by  Philippe Canal
//
- Base_System modified to allow for debugging the script compiler without
  recompiling (by setting gDebug to greater than 3).
  Make-macros modified to allow the compilation of kccstrm (when it be added
  to cint!).
  In Makefile.*kcc, add the definition of symbols __KCC to the
  cint C file compilation (needed because CINT_init.c has a
  ifdef __KCC but it NOT compiled with KCC).
//
// 25/10/1999  18.45.21  by  Fons Rademakers
//
- Class (of CINT): optimization in New() and Property().

- TClass: optimized GetBaseClass().

- TCint: CreatListOfTypes() renamed UpdateListOfTypes() to reflect
  new functionality. It now behaves like UpdateListOfGlobals(). Types
  might be added when a new shared lib is loaded, so the list has to
  be updated in that case.

- TDataType: store copy of type name, otherwise list search does not
  work (CINT reuses the buffer in which it stores the typename).

- TROOT: allow updating of list of types via "load" flag in
  GetType() and GetListOfTypes().
//
// 25/10/1999  16.08.34  by  Rene Brun
//
- Correct a problem in TBranch::SetFile(TFile *file) (thanks Ursula Berthon).
  In case a pointer to a file is specified, the filename was
  taken from file->GetTitle() instead of file->GetName().
//
// 24/10/1999  19.48.02  by  Rene Brun
//
- Class TBranch::GetBasket. Add a protection to make sure to not read
  beyond the end of file.

- Class TTree::UpdateActiveBranches. Wildcarding was not correctly
  introduced. One must diable branches with daughters (TBranchObject
  and TBranchClones) from the list of active branches.

- Class TShape. Streamer now in implementation file.
  Schema Evolution had been forgotten when adding the inheritance
  from TAtt3D. In the new Streamer, test file version number
  to be able to read the pre 2.23/04 files.
  (Thanks Valery Fine nor notifying the problem).

- Class TMarker3DBox. Changes in Streamer like for TShape above.

- Class TH3. Changes in Streamer like for TShape above.

- Modify the dictionary generation files G3D_Linkdef and H_Linkdef
  to not generate Streamer for TShape, TMarker3DBox and TH3.

- Class TAxis. Change prototype of function ChooseTimeFormat.
         const char  *ChooseTimeFormat(Float_t axislength=0);
  New logic (Damir Buskulic) in case of the new facility to display
  the axis values in Date/Time format.

- Class TGraph. Add SetTitle to the context menu.
  Implement TGraph::SetTitle. In case fHistogram exists, the title
  of the current histogram used to view the graph is modified.
  (thanks Glen Salo).

- Class TLatex. New improvements for a better alignment.
  Change logic in case of complex formula with fractions of fractions.

- Class TBuffer. Modify the default parameter kMapSize from 67 to 503.
  This speeds up substantially the read I/O.

- Class TPadOpenGLView. In function TPadOpenGLView::ExecuteEvent
  replace the test:
      if (!gPad->IsEditable()) return;
   by
      if (!GetPad()->IsEditable()) return;
   (The old test was freezing the GL viewer in case the current pad
   was not the pad being viewed.
   (thanks Stefano Bettelli for reporting).

- Class THistPainter::PaintErrors. The last bin was not drawn.
  (thanks Stefan Stonjek for reporting).
//
// 24/10/1999  17.43.15  by  Fons Rademakers
//
- New CINT 5.14.20 imported.

- CINT: fixes to get re-initialization of permanent (system) shared
  libs to work correctly. There were several issues:
  - Init functions for rootcint generated dictionaries have special
    names. This init function pointer can be found in G__call_setup_funcs().
    I've added code in G__call_setup_funcs() to save them in G__initpermanentsl.
  - More tricky. Re-initialization of a shared lib causes the tagnum to
    be changed. However, tagnum is stored (via G__ClassInfo object)
    in the associated TClass, so during re-initialization CINT has to call
    back to ROOT to tell the associated TClass object to update the tagnum
    in its G__ClassInfo object. To do this ROOT has to register with CINT
    a function that CINT will call during re-initialization. For this I've
    introduced in CINT the function: G__InitUpdateClassInfo(). This function
    is called in the TCint ctor where the static function
    TCint::UpdateClassInfo() is registered. CINT calls this function via
    G__get_linked_tagnum().

- TWinNTSystem, TUnixSystem: streamlined the handling of method Load().
  In both classes we call now the base class TSystem::Load(). Added third
  Bool_t parameter to Load(). If this parameter is true the library to be
  loaded is a permanent systen library that should not be unloaded during the
  course of the session.

- TROOT: LoadClass() calls gSystem->Load() with third parameter true.

- TLatex: NkWord1 was one too many (27 instead of 26). Caused endless
  loop when running without libNew.

- Tutorial graph.C: make array index variable const.
//
// 22/10/1999  17.51.36  by  Fons Rademakers
//
- Makefile for Solaris CC 5.0 by Dave Morrison. Updates in ./configure
  and top Makefile.
//
// 21/10/1999  18.36.42  by  Fons Rademakers
//
- TGTextEntry: check if object has not been deleted after <return>.
//
// 21/10/1999  10.55.31  by  Rene Brun
//
//________________________________________________________________________
//
//::>          VERSION  2.23/06   21/10/99 08.44.00
//
- A few fixes reported by Philippe following the build on a few systems.
        #ifdef on KCC not needed anymore
        assert on OSF1 has to be an int (or a boolean)
        INADDR_NONE not declare in /usr/include/netinet/in.h on SOLARIS
                (at least the on I have)
        64 bits pointer protections. (OSF1)

- wrong #idef, #elif directive in UnixSystem for HP-UX corrected.
//________________________________________________________________________
//
//::>          VERSION  2.23/05   20/10/99 19.01.08
//
//
// 20/10/1999  18.01.31  by  Rene Brun
//
- The following libs are temporarily loaded by the TRint constructor
  due to a problem with CINT unloading these libs when named macros
  are executed several times.
  HistPainter, TreePlayer, TreeViewer.

- Simple modification proposed by Philippe Canal in TCanvas constructor
  to prevent a core dump if the name of something else than a canvas
  is given to a new canvas.
//
// 20/10/1999  17.30.39  by  Fons Rademakers
//
- TInetAddress: made default ctor public so pointers to TInetAddress
  objects can be streamed.

- TTabCom: merged fixes by Christian Lacunza.

- TUnixSystem, TWinNTSystem: fix in GetHostByName() in case hostname
  is not found.
//
// 20/10/1999  16.31.29  by  Rene Brun
//
- New directory PYTHIA6 and new class TPythia6.
  The class TPythia6 was initially developped by Pasha Murat.
  This class is an interface with Pythia version 6.1.
  The previous interface with Pythia 5 is kept with the original name TPythia.
  To use this new class, one must load the new libPythia6.so instead
  of libPythia.so.
  TPythia6 requires Pythia 6.1 + 2 tiny Fortran files and a tiny C file.
  These 3 files, including Pythia6.1 can be found at:
          ftp://root.cern.ch/root/pythia6.tar.gz
  The similar files for Pythia version 5 can be found at:
          ftp://root.cern.ch/root/pythia5.tar.gz
  To be consistent between Pythia 5 and 6, some changes have been made
  in the old class TPythia. The original functions
  TPythia::PyStat, PyTest, PyEvnt, LuList, LuExec, LuComp, PyInit
  have been renamed respectively to:
  TPythia::Pystat, Pytest, Pyevnt, Lulist, Luexec, Lucomp, Pyinit

- MakeMacros modified to introduce TPythia6 and the corresponding set
  of symbols.

- New version of the ATLFAST++ package.
  This new version supports both Pythia version 5 or 6.
  Several internal changes were necessary to run ATLFAST++ with this latest
  version of Root.
  The default when compiling is still with the old Pythia.
  If you run the makefile and specify the compiler switch -DPYTHIA6,
  you get ATLFAST for Pythia6.
  A file (atlfast.root) generated by ATLFAST++/Pythia5 can be processed
  by ATLFAST++/Pythia6 and vice-versa.
  The README file in the distribution tar file has been updated to indicate
  what to do to compile/run with either Pythia5 or Pythia6.
  This new version of ATLFAST++ can be found at URL:
         ftp://root.cern.ch/root/atlfast.tar.gz

- In classes TVector3 and TLorentzVector, change a Warning to Error
  in case of a bad index. (Peter Malzacher).

- Bug found by Michael Sievers and corrected by Peter Malzacher
  in TVector3::PseudoRapidity. A minus sign was missing.

//
// 20/10/1999  11.56.23  by  Rene Brun
//
- Protect TParticle constructors in case the particle code is unknown
  from the PDG data base. The mass is then computed from the parameters.
//
// 19/10/1999  08.34.56  by  Rene Brun
//
- TRandom3::SetSeed modified to set fCount624 = 624.
  (Thanks mathieu de Naurois for reporting this problem)
//
// 18/10/1999  20.00.46  by  Fons Rademakers
//
- TDirectory: on popular demand now supports wildcarding.
  The option can has the following format:
     [-d|-m][<regexp>]
  Option -d means: only list objects in the file
         -m means: only list objects in memory
  The <regexp> will be used to match the name of the objects.
  By default memory and disk objects are listed.
  Example:  dir->ls("hp*")
  List all objects with name starting with "hp".
//
// 18/10/1999  19.12.19  by  Rene Brun
//
- Forgot to increment the Class VersionID in the ClassDef of TPaveStats.
  It was not possible to read canvases saved with 2.22.
  A special case introduced in TPaveStats::Streamer to support canvases
  saved with 2.22 or 2.23/04. (thanks Philippe Canal for reporting thsi case).
//
// 17/10/1999  16.16.34  by  Rene Brun
//
- Tune text position in TPavelabel and TPaveText.

- Improved version of TLatex with better text size estimation.
  Increase vertical displacement for Greek characters.

- Change clipping algorithm in TPad::PaintText in Postscript case.
  Instead of ignoring text with a starting position outside the pad frame,
  set this position at the pad boundary. This is to circumvent precision
  problems when converting in some cases pixels to pad coordinates.

- Modification of TBranchObject::GetEntry in case the branch address is not yet set
  and a reference to a member function is found in TTree::Draw.
  The following case is now operational: (thanks Philippe Canal)
   TFile f("Event.root");
   T.Draw("event.GetNtrack());
//
// 15/10/1999  16.09.58  by  Fons Rademakers
//
- Corrected some CMZ install scripts for WinNT.

- Makelib: return linker exit code in case of link failure. This should
  properly stop the Makefile.

- ROOT Splash screen now mentions right version number
  (thanks Dave Morisson).

- TUnixSystem: in DynamicPathName() show dynamic library path in case
  library is not found.

- TUnixSystem: in GetDynamicPath() make sure $ROOTSYS/lib is always in
  path and also append $LD_LIBRARY_PATH to any specified path.
//
// 15/10/1999  15.33.38  by  Rene Brun
//
- Add a protection in TChain::Add in case the specified object name
  is not a TTree (Philippe Canal).

- Extend kMAXDIM from 100 to 200 in TMinuit.
  This change has been requested by Chris Jillings who has a problem
  involving 140 parameters. The best solution would be to make the
  internal TMinuit static arrays dynamic.
//
// 14/10/1999  08.49.07  by  Rene Brun
//
//________________________________________________________________________
//
//::>          VERSION  2.23/04   13/10/99 19.04.04
//

  NEW LIBRARY STRUCTURE
  =====================

  We have minimized libraries dependencies by:
    - moving classes to other categories (i.e. shared libraries)
    - introducing new abstract interfaces
    - removing unnecessary includes in the implementation files
    - calling classes via the interpreter when performance is not an issue
    - some minimal changes in several classes

  With the new structure, for example:
    - a program referencing only TObject will need to link the following
      libraries only (the Root kernel): libCore and libCint.
      This "kernel" includes the Root I/O. There are no references
      to graphics, GUI, etc.
    - a batch program creating/filling/saving histograms and a Tree will only
      need the kernel above (libCore, libCint) + the libHist and libTree
      libraries.

  The following picture shows all the Root libraries and their dependencies.
  All non-Core libs reference the Core library.
  Libs shown in green are dynamically loaded by the system when needed.

    


  Some new abstract interfaces have been introduced and some changes (renaming)
  have been made in the existing abstract interfaces.

    

  -TVirtualPad: abstract interface to graphics in a pad,
                real implementation is TPad.
                The new TVirtualPad does not derive anymore from TWbox but
                directly from TObject.
  -TVirtualX:   abstract interface to the basic windowing system (was TGXW)
                real implementations are TGX11 (Unix) or TGWin32 (Windows/NT)
  -TVirtualPS:  abstract interface to Postscript,
                real implementation is TPostScript.
  -TVirtualGL:  abstract interface to Open GL,
                real implementation is TGLKernel.
  -TVirtualFitter: abstract interface to a minimisation package,
                real implementation is TFitter calling TMinuit.
  -TVirtualHistPainter: abstract interface to histogram graphics,
                real implementation is THistPainter.
  -TVirtualTreePlayer: abstract interface to the TTree analyzer,
                real implementation is TTreePlayer.
  -TInterpreter: abstract interface to a C++ interpreter,
                real implementation is TCint.
  -TSystem:     abstract interface to the operating system,
                real implementations are TUnixSystem, TWinNTSystem, TVMSSystem.

  The abstract classes are in the Core library.

  These new abstract interfaces increase dramatically the overall modularity
  of the Root system. For example:
   - One can now easily implement an alternative to the standard Root classes,
     by deriving from one of the abstract interfaces.
   - The linker knows only about the abstract base classes. For example,
     TObject::Draw references only the TVirtualPad. There is no need
     to link with the graphics libraries if graphics is not used.

  Due to these changes the interactive Root module (root.exe) is now
  only explicitely linked against a few libraries (to see this do on
  linux: ldd $ROOTSYS/bin/root.exe). There is even no need anymore to
  explicitely link against X11 libraries (even for you own apps).
  During the execution only the needed libs will be loaded, e.g. if you
  don't fit during your Root session you will never load the Minuit
  library or if you run in batch mode (-b option) you will not load any
  graphics libs.


  IMPORTANT NEW FEATURES
  ======================

  - New version of CINT with new features.
  - Important changes in class TClassTree.
    See TClassTree header for a complete documentation.
    The new version of this class is more poweful and simple to use.
    All kinds of class dependencies can be drawn.
  - Integrate changes in the THREAD package by Joern Adamczewski, Hans Essel,
    Marc Hemberger. See their report in the notes.
  - Important improvements in the TLatex class.
  - Classes TPaveLabel and TPaveText use TLatex instead of TText.
  - The graphics editor option Text uses TLatex instead of TText.
  - Histogram titles and axis titles accept a TLatex expression.
  - InitGui() graphics initialization function not needed anymore.
  - CVS repository created. The latest sources can now be retrieved from
    our anonymous CVS repository. However, it is still needed that you
    start with a valid binary distribution, to where $ROOTSYS must point
    (the binary version only has to be installed once).


  BACKWARD INCOMPATIBILITIES
  ==========================

  - Users having classes referencing the old TGXW class must replace TGXW
    by TVirtualX and the corresponding global pointer gGXW by gVirtualX.
  - The global pointer gCurrentPS has been renamed gVirtualPS.
  - The global pointer gGLKernel has been renamed gVirtualGL.
  - The methods TObject::Is3D and TObject::Sizeof3D have been removed.
  - New class TAtt3D: use this class via multiple inheritance
    to get 3D capability (like the other TAttxxx classes and like
    Java's interface mechanism). The virtual function, Sizeof3D(),
    provided by this class should be overridden. See release notes
    for more info about TAtt3D.
  - The libraries libBase, libCont, libMeta, libClib, libUnix/libWinNT
    and libZip are merged into one single library libCore.
  - To be insulated in the future against any library changes try to use
    as much as possible the provided script $ROOTSYS/bin/root-config. For
    its use see $ROOTSYS/test/Makefile.
  - The enum in TCanvas defining kIsEditable, kIsNotEditable has been deleted.
    Replace statements like canvas->setEditable(kIsEditable) by
     canvas->SetEditable(kTRUE);
  - In the previous version, when the canvas was not editable, none of its
    subpads were editable. With this new version, the IsEditable is a feature
    of the pad, not of the canvas. If you have a pad containing buttons,
    you should set this pad not editable.


  LINKING parameters
  ==================

  - To be insulated against any library changes and to get the proper
    list of Root libraries to link with use the provided script
    $ROOTSYS/bin/root-config. For its use see $ROOTSYS/test/Makefile.
  - X11 dependence is now completely contained in libGX11. No need to link
    anymore an application explicitely with -lXpm and -lX11. Dynamically
    loading of libGX11 will also force the loading of libXpm and libX11.


  IBM AIX
  =======

  Thanks to this restructuring, we are now able to provide the same
  structure on AIX as on the other Unix platforms.
  The old and big library libRoot.a has been split into several libs.
  See above remark about root-config to list the libs under AIX.

  A complete list of all changes and improvements, bug fixes, etc. can
  be found in the Release notes below.
//
//-------------------------------------------------------------------------
//               D E V E L O P M E N T S   N O T E S
//-------------------------------------------------------------------------
//
// 13/10/1999  08.12.21  by  Rene Brun
//
-     BASE
      ====
 - Rename TAttFill::Reset   TAttFill::ResetAttFill
 - Rename TAttLine::Reset   TAttLine::ResetAttLine
 - Rename TAttText::Reset   TAttText::ResetAttText
 - Rename TAttMarker::Reset TAttMarker::ResetAttMarker
 - Rename TAttPad::Reset    TAttPad::ResetAttPad

- class TMath. Remove function SinCos (portability reasons)
                Remove Atan2 to avoid confusion with ATan2

- class TAttText.
  Do not use anymore the array x11factor.
  Do not set TextMagninute (unused).

- class TObject: change prototypes:
    void Inspect(TClass *cl, const char *parent, const char *name, void *addr);
    void TDumpMembers::Inspect(TClass *cl, const char *pname, const char *mname, void *add)

- class TRandom2, function SetSeed2.
   Add comment that seed1 and seed2 must be < 2147483647

- class TROOT. Reimplement TROOT::GetClass. The previous implementation
   was striping trailing blanks. This operation was time consuming.
   The only case where blank striping was necessary was in the THtml class.
   see changes in THtml.
   Add new function TROOT::LoadClass.
   This new function checks if class "classname" is known to the interpreter.
   If not it will load library "libname". Returns 0 on successful loading
   and -1 in case libname does not exist or in case of error.
   Replace invokation of TProof by a call via the interpreter.
   This removes dependencies of the new libCore from Proof.

- class TStyle. Reflects all the changes in the Reset functions of
   the attribute classes.
   Add new function TStyle::SetTimeOffset.

- new abstract base class TVirtualFitter.

- class TView moved from G to BASE. This class includes a new function:
    virtual void  NDCtoWC(Float_t *pn, Float_t *pw);

- class TVirtualPad. New functions or prototypes:
    virtual Bool_t   IsEditable() = 0;
    virtual void     SetBatch(Bool_t batch=kTRUE) = 0;
    virtual void     SetEditable(Bool_t mode=kTRUE) = 0;
  Function TVirtualPad::RedrawAxis is deleted. Only in TPad::RedrawAxis.

-      H
 ========
- class TAxis.
  Add new data members fTimeDisplay and fTimeFormat.
  New member function TAxis::ChooseTimeFormat (from Damir Buskulic)
  New member function TAxis::SetTimeFormat (from Damir Buskulic)
  New member function TAxis::SetTimeDisplay (from Damir Buskulic)
  When this function is called, the axis panting routines will show
  labels in date/time format instead of numeric values.

- class TF1
  Remove global gF1
  Implement TF1::GetObjectInfo. This function displays the function
  info (x, function value) corresponding to the cursor position.

- class TFormula
  Add some protections in Analyze.
  Replace internal static arrays by new data members. This solves several
  problems with recursivity. lexpr ==> fExpr, loper ==> fOper,
  lparams ==> fparams

- class TH1
  Add new option "U" in TH1::Fit.
  if Hoption.User is specified, assume that the user has already set
  his minimization function via SetFCN.
  In H1FitLikelihood, remove test on bin error = 0.
  Do not compute the Sum of Logs at each iteration. This sum is computed
  only once in TFitter::GetSumLog.
  In Th1::SetContour, always recompute the contour levels except when
  the levels are user specified. This solves a problem reported
  by Martin Purscke when drawing 2-d histograms with the Lego option.
  New bit kUserContour introduced.
  Add new function TH1::SetCellContent.

- class TH3
  function TH3::Sizeof3D reimplemented to invoke Marker3DBox::SizeofH3
  or TPolyMarker3D::SizeofH3 via the interpreter.
  the R__EXTERN Size3D gSize3D statement has been deleted.

- HISTPAINTER
 ============
 New function THistPainter::PaintText to draw a 2-d histogram
 with the option cell values. Use the option "TEXT" in TH1::Draw
 or click the TEXT button in the DrawPanel to select this option.

-      G
 ========
  Add statements in all graphics primitives to test if the pad is editable or not.
  Fix a bug in TEllipse::Paint. The fPhiMin angle was not taken into account
  correctly.
  Class TGaxis. Introduce new code from Damir Buskulic to support date/time
  formats for axis labels.
  new function TGaxis::SetTimeFormat.

- class TGraph
 Rename global gF1 to grF1.
 Rename Foption to fitOption.
 Rename Fitter to grFitter.
 Add new constructor: TGraph::TGraph(Int_t n, Double_t *x, Double_t *y)
 Delete unnecessary casts to (char*) when invoking the TH1 constructor.
 Fix a clipping problem in TGraph::PaintGraph.
 Fix a problem in TGraph::PaintGrapHist. When drawing a graph with a fill area,
 The Postscript line width is reset in TPostScript::DrawPS. Add one more call
 to TAttFill::Modify and TAttLine::Modify after having drawn the fill area.
 (thanks to Otto Schaile)

- class TGraphErrors and TGraphAsymmErrors
  add clipping along X

- class TLatex.
  A long list of changes in this class (Marthe Brun).
  New function TLatex::GetTextExtent. This function includes tables for all
  fonts in order to compute accurately the size of any text expression.
  Internal alignment of subexpressions has been improved.
  Two passes instead of one (one pass for the screen, one pass for postscript).
  Note that TLatex is now used instead of TText for histogram titles,
  axis titles and all TPaveLabel and TPaveText.

- new class TLegend and TLegendEntry by Matt Dobbs.

- class TLego. Change "char*" to "const char*" in
    void    LegoCartesian(Float_t ang, Int_t nx, Int_t ny, const char *chopt);
    void    SurfaceCartesian(Float_t ang, Int_t nx, Int_t ny, const char *chopt);
    void    SurfacePolar(Int_t iordr, Int_t na, Int_t nb, const char *chopt);
    void    SurfaceCylindrical(Int_t iordr, Int_t na, Int_t nb, const char *chopt);
    void    SurfaceSpherical(Int_t ipsdr, Int_t iordr, Int_t na, Int_t nb, const char *chopt);


- class TPaveLabel
  Optimize aligment and computation of the text size.
  TLatex is used instead of TText. Any Latex expression can be given
  for the string shown in TPaveLabel.

- class TPaveText
  same improvements as in TPaveLabel
  New options in the TPaveText contextmenu to add/insert/delete/edit.
  A long list of improvements in the TPaveText interactive editor.

- class TCutG. Several changes in the data members definition.
  The data member fTree pointing to the current Tree has been deleted.
  The members fFormulaX and fFormulaY are now TObject* instead of TTreeFormula*.
  New functions
    TObject       *GetObjectX() {return fObjectX;}
    TObject       *GetObjectY() {return fObjectY;}
    virtual void   SetObjectX(TObject *obj) {fObjectX = obj;}
    virtual void   SetObjectY(TObject *obj) {fObjectY = obj;}

-   GPAD
 ========
- class TButton. Replace calls to the interpreter.
  gInterpreter->ProcessLine ==> gROOT->ProcessLine

- class TCanvas
  Remove enum ECanvasEditMode. Replace kIsEditable by kTRUE.
  new function TCanvas::DrawClone. It is now possible to clone a canvas
  by selecting "DrawClone" in an existing canvas.
  One can also clone a pad in one canvas into another canvas. To do it,
  first select the destination pad/canvas with the middle button, then
  select the item "DrawClone" in the original pad context menu.

- class TDrawPanelHist
  When starting the Drawpanel, the slider shows the current axis selection.
  add new Drawing option "TEXT". When this option is selected, 2-d histograms
  are drawn with the "TEXT" option showing cell values.

- class TFitPanel
 Add new user button "USER" to fit with a user defined function.
 To specify a user function, use the USER button context menu and click
 on SelectMethod.
 Button "Same Picture" moved to a different location.
 New button "Log Likelihood" to select the log likelihood fitting method
 instead of the default chisquare method.

- class TPad
 Remove dependencies from TLego.
 Add new data member fIsEditable with corresponding Getter and Setter function.
 If SetEditable(kFALSE) is called, the graphics editor cannot modify
 objects in the pad.
 This option/toggle is available in the TPad context menu.
 TPad::CreateNewText creates TLatex objects instead of TText.
 When selection the entry "TEXT" in the graphics editor, one can type
 a TLatex expression.
 New function TPad::SetBatch invoking TCanvas::SetBatch.
 TPad::Print loads automatically the libPostscript shared library.
 Add a new optional argument in void TPad::RedrawAxis(Option_t *option).
 If option contains the string "grid", the grid is redrawn on top of
 the picture.
 Modify TPad::Streamer in read mode to automatically call TPad::ResizePad.
 TPad::x3d can automatically link the X3D shared library.

- class TSliderBox.
  Replace gInterpreter->ProcessLine by gROOT->ProcessLine

-   G3D
 ========
- class TMarker3DBox.
  new function void TMarker3DBox::SizeofH3(TH1 *h)

- class TMaterial
  Automatic creation of a TGeometry if global gGeometry is null.

- class TPadOpenGLView. New prototypes for:
    void         MoveModelView(const Char_t option,Int_t count=1);
    void         MoveModelView(const Char_t *commands, Int_t display_time=0);
  Remove unnecessary casts to (char*).

- class TPolyMarker3D.
  in TPolyMarker3D::PaintH3, the test on the number of entries was wrong.
  new function: TPolyMarker3D::SizeofH3

- class TRotMatrix
  In the destructor, remove this matrix from the TGeometry list of materials.
  (thanks Francois-Xavier Gentit for reporting).



-   HTML
 ========
- class THtml. Add new function TClass *THtml::GetClass(const Text_t *name1, Bool_t load).
  This function replaces calls to TROOT::GetClass. It includes additional
  tests on the string supposed to contain a class name. If the class name
  includes trailing blanks, they are stripped.

-   META
 ========
- class TClass. Change prototype
    void Inspect(TClass *cl, const char *parent, const char *name, void *addr);
   void TBuildRealData::Inspect(TClass *cl, const char *pname, const char *mname, void *add)
   remove unnecessary casts to (char*).


-  MINUIT
 ========
- class TFitter.
  Add new function TFitter::GetSumLog to compute the sum of the logs
  of numbers from 1 to N. used by Log likelihood functions.
  This saves a considerable amount of time when loglikelihood option
  is selected (thanks Gerco Underwater for reporting).
  new function void TFitter::FixParameter(Int_t ipar).
  new function void TFitter::ReleaseParameter(Int_t ipar).

- class TMinuit
  TMinuit::Contour returns a TObject instead of a TGraph.
  This change to avoid dependency of libMinuit from graphics.
  Calls to TGraph via the interpreter.
  Replace several "static char" by "const char"

-  TTREE
 ========
- class TBasket
  in function TBasket::WriteBuffer replace test
  if (nout > fObjlen) by if (nout >= fObjlen)
  This fixes a problem in case the compression algorithm generates
  a compressed buffer of exactly the same size as the input buffer.

- class TBranch
  Remove the definition of variable lentype from the constructor.
  use the leaf->GetLenType instead.
  In TBranch::GetBasket, replace statement:
      if (basket->GetObjlen() <= nb) {
  by
      if (basket->GetObjlen() + basket->GetKeylen() <= nb) {
  (thanks xxxx)

- class TBranchObject.
  In TBranchObject::SetAddress implement suggestion by Andy Salnikov
  to set the user branch pointer to the internally created object.
  This nice suggestion introduces a symmetric behaviour between split
  and non-split mode.

- class TLeaf. New prototype for;
    virtual Float_t GetValue(Int_t i=0);
  dependencies from TTreeFormula removed.

- mame in TLeafB, TLeafC, TLaefD, TLeafF, TLeafF, TLeafObject

- class TChain
  make TChain::Lopp dummy for the time being.
  Replace Pop by Notify.

- class TTree
  Split this class into 3 new set of classes
    - the original and smaller TTree
    - the new class TTreePlayer implementing most of the old TTree::Draw
    - the new class TTreeViewer
  The new TTree has no references to graphics or viewers anymore.
  Internal members fV1, fV2, fV3 , fW, fVar1, fVar2, fVar3, fSelect deleted.
  Fix a problem in TTree::BuilIndex. New array fIndexValues introduced.
  TTree::Draw is a small layer to invoke TVirtualTreePlayer::Draw
  The following functions have been deleted from TTree and reimplemented
  in TTreePlayer:
  TTree::ClearFormula, CompileVariables, CreatePacketGenerator
  TTree::EstimateLimits, EntryLoop, FindGoodLimits, GetSelector, MakeChopt
  TTree::SetPacketSize, SetSelector, TakeAction, TakeEstimate.
  Several improvements in TTree::MakeClass and TTree::MakeCode
  TTree::SetBranchStatus supports wildcarding for the branch name.
  New function void TTree::SetBasketSize(const Text_t *bname, Int_t buffsize)
  where bname also supports wildcarding.


- TREEVIEWER
  ==========
  Add two new buttons/fields to display the command currently executed
  and to activate the echo of this command in stdout. (Philippe Canal)

-  PHYSICS
 ========
- classes TLorentzVector and TVector3. add protection in case of a reference
  to a bad index. (Peter Malzacher)

-    X3D
 ========
  new class TViewerX3D. This class is a small interface to invoke the X3D viewer.


- POSTSCRIPT
 ===========
  Several optimisations in TPostScript::Text.
  The computation of the text size takes into account the pad aspect ratio
  in the same way as TAttText::Modify.
  The array psrap has been modified to give the same character size between
   the screen and Postscript for all the defined fonts.

-  TEST
  =====
 In main program MainEvent of the Event test program, repalce statement
     Event *event = new Event();
 by
     Event *event = 0;
 and call new Event only in the Write test.

  Modify stress test program to
   - dynamically link the postscript shared lib.
   - in stress7 delete statement    cutg->SetTree(ntuple);
  In Tetris, replace    fIsEditable = kIsNotEditable; by   fIsEditable = kFALSE;

-  TUTORIALS
   =========
  In rootlogon.C delete dynamic linking of Root_Tree.DLL for Windows/NT.
  This is now symmetric between Unix and NT in TRint.
  In testrandom, the loop index i was defined twice.
  In Zdemo, delete some unused statements.

-  INSTALL
   =======
  Many changes in Make-macros to reflect the changes in the internal
  organisation and the new classes.
  Change CXXFLAGS and SYSLIBS in Makesolarisegcs.

- The ALPHA/CXX saga
  ==================
  A considerable amount of time has been spent to make Root version 2.23
  operational on Dec/Compaq/Alpha with the CXX compiler and linker.
  After lengthy investigations suspecting problems with the compiler
  or Root itself, we finally found out a problem with the loader.
  If one tries to create the libraries libCore, libHist, libGraf3d like
  on all other Unix systems, one gets unpredictable results during
  execution. The program bombs at variable places. Adding a print statement,
  compiling with different options move the problem to a different location
  like if the code was overwritten.
  After many attempts, dirty tricks, etc, we finally solved the problem
  in adding into libCore the contents of libHist and libGraf3d.
  For compatibility with the other Unix systems, libHist.so and libGraf3d.so
  exist, but contain dummy code.
  This problem has been reported to Compaq.

// 12/10/1999  19.40.41  by  Fons Rademakers
//
- TClass: fix in GetBaseClassOffset(): return correct offset for
  arbitrary deep inheritance trees.

- On WinNT: can now link DLL's like shared libs on AIX. I.e. also WinNT
  is now modular. Had to move several classes from the Win32 lib to the
  WinNT lib.

- Introduced new header RVersion.h (available whenever a ROOT class header
  is included). This header exports the followin symbols:

     #define ROOT_RELEASE "2.23/03"
     #define ROOT_VERSION_CODE 136963
     #define ROOT_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))

  which can be used in the following way:

      #if ROOT_VERSION_CODE >= ROOT_VERSION(2,23,4)
         // for newer versions
      #else
         // for old versions
      #endif
//
//
// 11/10/1999  12.25.59  by  Fons Rademakers
//
- Cleanup of WinNT installation. Removed empty patch Win95. Generate
  dictionaries for TWinNTSystem and TGWin32 classes. Introduced
  WIN32_LinkDef and WINNT_LinkDef. Corrected number of WinNT related
  CMZ install macros.

- TBuffer: fixed reading of strings (TBuffer &TBuffer::operator>>(Char_t *c)).
  The user must make sure that c points to space large enough to hold the
  string to be read. In previous version only 4 bytes were read. Use TStrings
  for dynamic strings.

- TGTextEntry: addtional fixes from V.Onuchin for no echo mode.
//
// 05/10/1999  18.23.13  by  Fons Rademakers
//
- Make-macros: added build rules for libThread.so.

- G__MethodInfo: Property() returns correct info when method is const.
  This will allow the THtml class to correctly show the signature of
  const methods.

- Removed macro EXTERN from DllImport.h. To export globals in a portable
  way to the interpreter you HAVE to use now the macro R__EXTERN.

- TFunction: fix in GetSignature() so that it also works in the derived
  class TMethod.

- TVector: fix in ResizeTo() when growing a TVector (fix by Marek Kowalski).

- TSystem: ListLibraries() prints now on all platforms the list of loaded
  shared libraries. Removed redundant space from GetLibraries().

- TCint: removed redundant space from GetSharedLibs().
//
// 04/10/1999  20.59.25  by  Fons Rademakers
//
- New browser icons by Suzanne Panacek.
//
// 03/10/1999  19.17.52  by  Fons Rademakers
//
- InitGui() graphics initialization function not needed anymore.
  Graphics libs (libGX11 and libGui) will now be loaded by
  TApplication only when !gROOT->IsBatch(). By default the system
  will not be in batch mode when the DISPLAY environment variable is
  set or when, for backward compatibility, InitGui() is specified
  (InitGui() is now dummy, so remove it from your TROOT ctor).
  To explicitely set the system in batch mode call gROOT->SetBatch()
  before creating the TApplication object, or pass the -b command line
  argument to the TApplication ctor. NOTE: The previous default behaviour
  was to be always in batch mode when InitGui() was not specified in
  the TROOT ctor, now you've to use SetBatch() as mentioned above.
  Changes in TROOT, TApplication, InitGui(), pmain, rmain, guitest,
  hworld, stress and root-config.

- For all platforms: introduced libCore consisting of the previous libs:
     BASE, CONT, META, NET, UNIX, ZIP and C.
  Changes in ROOT_LIBS and ROOT_MAKE macros.

- X11 dependence is now completely contained in libGX11. No need to link
  anymore an application explicitely with -lXpm and -lX11. Dynamically
  loading of libGX11 will also force the loading of libXpm and libX11.
  Modified all Makefile's accordingly.

- THistPainter: corrected case of deckname.
//________________________________________________________________________
//
//::>          VERSION  2.23/03   27/09/99 15.19.38
//
//
// 27/09/1999  00.59.09  by  Fons Rademakers
//
- Make-macros: fixed number of typos.

- IBM AIX: after re-organization and introduction of abstract
  interfaces, can now link in number of small libraries. Like
  on other systems. Had to move TAttAxis to BASE since it is
  used by TStyle. On IBM libCore.a consists of:
     BASE, CONT, META, NET, UNIX, ZIP and C.
  Also updated all AIX link sequences (number of system libs
  could be removed from link command).

- Updated root-config.
//
// 25/09/1999  20.26.07  by  Fons Rademakers
//
- TGWindow: new method IconifyWindow().

- TGVirtualX, TGX11: new method IconifyWindow()

- TRootCanvas: Iconify() now calls IconifyWindow().

- TApplication: protect againts double loading of libGX11TTF.so.
//
// 23/09/1999  18.06.34  by  Fons Rademakers
//
- TGFrame: added method SetIconPixmap().

- TGVirtualX, TGX11: added SetIconPixmap().
//
// 21/09/1999  19.19.54  by  Fons Rademakers
//
- TROOT: added error handling to LoadClass(). Also use LoadClass() to
  load libProof in Proof().

- TRint:  explicitely load commonly used libraries (Matrix, Postscript,
  Minuit).

- TFile: use TROOT::LoadClass() to load libRFIO.
//
// 21/09/1999  19.19.54  by  Fons Rademakers
//
- TROOT: added error handling to LoadClass(). Also use LoadClass() to
  load libProof in Proof().

- TRint: explicitely load commonly used libraries (Matrix, Postscript,
  Minuit).

- TFile: use TROOT::LoadClass() to load libRFIO.
//
// 21/09/1999  19.19.54  by  Masaharu Goto
//
* 5.14.16 22 Aug 1999
* 1176, cast error message was too strict. Allow pointer cast, risk1
* 1177, (pary[i])->f(new A); bug fix, risk5
* -   , default editor for .E command , notepad for Windows, risk0
* 1178, n,y,z,< debugger command eliminated from ROOT help
* 1179, Macro expansion bug at dictionary generation, risk1
* 1180, no default constructor errmsg in bytecode compilation eliminated, risk0
* 1181, G__calc("delete a"); bug fix
* 1182, class A { A const& operator=(A const& x); }; bug fix
//
// 20/09/1999  12.43.06  by  Fons Rademakers
//
- TGCompositeFrame: AddFrame() provide default layout hints when
  user does not provide hints.

- Removed references to libX3d from globals, root-config and Make-macros.
  The libX3d is oly loaded when needed.
//
// 18/09/1999  14.50.10  by  Fons Rademakers
//
- TObjArray: set fLast correctly in copy ctor.

- TStorage: new static method AddToHeap(). This method keeps
  track of total memory range used for heap. This allows for
  correct checking of heap objects, i.e. any object within
  this range is on the heap. Previously only the range of
  the just new-ed object was checked (and reset in delete).
  This would fail if before the execution of the ctor another
  object would be new-ed (like as in a method passed as
  argument that returns an object).
//
// 17/09/1999  00.44.30  by  Fons Rademakers
//
- TWebFile: Init() now takes Bool_t argument (unused) so it
  will not hide TFile::Init(Bool_t).
//
// 13/09/1999  02.49.53  by  Fons Rademakers
//
- TSystem: enlarged max buf size in ExpandFileName() to 1024
  (limit of max path length on many systems).
//
// 12/09/1999  15.47.08  by  Fons Rademakers
//
- TClass: added two new methods:
     void *DynamicCast(const TClass *base, void *obj)
     Int_t GetBaseClassOffset(const TClass *base)
  the first method is used to safely cast via a generic
  obj pointer to a base class (equivalent to dynamic_cast<>()).
  It returns either 0 or a pointer pointing to the "base"
  part of obj. The second method is used internally by DynamicCast().

- TObject: removed Is3D() and Sizeof3D() from TObject.
  Added new method Notify(). Notify() can
  be implemented whenever an object has to respond to some
  notification.

- New class TAtt3D: use this class via multiple inheritance
  to get 3D capability (like the other TAttxxx classes and like
  Java's interface mechanism). The virtual function, Sizeof3D(),
  provided by this class should be overridden. To safely access
  this TAtt3D method do:
     TIter next(pad->GetListOfPrimitives());
     TObject *obj;
     while ((obj = next())) {
        TAtt3D *att;
   #ifdef R__RTTI
        if ((att = dynamic_cast<TAtt3D*>(obj)))
   #else
        if ((att = obj->IsA()->DynamicCast(TAtt3D::Class(), obj)))
   #endif
           att->Sizeof3D();

  Used like this in TViewerX3D::View().

- Modified all classes which had Is3D()=kTRUE to inherit from TAtt3D.
  Implementation of Sizeof3D() for these classes stayed the same.

- Changed all calls of gInterpreter->ProcessLine() to
  gROOT->ProcessLine(). The latter is a safe interface to the
  interpreter (i.e. it makes sure the proper TApplication environment
  exists) and should always be used. Removed unneeded TInterpreter.h
  inclusions from a number of files.

- Cleaned up many cases where temporary string variables were declared.
  Mostly in cases where command strings were formed to be passed
  to ProcessLine(). Use the ::Form() function to format temp strings
  in a circular text buffer.

- Added proper error handling in several cases of gSystem->Load().

- TVirtualFitter: added argument specifying the maximum number of
  fit parameters to Fitter() (also added this to TFitter ctor).
  Also added the methods FixParameter() and ReleaseParameter()
  (to avoid confusion since parameters defined via the virtual
  interface count from 0 while minuit counts from 1).

- $ROOTSYS/test/minexam.cxx: use TVirtualFitter interface so we
  don't have to link explicitely with libMinuit.

- TChain, TTree: use TObject::Notify() instead of Pop() to notify
  an object during chain traversal.

- TVirtualX, TGX11: added new method FreeFontStruct().

- TGString: fixed memory leak (using FreeFontStruct()) in TGHotString::
  DrawHotChar(). Thanks Krzysztof Zelazowski.

- TGTextFrame: fixed memory leak. Thanks Krzysztof Zelazowski.

- TCanvas: fixed opaque moving and resizing that were broken after
  the large dependency cleanup of 2.23/01.
//
//________________________________________________________________________
//
//::>          VERSION  2.23/02   07/09/99 18.25.12
//
//
// 07/09/1999  18.03.41  by  Rene Brun
//
- IMPORTANT CLEANUP OPERATION
  ===========================
  An effort has been started to reduce libraries dependency by:
    -moving classes to other categories
    -introducing new abstract interfaces
    -removing unnecessary includes in the implementation files
    -calling classes via the interpreter when performance is not an issue
    -some minimal changes in several classes
  All these changes should be totally transparent to users.
  With the new structure, for example:
    -a program referencing TObject only will need the following
     libraries (the Root kernel): Base, Meta, Cont and Cint.
     This "kernel" includes the Root I/O. There are no references
     to graphics, GUI, etc. (Many users believe that because there is
     a TObject::Draw, this implies linking with graphics!!).
    -a batch program creating/filling/saving histograms will only need
     the kernel above + the Hist library.


  Some new abstract interfaces have been introduced and some changes (renaming)
  have been done in the existing abstract interfaces.

  -TVirtualPad: abstract interface to graphics in a pad
                real implementation is TPad.
     The new TVirtualPad does not derive anymore from TWbox but directly
     from TObject.
  -TVirtualX:   abstract interface to the basic windowing system (was TGXW)
                real implementations are TGX11 (Unix) or TGWin32 (Windows/NT)
  -TVirtualPS:  abstract interface to Postscript
                real implementation is TPostScript.
  -TVirtualGL:  abstract interface to Open GL.
                real implementation is TGLKernel.
  -TVirtualFitter: abstract interface to a minimisation package.
                real implementation is TFitter calling TMinuit.
  -TVirtualHistPainter: abstract interface to histogram graphics
                real implementation is THistPainter.
  -TVirtualTreePlayer: abstract interface to the TTree analyzer.
                real implementation is TTreePlayer.
   -TInterpreter: abstract interface to a C++ interpreter
                real implementation is TCint.
  -TSystem: abstract interface to the operating system
           real implementations are TUnixSystem, TWinNTSystem, TVMSSystem.

   The abstract classes are in the Base library.

                   More details on the restructuring
                   =================================
   Library libBase
   ===============
   - remove dependency from libProof by use of the interpreter.
     affects TDirectory::Get, TFile::ConnectFile, TFile::DisconnectFile.
   -The Root constructor does not reference/initialize TMinuit, TGeometry
     or TPostScript.
     The initialisation of these three objects is automatic from the new functions
     TVirtualFitter::Fitter TShape::TShape or TPad::Print respectively.
     The return type for TROOT::GetGeometry is a TObject* instead of TGeometry*
     The return type for TROOT::GetFunction is a TObject* instead of TF1*
   -The attribute classes TAttFill, TAttLine, TAttMarker, TAttText, TAttPad
     have been moved to Base from Graf.
   -TBrowser has been moved to Base from Graf.
   -TColor has been moved to Base from Graf.
   -TGuiFactory has been moved to Base from Graf.
   -TStyle has been moved to Base from Graf.

   Library libFunc
   ===============
   This library has been DELETED. The corresponding classes moved to libHist.

   Library libHist
   ===============
   - The class TH1 has been split into two classes
     - a reduced TH1 (no graphics)
     - the new class THistPainter (see library libHistPainter)
   - New transient only data member added fPainter. fPainter is a pointer
     to the TVirtualHistPainter object associated to each histogram.
     Note that an object per histogram is required to work in a multiThread
     environment.
   - References to graphics via the new abstract interface TVirtualHistPainter.
   - The classes TFormula, TF1, TF2, TF3 have been moved from Func to Hist.
   - No more direct references to TMinuit.
     The interface to an abstract minimizer has been introduced via
     the new class TVirtualFitter (in Base). The real implementation is
     in class TFitter in the libMinuit library.
   - The class TAxis has been moved from Graf to Hist.
   - The class TAttAxis has been moved from Graf to Hist.
   - The class TPolyMarker has been moved from Graf to Hist.
   - The class TPaveStats has been moved from Hist to Graf.
   - The class TLink has been moved from Base to Graf.

   Library libHistPainter
   ======================
   - Contains the class THistPainter and TLego (moved from libGraf).
   - this library contains all the functions required to paint histograms.
     This class includes all the functions previously called TH1:Paintxxx.
   - this library is automatically linked by TH1::Paint.

   Library libGraf
   ===============
   - all changes already described above
   - TGXClient is temporarely dropped.
   - class TGXW renamed to TVirtualX and moved to Base.
     global variable gGXW renamed gVirtualX.
   - class TGraph:
     new function TGraph::RemoveFunction.
   - class TView. remove dependency from Graf3D by creating a new function
     TPolyLine3D::DrawOutlineCube (in Graf3D) and invoking this function
     via the interpreter in TView::DrawOutlineToCube.
   - class TWbox. remove TPostScript dependency by calling the new
     function TVirtualPS::PaintBorderPS.
   - Changes in TWbox and TBox to remove knowledge about TPad or TButton.

   Library libGpad
   ===============
   -The class TPad derives from TVirtualPad (as before). But because of the
    changes in TVirtualPad, the previous functionality previously in
    TWbox/TBox::DistancetoPrimitive and TBox::ExecuteEvent has been included
    in TPad.
    TPad has new data members (previously in TBox) fResizing and fTip.
    TPad/TVirtualPad have new functions (see class).
       TPad::PaintBorder, TPad::PaintBorderPS.
    Dependency from TCutG, TGToolTip removed by using calls via the interpreter.
    Dependency from TPostScript removed by using calls to the TVirtualPS object.
    TPad::Print can dynamically link the Postscript lib when this is required.
    TPad::Resize suppressed.
    Dependency from X3D removed: When TPad::x3d is called, the new library libX3d
    is dynamically  linked and the the new class TX3D invoked via the interpreter.
    Change return type from TGToolTip* to TObject* in all TPad functions
    involving tooltips.

   Library libGraf3d
   =================
   - new function TMarker3DBox::PaintH3.
     This function is called via the interpreter from THistPainter::PaintH3.
   - new function TPolyMarker3D::PaintH3.
     This function is called via the interpreter from THistPainter::PaintH3.
   - new function TPolyLine3D::DrawOutlineCube.
     This function is called via the interpreter from TView::SetOutlineToCube.
   - In TShape::TShape, a TGeometry object is automatically created
     in case gGeometry = 0.

   Library libPostscript
   =====================
   The class TPostScript derives from TVirtualPS instead of TNamed.

   Library libMinuit
   =====================
   The class TMinuit is now invoked by the new class TFitter derived
   from the abstract interface TVirtualFitter.

   Library libX3d
   ==============
   A new small class TX3D has been introduced. Corresponding utilities
     -cint_x3d
     -x3d_linkdef
   The library libX3d is now automatically dynamically linked by TPad::x3d
   and a TX3D object created. TPad::x3d invokes the static function
   TX3D::Viewer via the interpreter.

   Library libGui
   ==============
   new constructor in class TGToolTip
   TGToolTip::TGToolTip(const TBox *b, const char *text, Long_t delayms);
   This new constructor is invoked by TPad::CreateToolTip to remove
   the previous depency of libGpad on libGui (gClient was necessary).
   All previous calls to gGXW replaced by gVirtualX.

   Library libTree
   ===============
   The original TTree class has been split into two new classes
      -The TTree class with no graphics. Includes the Tree creation/Filling.
      - the old TTree::Draw complex has been moved to a new class TTreePlayer
      - TTree::Draw is simply an interface to the abstract TVirtualTreePlayer.
   A program creating/filling a TTree does not need to link with the graphics
   libraries. dependencies on libProof have been removed.

   Library libTreePlayer
   =====================
   includes the Ttree analyzer function TTreePlayer. This class derived
   from the abstract interface TVirtualTreePlayer implements the functions
   previously called by TTree::Draw.
   The library also includes the classes TSelector, TTreeFormula, TPaveVar,
   TTreeViewer and TPacketGenerator. This lib depends on libProof and the
   graphics libs.


//
// 03/09/1999  09.08.55  by  Rene Brun
//
- In TLeaf::GetLeafCounter, one of the delete [] countname statement was
  misplaced and prevented the correct utilization of 3 dimensionnal (and up)
  indexed arrays. (thanks Philippe canal).
//
// 01/09/1999  17.29.57  by  Fons Rademakers
//
- TGtextEntry: small fix for block cursor.

- TFile: better test to see if libRFIO is already loaded.

- TGX11TTF: protection against running out of X buffer space when fonts
  get toot big (more than 50000 points).
//
//________________________________________________________________________
//
//::>          VERSION  2.23/01   01/09/99 11.55.46
//
//
// 31/08/1999  20.37.39  by  Fons Rademakers
//
- TRint: removed R__UNIX ifdef (symbol now exported by CINT also for Windows).

- TGTextEntry: updated version by Valeriy Onuchin. Supports now scrolling and
  advance (emacs) like editing.

- TArray: ReadArray() and WriteArray() now handle correctly the bytecount
  recently introduced in TBuffer.
//
// 31/08/1999  18.32.08  by  Rene Brun
//
- The following new classes have been introduced:
    TVirtualHistPainter & THistPainter
    TVirtualFitter & Tfitter

  class TVirtualHistPainter and THistPainter
  ==========================================
  TVirtualHistPainter is an abstract base class that provides a general
  interface for an histogram painter.
  The class TH1 has been split into two new classes;
    -the old TH1 with no graphics
    -the new class THistPainter
  THistPainter is the real implementation of TVirtualHistPainter.
  With this change, somebody not happy with the default histogram painter
  provided by the class THistPainter can implement his own version.

  class TVirtualFitter & TFitter
  ==============================
  TVirtualFitter is an abstract class that provides a general interface
  to a minimization package. TFitter is the real implementation for
  this class and it uses the existing TMinuit class.
  With this change, somebody not happy with the default fitter (either
  TMinuit or the new interface to TMinuit by TFitter can implement
  his own version.
  The functions TH1::Fit and TGraph::Fit invoke the TVirtualFitter directly.
  With this new implementation, the histogramming package and the TGraph
  package are independent of TMinuit. Somebody using histograms or graphs
  but no fits does not need to link with the shared library libMinuit.

- Add the following line in TSystem::CompileMacro
         gSystem->Unlink( dictObj );
   (thanks Philippe Canal)

- Changes in makemacros to generate the file compiledata.h in two steps.

- Move implementation for functions TChain::GetBranch, TChain::GetLeaf
   and TChain::GetNbranches from header file to implementation file.
   The new code is now protected in case TChain::LoadTree was not already
   called.

- Fix a problem in TF1::SavePrimitive. In case a canvas contains a TF1
   object referencing a CINT function, the code generated was invoking
   the wrong TF1 constructor. Thanks David Hardtke for reporting.

//
// 30/08/1999  18.44.14  by  Rene Brun
//
- Modidy TObject::DrawClone to draw the clone object in the current pad
  instead of the pad where the mouse points to. With this change one can
  select an object in a pad, select DrawClone to draw a copy of this object
  in the current pad.

- Fix a problem in TPostScript::SetFillPatterns. The local array cpat
  is now dimensionned to 5 instead of 4.

//
// 27/08/1999  22.22.00  by  Rene Brun
//
- Modify TAxis::FindBin to take into account NaN.
  The trick is to replace the test for overflows
     if (x >= xmax) by if (!(x<xmax))

- In class TPaveStats, add new data members and member functions
   to specify the format used to print the statistics and fit parameters
   in a "stats" box. The new functions are;
      const Text_t  *GetFormatFit  () const;
      const Text_t  *GetFormatStats() const;
      void           SetFormatFit(const Text_t *format="5.4g"); // *MENU*
      void           SetFormatStats(const Text_t *format="6.4g"); // *MENU*

- Some cleanup in class TROOT. remove unnecessary includes.
   Function TROOT::Proof invokes TProof via the interpreter.

- Modify TLego to remove the use of the globals gLego and gNIDS.

- Merge with Valery's version.
  Valery has suggested a way to solve the following problem:
   -create a canvas TCanvas c("c")
   -delete canvas with the mouse
  At this point the global variable gPad was not available anymore.
  Valery fixes are in GUI/TRootCanvas and in Win32/TWin32Canvas, Browser
  and Dialog.


//
// 26/08/1999  17.10.47  by  Fons Rademakers
//
- rootcint: declaration of G__map_cpp_name moved to G__ci.h.

- TGMimeType: error where freed memory was accessed.

- TGListTree: undefined variables defined.

- TGTextEntry: text is now horizontally scrollable. Implemented by
  Valeriy Onuchin.
//
// 26/08/1999  15.49.03  by  Rene Brun
//
- new class THistPainter. This is a helper class to draw histograms
   with different options. The code in this new class was previously in TH1.
   Makefile modified accordingly.

- All graphics function from TH1 moved to new class THistPainter.
  TH1 defines a static object THistPainter Painter. This Painter is invoked
  from the graphics routines TH1::Paint, distancetoPrimitive and ExecuteEvent.

- Mods from Philippe Canal in CINT:
  running rootcint on my version of TGraph.h and TContextMenu.h fails
  because by pure chance both file have their ClassDef statement EXACTLY
  at the same position in number of charaters.
  According to this extract from CINT_macro.c from G__execfuncmacro
  cint lookup it has already translated a macro by comparing the
  the file pointer and the position in number of charaters.
  However the file pointers can be reused during rootcint and so
  these two numbers are not a unique identifier and thus (at least in
  my case) their is a clash :(
  Problem fixed by Masa.

- In an attempt to compile root under Solaris with the new compiler CC5,
  many changes replacing "char *" by "const char *" have been made to avoid
  a long list of warnings from the compiler. The classes changed are:
    TCint, TClonesArray, TColor, TContextMenu, TControlBar, TDataMember,
    TGLViewerImp, TGX11, TVirtualX, TInterpreter, TLego, TMinuit, TObject,
    TPad, TPaveText, TRotMatrix, TStyle, TTree, TVirtualPad, TGWin32,
    TAttParticle, TGenerator, TPrimary, TPythia, TMethodCall, TSelector.
//
// 19/08/1999  18.08.43  by  Rene Brun
//
- new function TH1::Smooth.
   This new function implements a simple smoothing algorithm.
   It is currently only implemented for 1-d histograms.
   It uses the services of two new static functions
      TH1::SmoothArray and TH1::SmoothMedian.
   This new function is also available via the TH1 context menu.
   (thanks to Michal Lijowski for translating the original algorithm
   in the Hbook routine hsmoof).

- protection added in the TKey constructor in case R__zip cannot compress at all.
  This can happen in case of small buffers containing random patterns.
  The threshold for object compression has been rised from 64 to 256 bytes.
  (thanks Peter Malzacher for providing a simple test case).

- protection added in TPad::CreateToolTip in case of WIN32.
- protection added in TPad::CreateToolTip in case of a batch session.

//________________________________________________________________________
//
//::>          VERSION  2.23/00   18/08/99 18.33.08
//
//
// 18/08/1999  18.16.20  by  Rene Brun
//
- Add function TGraph::Browse. A TGraph object in a TFile can be viewed
  directly by the browser.

- remove several dependencies:
   TGroupButton: no need for TPaveLabel
   TBasket:      no need for TLeaf
   TTree:        no need for TChain

- Change invokation to TClassTree from TRootCanvas and TWin32Canvas.

- Update tutorial classcat to reflect the changes in TClassTree.

- Class TPaveClass updated to reflect the changes in TClassTree.

- Important changes in class TClassTree.
  See TClassTree header for a complete documentation.
  The new version of this class is more poweful and simple to use.
  All kinds of class dependencies can be drawn.
  Note in particular the following interesting new feature:
    A TClassTree object may be saved in a Root file.
    ================================================
      This object can be processed later by a Root program that ignores
      the original classes. This means that you cans send
      the class structure of an application to a colleague who does not have
      your classes.
      Example:
         TFile f("myClasses.root","recreate")
         TClassTree *ct = new TClassTree("ct","ATLF*")
         ct->Write();
      You can send at this point the file myClass.root to a colleague who can
      run the following Root basic session
         TFile f("myClass.root"); //connect the file
         tt.ls();                 //to list all classes and titles
         tt.Draw("ATLFDisplay")   //show class ATLFDisplay with all its dependencies
      At this point, one has still access to all the classes present
      in the original session and select any combination of these classes
      to be displayed.

//
// 12/08/1999  18.51.40  by  Rene Brun
//
- Comment one statement in TMethod::FindDataMember.
   it was making troubles in BuildRealData for classes with protected
   default constructors.

- Fix a problem in TFormula::EValPar (thanks Gene Van Buren).
  The same variable name (i) is used to loop over the operations,
  and also within the loop as another loop variable over
  defined strings and variables.

- Import the following changes by Peter Malzacher:
    Bug Fix for TLorentzVector member function CosTheta (PR#461)
            reported by Marios Kagarlis

    TVector3::Eta() (CDF mc-bugs PR#264) (guard against Pt==0)
            reported by Pasha Murat

    New Getter  GetXYZT(Double_t/Float_t *carray) and
                GetXYZ(Double_t/Float_t *carray)
            in TLorentzVector and TVector3
            requested by Pasha

    Changed two global functions in TVector2 to static memberfunctions
            to avoid nameclashes with CDF SW
            requested by Pasha

//
// 09/08/1999  10.02.02  by  Rene Brun
//
- Merge with Fons's version.

- import new CINT 5.14.13 from Masa
//
// 09/08/1999  10.00.22  by  Masaharu Goto
//
* 5.14.9 4 Jul 1999
* -   , G__VARIABLEFPOS, linenum added
* 1138, #pragma link, undefined symbol warning
* -   , disable 1083, class A{const char *str; const int N=5;};
* 1139, G__type2string, invalid tagnum protection
* -   , 1137 fixed
* G__PTR2MEMFUNC, t195.cxx, pointer to member function support
* -   , G__reloadfile() improved
* -   , -p option, -I$CINTSYSDIR/stl added
* -   , -p option  'vector' loading bug fix
*
* 5.14.10 4 Jul 1999
* 1140, virtual base class instantiation in ctor, risk1
* 1141, typedef long long int __quad_t; bug fix, risk2
*
* 5.14.11 30 Jul 1999
* 1142, G__optimizemode(), G__getoptimizemode() added, risk0
* 1143, lib/stream 'extern istream cin;' wrong error detection fixed, risk2
* -   , istream::seekg activated for Visual C++, risk1
* 1144, lib/longlong , G__longlong <=> long conversion changed, risk2
* 1145, Warning message for in function typedef, risk0
* 1146, error message improvement, risk0
* 1147, enum {a,b,c}; string x[c]; error bug fix, risk1
* 1148, 1086, G__check_semicolumn_after_classdef() bug fix ')' missing, risk4
* 1149, int npar 10; warning message, risk0
* 1150, cout<<setw(5) name<<endl; warning message, risk0
* 1151, const int N=p->x; eliminate error message, dynconst flag set, risk2
* 1152, class A{ Trk* trk() const; }; bug fix, risk0
* 1153, class A{long long a;}; bug fix, not perfect , risk2
* 1154, new A(v,w,x) error detection for interpreted class, risk2
* 1155, G__asm_loopcompile, G__RECOVER_ASMENV changed, risk3
*-1156, G__init_env() in G__clearfilebusy() didn't solve Ctrl-C problem
* 1157, A* p=new A(px,new int,new B); bug fix in new_operator, risk4
*
* 5.14.12 1 Aug 1999
* 1158, struct without dtor with class object member with dtor, bug fix, risk3
*-1159, template member function call in func.c, overloading problem
* 1160, template member function call in ifunc.c , risk4
* -   , bytecode compiler reset, warning message improved, risk0
* G__TYPEDEFFPOS, filename and linenumber for typedef, risk0
* 1161, class bool { ... }; if(bool) {}  evaluated in G__iosrdstate(), risk2
* -   , 1122 STAR dictionary problem solved, Error -> Warning, risk0
* 1162, error message for dictionary generation problem, risk0
*
* 5.14.13 8 Aug 1999
* 1163, Add local variable dictionary in ERTTI API, risk0
* 1164, Local variable table, bytecode compiler workaround, risk0//
//
// 08/08/1999  22.28.09  by  Fons Rademakers
//
- Makefiles: made all Makefile $ROOTSYS independent. You can now
  build the complete system in a tree independent of $ROOTSYS,
  "gmake install" will copy the new headers, binaries and libraries
  to $ROOTSYS. Changes need for clean build of sources coming from cvs.

- TProof: fix bug in reparenting of resulting histogram. Use
  h->SetDirectory(gDirectory) instead of gDirectory->AppendPad(h).

- TApplication: don't check for TrueType fonts when application has
  name "proofserv".
//
// 07/08/1999  18.44.38  by  Fons Rademakers
//
- rootcint: protection against fp=0 and make sure that template arguments
  are converted to a legal string in WriteTmpltExtras.

- TDatbasePDG: removed the Cleaner class since it caused problems with the
  new HP aCC. Anyway it was not necessary since memory is always freed when
  a program terminates. Some general cleanup and comments added.

- TRint: notify CINT in case of ctrl-c so macro's can now safely be interrupted.

- TH1: use Error() instead of Printf() in a number places. Error() calls can
  be trapped and send to an error logger while Printf() calls can not.

- TGSlider, TGDoubleSlider: now also execute associated command strings.

- TBuffer: removed two redundant statements.

- TROOT: print warning instead of program abort when more than one TROOT
  object is being created.
//
// 06/08/1999  18.53.39  by  Rene Brun
//
- new class TPaveClass used by the new version of TClassTree.
  TPaveClass is a special TPaveLabel with additional functions
  to set interactively the options for the supported class.
  Decks cint_gpad, gpad_LinkDef, makedepend and makemacros modified.

- Important additions and changes in class TClassTree.
  The class structure has been modified. Some of the arrays previously
  defined in TClassTree::DrawTree are now data members. These members
  are used by the new functions TClassTree::FindClassesUsedBy and by
  TClassTree:FindClassesUsing. The class uses TPaveClass instead
  of TPaveLabel. By clicking on a TPaveClass, one can now select
  the following new options:
     -Show the list of classes used by this class.
     -Show the list of classes referencing this class

- Update documentation for TFormula::DefinedVariable & DefinedString.

- Modify TTree::MakeClass to generate one additional statement in case
  of a TChain.

- in TF1::Paint always call SetLimits for the axis. Previous version called
  TAxis::SetLimits only when the function limits were different from the
  pad limits. This fixes a problem when unzomming a pad containing functions.
  (Thanks Philippe Canal).

- protection added in TRootBrowser::IconBoxAction.

- protection in rootcint (thanks Philippe Canal).
  Linux/KCC actually core dumps in fclose(fp) if fp is null
  (which happens if the directory in which the dictionnary file
   should be created does not exist).

// 03/08/1999  12.49.50  by  Rene Brun
//
- Some changes in TTreeViewer.
  The button CPad has been deleted. The graphics output goes automatically
  to the latest selected pad.
  The Hist button was drawn twice.
  ToolTips have been added to all buttons.
  Thanks Philippe Canal for several remarks.

- In TPad::HightLight call gROOT->SetSelectedPad(this).
  This info is used by the new version of TTreeViewer::ExecuteDraw.

//
// 02/08/1999  12.14.56  by  Rene Brun
//
- Integrate changes in the THREAD package by Joern Adamczewski, Hans Essel, Marc Hemberger
  See their report below.
  A few changes had to be made to their changes relative to version 2.21.
  macro cint_thread modify to automatically select the THREAD and POSIX flags.
  install_linkdef modified to generate THREAD_LinkDef.h

- Make-macros modified to take into account the THREAD package.
  if the environment variable THREAD is set, the makefile will generate
  the Root libraries with the option THREAD.

- A few changes in TMinuit (thanks Christian Lacunza).
  --prototype of TMinuit::mnpout changed to:
     void   mnpout(Int_t iuext, TString &chnam, Double_t &val, Double_t &err, Double_t &xlolim, Double_t &xuplim, Int_t &iuint);
  --the following functions have been added:
     Int_t TMinuit::GetNumFixedPars() // returns the number of currently fixed parameters
     Int_t TMinuit::GetNumFreePars()  // returns the number of currently free parameters
     Int_t TMinuit::GetNumPars()      // returns the total number of parameters that have been defined.
  The changes in mnpout have implied changes in TH1::Fit and TGraph::Fit.

- Remove some obsolete comments from TBuffer::ReadBuf and TBuffer::WriteBuf.
  Thanks George Heintzelman for notifying.

- Update documentation of TStyle::SetOptStat.

- Introduce a few changes from Philippe Canal in TabCom.
  strstream on some plarform does not terminate the result of strstream::str() properly.

- Minor changes in TH1::PaintInit.

- TH1::Integral() calls TH1::GetStats and does not use the under/overflow.
  As a consequence, the information printed about the integral in the "stats"
  does not include under/overflows. It reports only about the integral of
  the bin contents for bins in the current axis range.

- new function TH1::Project3D
   TH1 *TH1::Project3D(Option_t *option)
     Project a 3-d histogram into 1 or 2-d histograms depending on the
     option parameter
     option may contain a combination of the characters x,y,z,e
     option = "x" return the x projection into a TH1D histogram
     option = "y" return the y projection into a TH1D histogram
     option = "z" return the z projection into a TH1D histogram
     option = "xy" return the x versus y projection into a TH2D histogram
     option = "yx" return the y versus x projection into a TH2D histogram
     option = "xz" return the x versus z projection into a TH2D histogram
     option = "zx" return the z versus x projection into a TH2D histogram
     option = "yz" return the y versus z projection into a TH2D histogram
     option = "zy" return the z versus y projection into a TH2D histogram
     if option contains the string "e", errors are computed
     The projection is made for the selected bins only

- Thanks to Guy Barrand for reporting an error in TBranchObject::GetEntry.
  The branch address was incorrectlky set in the piece of code attempting
  to define a branch address when the user had not set a branch address.

- Change the logic in TLeafObject::FillBasket and TLeafObject::ReadBasket
  to handle the special case of null pointers to TObject*. (thanks Philippe Canal).
  Instead of setting the kZombie bit for the temporary dummy object, the new code
    - set the kInvalidObject bit
    - set the fUniqueID to the special value 123456789.

- Change in TChain::Add in case the referenced Tree is a Root file/subdirectory.
  (thanks Philippe Canal).

//
// 02/08/1999  12.13.02  by  Joern Adamczewski, Hans Essel, Marc Hemberger
//
As already mentioned we activated the TThread classes provided
by root.

-----------------------------------------------
A detailed report can be found on our Go4 site:
http://www-wnt.gsi.de/go4/threads/tthread.htm
-----------------------------------------------

We tested several modes:

1. TThread constructor is called by root interpreter.
Works with thread functions defined in a shared library or
defined within a root macro or within the calling macro.

2. TThread constructor is called by a compiled function.
Thread functions were not called properly. Therefore we had
to change TThread. The TThread object still
could not be identified by name. Therefore we added
two new TThread constructors which allow to specify
the TThread name as string argument.

3. Thread synchronization using TCondition Objects works..
However, we had to fix definition of ERRNO() in PosixThreadInc.h
to get proper return values from TimedWait.

4. Access to global objects (histograms, flags) in threads
(created before thread creation).
Works. If several threads are writing this should be
locked explicitly via mutex.

5. Creating Objects and allocation of memory in threads.
Must be locked explicitly via mutex. This can be critical
because one not always 'sees' when objects are created.

6. Access to TCanvas, TPad and other graphics from threads.
Does not work, even if access is locked explicitly.
It seems that the errors occur in the X event handling
outside root. Moving the mouse accelerates the crashes considerably.

We will feed back the modified thread classes working as described.
We don't see a chance for us to fix problems 5,6.


 Go4 developer team @ GSI

Joern Adamczewski, Hans Essel, Marc Hemberger

//
// 30/07/1999  15.50.19  by  Fons Rademakers
//
- Additions to the Make system: there is now a top level ./configure
  (nothing fancy yet) and a Makefile. To build ROOT do:

     ./configure
     gmake depend
     gmake <architecture>  or  gmake
     gmake install

- CVS repository created. The latest sources can now be retrieved from
  our anonymous CVS repository. However, it is still needed that you
  start with a valid binary distribution, to where $ROOTSYS must point
  (the binary version only has to be installed once). Once this is set
  up, you can import the sources from CVS as follows:

     cd $ROOTSYS
     mkdir cvs
     cd cvs
     cvs -d :pserver:cvs@pcroot.cern.ch:/user/cvs login
     passwd: cvs
     cvs -z 9 -d :pserver:cvs@pcroot.cern.ch:/user/cvs co root

  To keep this repository up to date just do:

     cd $ROOTSYS/cvs/root
     cvs -z 9 update
//


ROOT page - Class index - Top of the page

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.