# 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
    //