# ROOT Version 2.24 Release Notes

    //________________________________________________________________________
    //
    //::>          VERSION  2.24/05   16/05/2000 16.07.27
    //
    //
    // 16/05/2000  16.03.14  by  Rene Brun
    //
    - This version should be the last version maintained with CMZ.
      Next version will be maintained by CVS.

    - Modify TF1::IntegralMultiple. The maximum number of points maxpts
      has been increased to improve the result. Thanks Regis Terrier.
    //
    // 16/05/2000  12.04.12  by  Fons Rademakers
    //
    - THtml: fix in way pathnames of source files are found. If pathname
      contains a path (i.e. / (or  on win32)) then after prepending a
      source dir prefix this file is looked for. If not found the path
      is stripped off and the source search path is used (old behaviour).
    //
    // 16/05/2000  11.58.00  by  Masaharu Goto
    //
    * 5.14.38 5 May 2000
    *-1306, ctor call for class object as static data member, t377.cxx, t380.cxx
    * 1307, global namespace, using directive and function call, t382.h/cxx
    * 1308, pointer to reference conversion bug fix, t383.cxx
    * 1309, #pragma link C++ function A::B(); t384.h
    * 1310, f(int (**)()); t385.h
    * 1311, namespace{class{enum{}}} bug fix, t386.h
    * 1312, N::A a; N::f(a); f(a); 3.4.2, t387.cxx, review needed
    * 1313, #pragma link C++ function A::B(); with function template, t384.h
    * 1314, Assume CINTSYSDIR from GetModuleFileName(),Win32
    //
    // 15/05/2000  23.20.31  by  Rene Brun
    //
    - Add a new parameter nentries to TChain::Add
          void TChain::Add(const char *name, Int_t nentries=-1)
      if nentries < 0, the file is connected and the tree header read in memory
      to get the number of entries.
      if (nentries >= 0, the file is not connected, nentries is assumed to be
      the number of entries in the file. In this case, no check is made that
      the file exists and the Tree existing in the file. This second mode
      is interesting in case the number of entries in the file is already stored
      in a run data base for example.

    - Add a new branch constructor to TTree:
         Int_t Branch(TList *list, Int_t bufsize=32000);
       This new function creates one branch for each element in the list.
       Two cases are supported:
          list[i] is a TObject*: a TBranchObject is created with a branch name
                                 being the name of the object.
          list[i] is a TClonesArray*: A TBranchClones is created.
          if list[i]->TestBit(TClonesArray::kNoSplit) is 1, the TClonesArray
          is not split.
          if list[i]->TestBit(TClonesArray::kForgetBits) is 1 and the TClonesArray
          is split, then no branches are created for the fBits and fUniqueID
          of the TObject part of the class referenced by the TClonesArray.
       The function returns the total number of branches created.

    - Add a new member function in class TObjLink.
       TObject **GetObjectRef()
       The function returns the address of the object referenced by TObjLink.
       This new function was necessary for the implementation of the new TTree::Branch
       constructor described above.

    - Modify TBranchClones constructor to add a new parameter splitlevel.
      Modify TTree::Branch for TClonesArray to not create branches for the TObject
      part (fBits and fUniqueID) if the splitlevel is > 1.

    - Add new enum list in TClonesArray.h. The following options are defined:
       enum {
          kForgetBits    = BIT(0),    // Do not create branches for fBits, fUniqueID
          kNoSplit       = BIT(1)     // array not split by TTree::Branch
       };

    - A few changes from Damir Buskulic and Jiri Masik for Linuxppc in
      rootd, root daemon, proofd and Makefile.linuxdeb2.

    - Extend kMAXFOUND from 50 to 200 in TFormula.
      The previous value of 50 was a bit short when TFormula is used by TTreeFormula
      and many cuts are defined.

    - Modify TTreePlayer::MakeClass to change the name of the variable for the loop
      index from j to jentry.

    - Merge with Fons and Valery's versions
    //
    // 13/05/2000  18.56.36  by  Rene Brun
    //
    - Mods in TTreePlayer::MakeCode when generating the pointer name in case
      of a TBranchObject.
    //
    // 11/05/2000  16.11.27  by  Fons Rademakers
    //
    - TBranch: fEntryBuffer was not initialized.

    - vvector: corrected a test case.
    //
    // 11/05/2000  07.20.41  by  Rene Brun
    //
    - protection added in TBranchClones constructor in case the Tree is created
      in memory (no file open) (thanks Gene Van Buren).

    - Merge with Valery's version of May10.

    - Add two fixes reported by Masa in CINT_Infunc.

    - Add minor changes reported by Damir Buskiluc when compiling with gcc 2.05
      under ppcLinux.

    - fix some problems with strings (backslask escaping ") in some strings
      in tutorials Ifit and Shared.
    //
    // 09/05/2000  19.40.35  by  Fons Rademakers
    //
    - tutorials/rootalias.C: use gSystem->GetName() to distinguish
      between unix and win32 (instead of cmz +IF conditionals).
    //
    // 08/05/2000  19.40.35  by  Fons Rademakers
    //
    - TGMimeTypes: fixed win32 case.

    - TFormula: introduced #pragma for win32 case.

    - TTUBE, TTUBS: #ifdef's cleaned up.
    //
    // 07/05/2000  17.11.56  by  Fons Rademakers
    //
    - New abstract class TInspectorImp. This interface class is used
      via the TGuiFactories to create and object inspector window. Currently
      this is only used for the Win32 implementation (the X11 version uses
      a normal TCanvas). The introduction was needed to remove the last
      Win32 graphics dependency from TWinNTSystem (to be able to build
      libCore.dll seperately from libWin32.dll). For the introduction of this
      class changes were made in: TObject, TSystem, TWinNTSystem, TGuiFactory,
      and TWin32GuiFactory.

    - rootcint: fix for Win32.

    - TGToolTip: corrected comments.

    //________________________________________________________________________
    //
    //::>          VERSION  2.24/04   05/05/2000 14.08.29
    //
    //
    // 05/05/2000  12.58.00  by  Masaharu Goto
    //
    * 5.14.36 9 Apr 2000
    * -   , minor fix in VC++ and BC++ setup
    * -   , turned on G__CONSTNESSFLAG
    * 1293, bug fix to 1290, risk3, t364.cxx
    * 1294, SetGlobalcomp() changed by Philippe Canal
    * -   , G__STRUCTPVAR -> divided as 1.2 due to size reason
    * -   , ifunc.c C++ comment error
    * 1295, G__free_friendtag() problem only with rootcint,,
    * 1296, static member in nested class, t370.cxx, risk3
    * 1297, nested ClassDef,
    * 1298, ImplFileLine support
    *
    * 5.14.37 29 Apr 2000
    * 1299, overload matching for pointer to function, t373.cxx
    * 1300, Check $LINES, $COLUMNS for G__more_pause(), risk1
    * 1301, Bug fix for PHIL0, null fp, t372.h, risk3
    * -   , DataMbr.h/cxx, errno -> errnum fix
    * 1302, 1290 bug fix, infinit loop, t376.cxx
    * 1303, bug fix from Philippe Canal,
    * 1304, workaround for Philippe's problem, bad3.cxx, t377.cxx
    * 1305, Win32, ifstream::open(), t375.cxx, bug fix
    //
    // 05/05/2000  09.42.44  by  Rene Brun
    //
    - Implement support for operator "*" in TCut. File Tree_LinkDef modified.
      Examples of use:
         Root > TCut c1 = "x<1"
         Root > TCut c2 = "y<0"
         Root > TCut c3 = c1&&c2
         Root > ntuple.Draw("x", c1)
         Root > ntuple.Draw("x", c1||"x>0")
         Root > ntuple.Draw("x", c1&&c2)
         Root > ntuple.Draw("x", "(x+y)"*(c1&&c2))

    //________________________________________________________________________
    //
    //::>          VERSION  2.24/03   04/05/2000 08.40.02
    //
    //
    // 04/05/2000  8.48.59  by  Rene Brun
    //
    - minor typos fixed.

    - Rename global functions H() to R__H().
    //
    // 03/05/2000  08.13.47  by  Rene Brun
    //
    - Import latest version from Fons and implement a few changes from Philippe
    in BASE_System and CINT_loadfile.

    //
    // 03/05/2000  01.35.47  by  Philippe Canal
    //

    - Addition of a new option for TSystem::CompileMacro and Change in
      Semantic of the '+' and '++' options for .L, .x and .X.

      Both .L MyFunc.C++ and .L MyFunc.C+ now keep the shared library at the
      end of the ROOT session.
      If the shared library already exist, .L MyFunc.C+ will only recompile it
      if the macro file is newer than the shared library.  However it does not
      detect whether any of the files included by the macro has been changed
      more recently than the shared library.

      .L MyFunc.C++ always recompiles the shared library.

      TSystem::CompileMacro(const char *filename, Option_t * opt)
      The second argument can now be any combination of the letter 'k' and 'f'
      with the following meaning:

         k : keep the shared library after the session end.
         f : force recompilation.
    //
    // 02/05/2000  19.15.59  by  Rene Brun
    //
    - Merge with latest versions from Philippe and valery.
    //
    // 02/05/2000  19.01.23  by  Philippe Canal
    //
    - The macro ClassDef and ClassImp have been upgraded to be able to handle
      classes inside namespaces and to handle nested classes (classes defined
      inside other classes).

      In order to use this upgrade, you just have to enclose your class inside
      a namespace and to make sure that the ClassImp macro is also used inside
      the same namespace:

      #include "TObject.h"
      namespace MyProject {
         class MyClass : public TObject {
         public:
            MyClass();
            int Loop();
            ClassDef( MyClass, 1 ) // This is a class inside a namespace
         };
      };

      And in the implementation file

      #include "MyClass.h"

      namespace MyProject {
        ClassImp( MyClass )

        MyClass::MyClass() {
          // Body of the constructor
        }

        int MyClass::Loop() {
          // Body of the Loop
        }
      };

      Once this is done, when refering in root to this class using a string
      (for example to define a TClonesArrays, a Branch in a Tree, or on the
      root prompt), you have to always use the fully qualified name.  There
      isn't yet an equivalent to 'using namespace MyProject;' for ROOT.
      For example to define a TClonesArray of MyClass objects:

            TClonesArray * o = new TClonesArray("MyProject::MyClass");

      IMPORTANT WARNING:

      This change is only transparent for classes for which a dictionary is
      produced!  If you need to use a class with ClassDef and ClassImp but do
      NOT want to generate a dictionary file for it, you HAVE TO use the macro
      ClassImp2 instead of ClassImp! In our example above you would write in
      the implementation file:

      #include "MyClass.h"
      namespace MyProject {
        ClassImp2(MyProject, MyClass )

        MyClass::MyClass() {
          // Body of the constructor
        }

        int MyClass::Loop() {
          // Body of the Loop
        }
      };

      If your classes do not belong to a namespace just omit the first
      argument:

      #include "MyClass_not_in_namespace.h"
      ClassImp2(,MyClass_not_in_namespace)
      MyClass_not_in_namespace::MyClass_not_in_namespace() {
        // Body of the constructor
      }

      int MyClass_not_in_namespace::Loop() {
        // Body of the Loop
      }
      IMPORTANT WARNING 2:

      ClassDef and ClassImp for namespaces and nested classes is
      NOT yet fully implemented for templated classes.
    //
    // 02/05/2000  08.40.13  by  Rene Brun
    //
    - Add a new static function to class TH1.
          static void AddDirectory(Bool_t add=kTRUE)
      By default (fAddDirectory = kTRUE), histograms are automatically added
      to the list of objects in memory.
      Note that an histogram can be removed from its support directory
      by calling h->SetDirectory(0) or h->SetDirectory(dir) to add it
      to the list of objects in the directory dir.

    //
    // 01/05/2000  22.08.01  by  Rene Brun
    //
    - Activate option DATE in TStyle:
      New data members, fDateX, fDateY and fAttDate.
      New member functions SetDateX, SetDateY, GetAttDate.
        void TStyle::SetOptDate(Int_t mode)
         if mode is non null, the current date/time will be printed in the canvas.
         The position of the date string can be controlled by:
            mode = 1 (default) date is printed in the bottom/left corner.
            mode = 2 date is printed in the bottom/right corner.
            mode = 3 date is printed in the top/right corner.
          The date position can also be controlled by:
            gStyle->SetDateX(x);  x in NDC
            gStyle->SetDateY(y);  y in NDC

          The date text attributes can be changed with:
            gStyle->GetAttDate()->SetTextFont(font=62);
            gStyle->GetAttDate()->SetTextSize(size=0.025);
            gStyle->GetAttDate()->SetTextAngle(angle=0);
            gStyle->GetAttDate()->SetTextAlign(align=11);
            gStyle->GetAttDate()->SetTextColor(color=1);

          The current date attributes can be obtained via:
            gStyle->GetAttDate()->GetTextxxxx();
          When the date option is active, a text object is created when the pad
          paint its list of primitives. The text object is named "DATE".
          The DATE attributes can also be edited interactively (position
           and attributes) via the normal context menu.

    //
    // 30/04/2000  10.16.21  by  Rene Brun
    //
    - Change name of variable errno to errn in DataMbr.h and in
      G__DataMemberInfo::ValidArrayIndex. errno is a reserved keyword.
      Problem was apparent with VC++ and AIX/xlC.

    - Comment most ClassDef & ClassImp in WIN32 directory. A side-effect
      of the changes in the ClassDef/ClassImp macros forces the dictionary
      for all classes including these macros.
    //
    // 29/04/2000  12.37.58  by  Rene Brun
    //
    - Add new member functions in TGeometry and TNode to transform master
      to local coordinate system(thanks to Robert Hatcher).
      TGeometry/TNode provided Local2Master coordinate transformations, but not
      the reverse.  In case of some data of object positions in global coordinates
      but trying to build a truly hierarchical structure (thus the need for
      "placement" relative to local coordinates) this was an impediment.
         void TGeometry::Master2Local(Double_t *master, Double_t *local);
         void TGeometry::Master2Local(Float_t *master, Float_t *local);
         void TNode::Master2Local(Double_t *master, Double_t *local);
         void TNode::Master2Local(Float_t *master, Float_t *local);

    - Add fix from Masa in CINT_ifunc.c to appear in CINT 5.14.37.
      This fix a problem with function overloading. the same code can now
      be used with the compiler or the interpreter when calling TF1 functions.

    - Modify test program stress to take advantage of the changes in CINT_ifunc.

    - Modify h2root to support boolean data types from Hbook. Instead of using
      unsigned integers, the new code uses unsigned chars.

    - Modify print format in TTree::Show in case of a TLeafB. print up
      to 10 variables on the same line.

    //
    // 28/04/2000  18.17.48  by  Rene Brun
    //
    - Remove a limitation in THistPainter::PaintAxis preventing to set
      a negative number of divisions on the Y axis. A negative number of divisions
      may be specified to force a precise number of primary divisions on an axis.

    - Implement support for regular expressions in TDirectory::Delete.
      One can now do gDirectory->Delete("foo*")

    - Modify TROOT::ls to call TDirectory::ls

    - in TCutG constructor, remove a possible TCutG with the same name
      in the list of special objects. stress7 can now be executed more than once.

    - Add compiler option -Wp,-H10000 to the list of CINT compiler options
      for HP-UC CC compiler to prevent a limitation of CC when compiling CINT_var.

    - Change tolerance in stress/stress16 from 10 bytes to 20 bytes.
    //
    // 28/04/2000  16.58.41  by  Fons Rademakers
    //
    - TGTextEntry: fix in SetFont() to correctly modify the graphics
      contexts. Before SetFont() changed the default GC used by many
      widgets.

    - guitest.cxx: show example for TGTextEntry::SetFont.

    - TROOT: use preprocessor symbols __DATE__ and __TIME__ to get
      the date/time of compilation instead of CMZ symbols in preparation
      of move to CVS.
    //
    // 27/04/2000  15.54.53  by  Rene Brun
    //
    - Modify test program stress/stress1 to be able to run it with CINT.

    - Modify code generated by TTreePlayer::MakeClass to generate special code
      for TChains. Also generate new member function Cut.

    - Changes in TH2, TH3, TProfile2D include files to avoid warning messages
      under AIX and HP-UX.

    - Modify CINT function IFUNC to avoid a compiler problkem under AIX.
      the C function IFUNC contained a C++ style comment.

    - Merge with Fons and Philippe's versions.
    //
    // 26/04/2000  12.15.54  by  Fons Rademakers
    //
    - TObjArray: IsEmpty() correctly returns kTRUE in case TObjArray
      is empty (idem for TClonesArray).

    - rootcint: mods by Philippe for support of namespaces.

    - Rtypes.h: mods in the ClassDef and ClassImp macros for namespace
      support.
    //
    // 25/04/2000  17.56.34  by  Rene Brun
    //
    - Merge with Philippe Canal's version.

    - Implement support for branches with names ending with "."
      in TTree::MakeClass.
    //
    // 25/04/2000  15.13.17  by  Philippe Canal
    //

      Phillippe implemented a way for the user to fill a tree directly from a
      TBuffer or TMessage;
      This only work for branches that contain a non-split object.
      Using this features makes the files non-readable by previous version of
      root (2.24/02 and below).

      To use this features, you need to have something like:

            TBuffer * pointerToMyBuffer;
            .....
            myBranch->SetBufferAddress( pointerToMyBuffer );

      And when myTree->Fill() is called, the data is copied from MyBuffer.
      The amount of data copied is determined either by the current offset of
      the buffer if it is not null or by the maximum size of the buffer.

      Here are three valid usages examples

      1.      TBuffer * buf = new TBuffer(TBuffer::kWrite, bufsize);
              branch->SetBufferAddress(buf);

            buf->Reset();
            buf->SetWriteMode();
            event->Streamer(*buf);
            buf->SetReadMode();

            tree->Fill();

      2.      TBuffer * buf = new TBuffer(TBuffer::kWrite, bufsize);
              branch->SetBufferAddress(buf);

            char * data;
            int nbyte = Copy_Data_From_Somewhere(data);
            buf->SetBuffer(data,nbytes);

            tree->Fill();

      3.    TMessage *mess;
            Int_t messlen;

            do {
               messlen = s->Recv(mess);
            } while ( messlen == 0 );

            branch->SetBufferAddress(mess);

            tree->Fill()

      The extra information needed to correctly read the file created using this
      features is stored at the end of each basket (using this features) just
      after the array containing the entries offset within the basket.

    //
    // 23/04/2000  22.30.47  by  Rene Brun
    //
    - Fix a problem in TBranchObject::SetAddress in case of a branchobject
      in split mode and the branch name is of the forme "name." and one of
      the sub branches members is a TClonesArray. The TClonesArray branch name
      was not correctly encoded. Solution was to use the same logic already
      used for other data member types.
      (thanks Christian Holm Christensen for reporting this problem)

    - Sasha Vanyashin has reduced further the byte swapping overhead on linux
      by introducing asm routines bswapcpy32 and bswapcpy16 (similar to memcpy)
      in TBuffer.
    //
    // 21/04/2000  21.54.54  by  Rene Brun
    //
    - Fix a bug in TH2::FillRandom and TH3FillRandom. These functions were
      correct only in the case where the x range and the y range were identical.
      (thanks Laurent APHECETCHE).

    - Implement support for histogram min/max in TLego::SurfaceFunction.
      With this change, one can now do TH1::Draw("surf") on a histogram
      where a min/max have been specified.

    //
    // 19/04/2000  18.32.19  by  Fons Rademakers
    //
    - TPad: fix in Print() so a pad can be saved to gif, before
      the complete canvas was always saved.

    //
    // 19/04/2000  11.24.25  by  Rene Brun
    //
    - In TBranchClones::GetEntry, add a statement to clear the TClonesArray
      before reading a new event. In case of split mode, the number of entries
      in the array was not updated (thanks Thorsten Glebe for reporting).

    - Merge with Valery's version.
       This includes a protection in the THtml class and a new version
       of the STAR classes.
    //
    // 18/04/2000  17.45.49  by  Fons Rademakers
    //
    - Changes in several files related to the imminent move to CVS.
    //
    // 18/04/2000  10.36.20  by  Rene Brun
    //
    - Activate option to write a TClonesArray in non-split mode
      in TTree::Branch (TClonesArray flavour).

    - Add a new tutorials tcl.C. This tutorial illustrate how to use a
      TClonesArray in various mode: split, no-split.
      The tutorials also shows how to run with the interpreter or
      the script compiler.
    //
    // 16/04/2000  23.08.00  by  Rene Brun
    //
    - Optimize code in TBasket, TBranch and TBuffer. Several functions declared
      non virtual.

    - In  TRootBrowser::IconBoxAction Chdir has to been called after
      obj->Browse because Browse assume that the current directory is the
      one where to find the object while Chdir actually change the directory.
      (from Philippe Canal).

    - New class TProfile2D (2-dim profile histograms).
      Same functionality as class TProfile for 1-dim histograms.

    - Optimize TArrayC,S,I,F,L,D replacing implicit loop to set array
      elements to 0 by a call to memset.
    //
    // 15/04/2000  19.07.24  by  Rene Brun
    //
    - IMPORTANT ADDITION TO THE HISTOGRAMING PACKAGE
      ==============================================
      Two new global functions have been added to TH1.h
          TH1 *R__H(Int_t hid);
          TH1 *R__H(const char *hname);
       The first function R__H returns a pointer to a histogram with a name
       corresponding to the encoding of "h" and the integer hid.
       For example, if the histogram with name "h23" exists in the current
       directory (either memory or disk), R__H(23) returns a pointer to
       this histogram. if hid is a negative integer (eg -23), R__H(-23) returns
       a pointer to the histogram with name "h_23".
       The second function H returns a pointer to the histogram with name hname.
       eg: R__H("h23").
       The main advantage of these two functions is that they can be called
       anywhere in the user's code without using global pointers for each
       histogram.
       These two functions provide also an easier access to histograms converted
       from Hbook files.
       These functions have however a severe performance penalty.
       Using R__H(10)->Fill(x) is on average 6 times slower than h->Fill(x) !
       R__H(const char *hname) finds the address of the histogram hname in
       the hashlist of objects in memory corresponding to the current file.
       If no object is found in memory, hname is searched in the list of objects
       in the current directory on disk.
       R__H(Int_t hid) converts hid into hname and then proceeds like R__H(const char *hname).

    //
    // 15/04/2000  11.58.37  by  Philippe Canal
    //
    - Some files similar to those produced by h2root, can have simple
      type AND branches that contain more than one leaf and have no reason to
      contain a leaf with the same name.   Those files currently core dumps the
      TChain::Merge mechanism because the fill address of the new tree is not reset
      properly after a change of file.
    //
    // 14/04/2000  12.24.20  by  Rene Brun
    //
    - Rename functions in TPaveStats;
        GetFormatFit  -----> GetFitFormat
        GetFormatStat -----> GetStatFormat
        SetFormatFit  -----> SetFitFormat
        SetFormatStat -----> SetStatFormat
        The TPaveStats fFitFormat and fStatFormat are now initialized
        from the TStyle permanent parameters.

    - New functions in TStyle:
           GetFitFormat, GetStatFormat, SetFitFormat, SetStatFormat

    - Introduce a new function in TProfile:
        TH1D *TProfile::ProjectionX(const char* name="_px", const char *option="e")

        Similarly to TH2::ProjectionX, this new function fills the profile projection
        along X. It creates a TH1D histogram. if the option "e" is specified
        the histogram has the profile error bars.

    - Add new static functions in TVirtualFitter:
        TVirtualFitter::SetMaxIterations(Int_t maxiter=5000);
        TVirtualFitter::SetPrecision(Double_t prec=1e-6);
        TVirtualFitter::GetMaxIterations();
        TVirtualFitter::GetPrecision();
        The SetPrecision function can be used to set a fit relative_precision.
        The default value for relative_precision is 1e-6.

    - TH1::Fit and TGraph::Fit have been modified to take advantage of
      the new TVirtualFitter functions. Because TMinuit precision is an absolute
      precision, an estimation of the final sum of squares of residuals (sumw2)
      is computed in these two functions. The precision requested from TMinuit
      is sumw2*relative_precision. The new algorithm should give in general
      a better fit precision.

    - Minor change in TBtInnerNode constructor to bypass a compiler bug
      with gcc2.95 (thanks Matthew D. Langston).
    //
    // 14/04/2000  11.48.54  by  Fons Rademakers
    //
    TExMap: implemented Streamer().
    //
    // 13/04/2000  19.19.49  by  Rene Brun
    //
    - Modify AA_ARCHS to add one line for solarisgcc.

    - Modify TH1::Copy to set the TAxis parents.

    - Add missing file basic.dat in $ROOTSYS/tutorials.

    - Modify tutorial exec1.C. logic was broken since the changes in gPad.

    - In RConfig.h, define __i486__ only if not already defined. This is to avoid
      a long list of warnings on Debian systems.

    - Modify the comments in class TButton example. add missing backslash
      in front of ".

    - Improvement in TTreePlayer::Scan (thanks Jiri Masik).
      When one scans a tree and interrupts it via q key and <CR>,
      the q is read by getchar but the <CR> remains unread in the stream.
      Any subsequent Scan scrolls two screens without prompting as the new
      getchar is reading the last <CR>.

    //________________________________________________________________________
    //
    //::>          VERSION  2.24/02   07/04/2000 08.52.32
    //
    //
    // 07/04/2000  08.45.56  by  Rene Brun
    //
    - Merge with Fons and Valery's latest versions.
    //
    // 06/04/2000  16.06.22  by  Fons Rademakers
    //
    - TDatime: new ctor taking a SQL compatible time string.

    - TEnv: made most member functions virtual to allow overriding.
      Also a fix in GetValue() to correctly return negative integers.

    - TStopWatch: made the new Counter() an const inline function.

    - TRootEmbeddedCanvas: extension to allow the embedding of a custom,
      TCanvas derived, canvas. See ctor for extensive example.

    - rootcint: small cleanup of Philippe's code.

    - TRint: added a noLogo arg to ctor. Setting it to kTRUE will not
      print the standard logo. This allows for custom a logo in a TRint
      derived class.

    - TGLBContainer: InsertEntry() now correctly inserts a new entry at the
      head of the list if the parameter afterID is set to -1. Fix by
      Reiner Rohlfs.

    - TUnixSystem: in dtor reset signals to handlers that were active
      before the TUnixSystem object was created. This was needed in an
      app that also uses Oracle OCI. Fix provided by Fedor Ratnikov.

    - TClonesArray: made several method virtual and made the data members
      protected. Denis Bertini (Hades/GSI).

    - TObjArray: made the datamembers protected. Denis Bertini (Hades/GSI).

    - importcint: updated CINT import macro for new STL includes.
    //
    // 06/04/2000  13.23.49  by  Valery Fine(fine@bnl.gov)
    //
     - WinNTSystem::DirName - bug fixed (Thanks V.Onuchin)

     - ZIP inflate function Writedata: logic has been modified
    //
    // 05/04/2000  08.36.47  by  Rene Brun
    //
    - Fix a problem in TH2::ProfileY (thanks Gerco Onderwater).
      When creating a profile along the y-axis from a 2D histo, the number of bins
      in the profile are incorrect (as a matter of fact, the number of bins on the
      x-axis of the original 2d histo is used).

    - Remove a memory leak in TCint::UpdateListOfTypes.
      The leak was apparent when running the THtml class.

    - Implement new function "fmod" in TFormula and TTreeFormula.
      one can do: t.Draw("x","fmod(y,0.5)>0.2")

    - Protection added in TLeafObject::GetMethodCall (thanks Philippe Canal).
      a TMethodCall was created by passing a null pointer as argument.  However
      the code from this constructor (and/or functions called from within) assumes
      an argument list.

    //
    // 04/04/2000  15.07.50  by  Rene Brun
    //
    - A small change in TPostScript::Initialize (Thanks Olivier Couet).
      When including ps or eps files in PowerPoint, some horizonthal lines
      were appearing in the picture. This problem is due to a bug in PowerPoint
      that does always closes all the open paths. To circumvent this problem,
      an additional "newpath" statement is now generated when opening
      a new picture.
    //
    // 03/04/2000  12.44.10  by  Rene Brun
    //
    - Add new tutorial gaxis.C

    - Fix a problem in THistPainter::PaintInit in case of log scale along X.
      Must check that the selected last bin is not greater than the number of bins.
      Problem was apparent in case of variable bin size histograms.

    - Merge with Valery's version. This version fixes a problem in TPGON::FillTableOfCoSin
      Protections in TWinNtSystem and TTabCom.

    //________________________________________________________________________
    //
    //::>          VERSION  2.24/01   31/03/2000 12.19.07
    //
    //
    // 31/03/2000  12.11.55  by  Rene Brun
    //
    - The following functions from the ZIP package have been renamed to avoid
      clashes between ROOT and external packages using modified versions of
      the original ZIP package. The old names are now prefixed with R__.
      (thanks to Ursula Berthon to help understanding the problem).
      This is the new list of the ZIP functions:
         R__ReadByte
         R__WriteData
         R__build_bl_tree
         R__build_tree
         R__compress_block
         R__fill_window
         R__flush_outbuf
         R__gen_bitlen
         R__gen_codes
         R__init_block
         R__longest_match
         R__pqdownheap
         R__scan_tree
         R__send_all_trees
         R__send_tree
         R__set_file_type

    - Implement TEventList::SetName. TEventList is a TNamed.
      TNamed::SetName must be overloaded in TEventList because TEventList objects
      like TH1s and TTrees are inserted into a THashList. Changing the name
      of one of these objects implies recomputing the hashlist.

    - Merge with Valery's version.
      Valery has introduced a new function TStopwatch::Counter counting
      the number of start/stops.
      Cleanup of STAR code to follow the ROOT coding style.
    //
    // 28/03/2000  12.39.19  by  Rene Brun
    //
    - Improve functions TPolyMarker3D::PaintH3 and TMarker3DBox::PaintH3
       to take into account the current axis ranges (set via TAxis::SetRange).

    - minor change in tutorial graph.C. Add the statement c1->Modified() at
       the end of the macro.

    - Slight modification (Philippe Canal) in the destructor for TClass to avoid
      accessing deleted memory.
      Sometime ago the TList destructor was changed from strictly not deleting
      the object it is holding to checking via GetObject()->TestBit(kCanDelete)
      if it should delete the object or not.  The consequence is that while
      deleting fAllPubMethod and fAllPubData, eventhough it was not deleting the
      object a second time, it was still accessing them.  Thus the deletion of
      these two list have to be done before the deletion of the objects in it.

    - Modify TGraph::GetXaxis and GetYaxis to use TGraph::GetHistogram
      rather than fHistogram.

    - Modify the globals kumac for KCC on SGI, removing --no-exceptions.
      same change in the makefile and root-config.

    - Add new macro hadd.C in the list of tutorials. This macro can be used
      to merge histogram files.
    //
    // 23/03/2000  09.59.30  by  Rene Brun
    //
    - Minor change in root-config for HP-UX CC compiler. +Z option added
      in the list of compiler options.

    - The following set of Bessel functions has been added in class TMath.
       origin from Nick van Eijndhoven and based on Numerical Recipes.

       Double_t BesselI(Int_t n,Double_t x);   // Compute integer order modified Bessel function I_n(x)
       Double_t BesselK(Int_t n,Double_t x);   // Compute integer order modified Bessel function K_n(x)
       Double_t BesselI0(Double_t x);          // Compute modified Bessel function I_0(x)
       Double_t BesselK0(Double_t x);          // Compute modified Bessel function K_0(x)
       Double_t BesselI1(Double_t x);          // Compute modified Bessel function I_1(x)
       Double_t BesselK1(Double_t x);          // Compute modified Bessel function K_1(x)

    - Bug corrected in TH3::Project3D. When looping on the bins, the current
      value for the bin error was obtained after filling the bin. It should be
      obtained before filling the bin. (Thanks Angela Biselli for reporting).

    //
    // 21/03/2000  11.07.07  by  Rene Brun
    //
    - Modify TFile::Init to read the file title. The file title was written
      to the file but never read in when the file was reconnected.
    //
    // 20/03/2000  10.26.46  by  Rene Brun
    //
    - Fix code generation in TTreePlayer::MakeClass and MakeCode in case
       of variable length two dim arrays (Thanks Philippe Canal).

    - Protection in TF1::GetRandom (when the parabola becomes flat).
      Thanks Federico Carminati.

    - Add library -lnsl in installation of h2root, g2root for Linux.
      This is required on RH6.1 with the new version of CERNLIB.

    - Add possibility to close a TCutG with a double click in TPad::createNewPolyLine

    - Merge with valery's version including changes for TPadView3D (moved to BASE)

    //
    // 16/03/2000  08.11.07  by  Rene Brun
    //
    - In TMinuit destructor remove the TMinuit object from gROOT->GetListofSpecials().
       Also reset gMinuit=0 if gMinuit=this.

    //
    // 15/03/2000  16.55.10  by  Fons Rademakers
    //
    - TString: can now specify which character to strip in Strip().

    - mmalloc, mfree, mmprivate: changed "struct list" to "struct mmlist"
      to avoid possible clash with STl list class (fix by pcanal).
    //
    // 11/03/2000  16.04.06  by  Rene Brun
    //
    - Changes in include Bytes.h to support an optimized byte swapping code
      on Linux machines (thanks to Sasha Vanyashin ).
      The Bytes.h uses asm macros from the #include <byteswap.h>
      This is a part of the GNU C library: /usr/include/byteswap.h and
      /usr/include/bits/byteswap.h. To get the most of the macros one has to use
      the compiler switches higher then i386 (e.g., -march=pentiumpro -mpentiumpro),
      since the default gcc copmpiler settings are just the i386.
      Because the byteswap.h is missing on many Linux systems, a copy of
      this include is provided in Byteswap.h

    - Fix a problem in TMethodCall::ReturnType to take into account
      the Root data types Float_t, Int_t, etc in addition to the basic types.
       (thanks Gene Van Buren)

    - New functionality added to class TLatex (Marthe Brun)
      #left(,  #right) to draw parenthesis with a size corresponding
      to the block between parenthesis.
      Support for Upper and Lower indices in front of a letter (useful for
      chemical elements). try for example {}_{3}^{7}Li.
      Use this new functions in tutorial latex.C.
      Better vertical aligment of Greek characters
    //
    // 10/03/2000  10.47.26  by  Philippe canal
    //
    - New version of rootcint. This new version is now able to automatically
      generate the Streamer functions for classes containing pointers to basic types
      in the following case.
      Int_t   fN;         //Number of array elements
      Int_t   *fType;     //[fN] array of fN integers
      Float_t *fX;        //[3*fN] array of 3*fN floats

    - Extensions to TSystem such that the following will nicely work:
      root> .L stress.cxx
      root> stress(); // will interpret
      root> .L stress.cxx
      root> stress(); // will interpret a new version
      root> .L stress.cxx++
      root> stress(); // will execute compiled code
      root> .L stress.cxx++  // does not re-compiled if stress.cxx is NOT newer.
      root> stress(); // will execute new compiled code

    //
    // 08/03/2000  14.57.15  by  Rene Brun
    //
    - In TVirtualFitter destructor, reset fgFitter and fgMaxpar to 0.
      This is necessary in case a previous fitter was created with a number
      of parameters maxpar, then deleted and a new fitter created with
      less parameters. (case shown by Nicolas Produit)
    //
    // 07/03/2000  16.50.31  by  Rene Brun
    //
    - Modify CINT/libstrm deck header to add -KCC.
      Modify importcint to add -kCC when importing libstrm.

    - Add comments in TNamed::SetName, TNamed::SetObject to mention that
       if an object is a member of a THashList, the THashList must be
       rehashed after the SetName.
       Comment also added to the THashList constructors.
    //
    // 06/03/2000  08.43.09  by  Rene Brun
    //
    - Update a wrong comment in tutorial Ifit (mnhelp("*") instead of mnhelp("*",0).
     (thanks Ben Kilminster).

    - Modify test programs Tetris and hworld to replace references to gPad
      by TVirtualPad::Pad().

    - Merge with Valery's new version. This new version includes several changes
       in the STAR classes + support for double-click on WindowsNT.
    //
    // 05/03/2000  16.11.09  by  Rene Brun
    - Declare the TTree::Branch functions to be virtual (Fred Gray request).
    //
    //
    // 04/03/2000  16.34.54  by  Rene Brun
    //
    - Fix a clipping problem in TGraph::PaintGraph in case of option Bar.
      Add SetBit(kClipFrame) in default TGraph constructor.
     (thanks Anton Fokin).
    //
    // 03/03/2000  19.02.17  by  Fons Rademakers
    //
    - TDatime: allow 100 - 199 as years (100 is returned by Linux's gmtime
      for the year 2000).

    - TMatrix, TVector: print errors when two matrices or vectors are not
      compatible instead of silently doing nothing.

    - TGSlider: fixed two case of && which should be & in DoDraw() for TGVSlider
      and TGHSlider. Found by Yun-Ha Shin.
    //
    // 02/03/2000  10.10.41  by  Rene Brun
    //
    - In TChain::SetBranchAddress and TChain::SetBranchStatus,
       set fTreeNumber = -1 to force TChain::LoadEntry to be executed
       at the next call to TChain::GetEntry. This statement is necessary
       in case a user calls one of these two functions after a first pass
       to the files in the chain. (thanks Goetz Gaycken)

    - Add new function int() to TFormula::Analyze, TFormula::Eval
      and to TTreeFormula::Eval
    //
    // 01/03/2000  17.27.39  by  Rene Brun
    //
    - Important change in histogram classes
      =====================================
       - All histogram classes are derived from the base class TH1

                                 TH1
                                  ^
                                  |
                                  |
                                  |
          -----------------------------------------------------
                 |                |       |      |      |     |
                 |                |      TH1C   TH1S   TH1F  TH1D
                 |                |                           |
                 |                |                           |
                 |               TH2                        TProfile
                 |                |
                 |                |
                 |                ------------------------------
                 |                        |      |      |      |
                 |                       TH2C   TH2S   TH2F   TH2D
                 |
                TH3
                 |
                 |
                 ------------------------------
                         |      |      |      |
                        TH3C   TH3S   TH3F   TH3D

       The TH*C classes also inherit from the array class TArrayC.
       The TH*S classes also inherit from the array class TArrayS.
       The TH*F classes also inherit from the array class TArrayF.
       The TH*D classes also inherit from the array class TArrayD.

       This change is backward compatible. Previous style histograms
       can be read by the new version.
    //
    // 29/02/2000  20.23.34  by  Fons Rademakers
    //
    - TVirtualPad: R__Pad() now static member TVirtualPad::Pad().
    //
    // 29/02/2000  08.35.28  by  Rene Brun
    //
    - Implement copy constructor of TParticle
    //
    // 28/02/2000  09.39.18  by  Rene Brun
    //
    - Add new classes TSpline, TSpline3 and TSpline5 (from Federico Carminati)
      Add new tutorial spline.C

    - Implement a new TF1 constructor
       TF1::TF1(const char *name, Float_t xmin, Float_t xmax, Int_t npar)
       where name is the name of a preloaded CINT function

    - New code in TBranchClones::Streamer to automatically create
      the TClonesArray if the support pointer contains a null address
       (thanks to Marian Ivanov).

    - Merge with Valery's version:
         additions in TROOT::GetClass to take into account typedefed classes.
         new versions of STAR classes
    //
    // 23/02/2000  19.09.59  by  Rene Brun
    //
    - Rename C function mem_read to R__mem_read in the ZIP Bits.c file.
      This name clashes with a similar name in one library used by ISDC.
      Thanks Nicolas Produit for investigating.

    - Many thanks to Marco van Leeuwen for reporting a problem with TGraph::Fit
      when fitting with a polynomial. The problem has been fixed in TGraph::LeastSquareFit.
      The last data point was ignored by this function computing the initial
      value of parameters.
    //
    //
    // 22/02/2000  08.22.57  by  Rene Brun
    //
    - Protection added in TCanvas::RunAutoExec. The global gPad may be null
       in some cases (eg, when a TDialogCanvas object is deleted by a button
       inside the canvas itself).

    -In TTreePlayer::DrawSelect, disable the bit kCanRebin for histograms
     (1-d, 2-d and 3-d) when the option "same" is specified.

    - In TH1::GetStats, forgot to preset to 0 the last element of the array stats.
      This was given a problem on Alpha/Unix machines.

    - Regenerate the G__Meta dictionary to remove new code generated by the
      new version of CINT. Correction reported to Masa.

    - Several changes received from Valery Fine in the new STAR package and also in
      the Win32 GUI.

    //
    // 18/02/2000  17.47.15  by  Rene Brun
    //
    - A change in the functions TF1::Integral, also, TF2 and TF3.
      All parameters promoted from Float_t to Double_t.
       (thanks Rutger van der Eijk  )

    - Thanks to Romain.Holzmann@gsi.de for fixing a problem in TTreeFormula.
      "I have noticed a problem when using a graphical cut TCutG in a TTree::Draw()
       selection in case the selection applies to a pair of variables (x:y) of which
       one at least is stored in a TClonesArray:
       Indeed, in the TTreePlayer::EntryLoop(...) method the flag SelectMultiple is
       not set properly in this case, so that only the first entry of the TClonesArray
       is tested and the result of fSelect->EvalInstance(0) is used for ALL entries
       of the array, i.e. either all x:y pairs are accepted or all are rejected!
       The problem seems to come from the TTreeFormula constructor which does not
       set TTreeFormula::fMultiplicity (?) for the case of a graphical cut."
    //
    // 17/02/2000  19.28.15  by  Masaharu Goto
    //
    - New CINT 5.14.31 7 Feb 2000 (previous version in ROOT was 5.14.25)
      5.14.26 8 Dec 1999
      1242, #pragma link C++ namespace, risk1, t298.h

      5.14.27 19 Dec 1999
      1243, #pragma link C++ defined_in tagname; risk1, t299.h
      1244, default template arg, get typenum at the first instantiation, risk2
      1245, prompt  newline escape, risk2, t301.cxx
      1246, p = new scope::ctor(); bug fix, risk2
      1247, gROOT->Macro("f.c") in loop, 1168 side effect, risk3
      1248, fix to 1219, 1225, pointer to function argument, risk2
      1249, f(void (*p)()=0); bug fix, risk 2, t307.h
      1250, 'explicit' support, risk4, t308.cxx,
      1251, compiled default ctor in bytecode loop, bug fix. risk2, t310.h/cxx
      -   , G__NOMATHLIB switch, risk1
      1252, 1.0 + obj; buf fix, risk1, t309.cxx
      1253, tempbuf display,
      1254, A& a=A(x); temp object lifetime bug fix, risk4, t312.cxx
      1255, UInt_t -1 display bug fix, risk2
     -1256, n=0;for(i=0;i<n;i++); bytecode, risk5, t313.cxx
        BUG FOUND, intprt_cint infinit loop, CINT simple.cxx
      1257, pragma link C++ class A*-; supported risk3, t315.h

      5.14.28 5 Jan 2000
     /1258, const and non-const member function override, risk3, t316.h
     /1259, constness flag for G__value
     /1260, func overload matching with object constness
       Note: constness checking is implemented by 1258-1260. There are several
            problems and this feature is not activated unless G__CONSTNESSFLAG
            is explicitly defined in platform/dependency file.
              - DLL/sharedlib binary incompatibility
              - STL container's const_iterator begin/end can not be compiled
      1261, #pragma include_noerr "f1" #on_error "f2"
      1262, A*** x; bug fix, risk3, t317.h

      5.14.29 17 Jan 2000
     -1263, 1240 fix, implicit conv + derived to base conv, t321.cxx, not done
      1264, more than 10 class object member , risk2, c:/src/err/MyDlg.cpp
      1265, operator-> support t323.cxx
      1266, void (*p2f)(int&); bug fix t326.cxx, t325.cxx
      1267, G__ClassInfo::New(int n); added, risk2
      1268, compiled exception catching, t332.h/.cxx, risk4

      5.14.30 30 Jan 2000
      1269, static member function flag missing, t333.h , risk2
      1270, exception in bytecode, t332.h/.cxx, risk5
      1271, auto loading of std header in DLL, t332.h/.cxx, risk4
      1272, #pragma link postprocess file action; t335.h/.cxx t335post.cxx, risk3

      5.14.31 7 Feb 2000
      1273, function only macro smart unloading, risk4, t336.cxx
               G__set_smartload() added
      1274, A f() { return B(); }, risi3, t338.cxx
      -   , auto_ptr added in stl/_memory, t340.cxx
      1275, template<class T> class A{template<class Y> A(Y& x){}};, risk2,t340.h
      -   , auto_ptr support, t343.cxx t342.cxx, t345.cxx
        1240 -> G__WORKAROUND000209_1
    //
    // 17/02/2000  18.40.43  by  Fons Rademakers
    //
    - Secure rootd deamon
      ===================
      Rootd now supports secure authentication by using the SRP package
      from Stanford (http://srp.stanford.edu/srp/). SRP, Secure Remote
      Passwords, uses a so called "asymmetric key exchange protocol"
      in which no passwords are ever send over the wire. To quickly
      read about the main features of SRP look at:
      http://jafar.stanford.edu/srp/advantages.html
      To build rootd with libsrp.a you've to do the following:
        - get the SRP source (ftp://srp.stanford.edu/pub/srp/srp-1.5.0.tar.gz)
        - get the gmp source (ftp://srp.stanford.edu/pub/srp/gmp-2.0.2.tar.gz)
          This is not needed when you are on a recent Linux machine where
          libgmp.so exists in /usr/lib.
        - Build the gmp and SRP libs (./configure;make;[make install])
        - Check the rootd Makefile and set the SRP variable to where you
          installed the SRP source.
        - Build rootd
        - Get the package ftp://root.cern.ch/root/srputils.tar.gz
        - Untar, check that the variable SRP is set correctly in the Makefile
          and make and make install. This produces the utilities rtconf,
          rpasswd and the library libSRPAuth.so.
        - To setup the SRP passwd file on the remote node do:
            - rtconf
              A key of 512 bit is good enough (creates the file
              $HOME/.srootdpass.conf)
            - rpasswd
              Give a passwd for rootd (creates the file $HOME/.srootdpass)
        - On the local site you need to get only libSRPAuth.so and put it
          in $ROOTSYS/lib.
        - Now when creating a TNetFile object via TFile::Open("root://....")
          libSRPAuth.so will be loaded if it exits and the secure login
          protocol will be used. Note that other rootd trafic is not encrypted.

    - TRint, rootx: changed option -p (to popdown the slpash screen) to -splash
      to prevent any accidental usage.

    - TCut: fixed behaviour of operator!().

    - TROOT: added check in GetClass() for fClasses==0.

    - Threads: updates in the thread package, but this is still work in progres.
    //
    // 17/02/2000  15.35.35  by  Rene Brun
    //
    - Add new install Makesolarisgcc (thanks Michal Lijowski).

    - Minor changes in TGX11 (change Text_t to char) to make new Sun CC5 happy.
      Similar minor change in TView : Replace TMath::Atan(1) by its value.

    - Modify TAttext to show function SetTextAngle in the context menu.

    - Add new function TEventList::SetDelta.

    - Change comment in TF1::Derivative.

    - Minor change in TH1::GetBarOffset and GetBarWidth. Cast result to Float_t
      to avoid a warning with one compiler.

    - In TTreePlayer::MakeClass, generate the code for the class destructor.
      Delete the current file in the destructor.

    - One change in TCint (Win32 only).
    //
    // 14/02/2000  12.24.01  by  Rene Brun
    //
    - Add the following functions overridden TNamed::SetObject
       TH1::SetObject(const char *name, const char *title)
       TNode::SetObject(const char *name, const char *title)
       TTree::SetObject(const char *name, const char *title)
      Because instances of these 3 classes are automatically added to the current
      directory (a THashList), it is necessary to recompute the hashtable.
      This was already done by the SetName functions of these classes.
    //________________________________________________________________________
    //
    //::>          VERSION  2.24/00   14/02/2000 10.13.26
    //
    //
    // 01/02/2000  16.35.57  by  Rene Brun
    //
    - Add new attributes fTitleColor and fTitleFont in TAttAxis.
      Same in helper class TGaxis.
      The necessary changes to introduce the new attributes have been made in
      THistPainter::PaintAxis and in class TAxis3D.

    - Protection added to TRotmatrix in case a TGeometry object dose not exist.
      When this is the case, a default TGeometry object is created.

    - Changes in TTreePlayer::TakeEstimate to support option "goff" when
      generating 3-d histograms.