# ROOT Version 1.02 Release Notes

    //________________________________________________________________________
    //
    //::>          VERSION  1.02/00   25/07/97 19.20.43
    //

        Summary of the main changes or new features in version 1.02 (1.01/08)
        =====================================================================

    ===========> New features

    - On popular demand from the many users who use ROOT in on-line or DAQ
      environments we've now implemented shared memory for the storage of
      objects. Using this feature a DAQ program can produce status histograms,
      which can be retrieved by monitor programs. For more info see the
      TMapFile class and the tutorial macros hprod.C and hcons.C.
      This feature works on all Unix platforms and Win NT/95.

    - OpenGL interface and OpenGL 3D viewer. Any 3D ROOT objects (TPolyLine3D,
      TPolyMarker3D, TGeometry, etc.) can be displayed in the OpenGL viewer
      via the command TPad::x3d("OPENGL") (also accessable via the view memu
      in the canvas menubar). On WinNT the OpenGL DLL is loaded automatically,
      on Unix one needs to load the OpenGL and additional X libraries via
      a macro GL.C. On Unix one can use the Mesa public domain OpenGL
      implementation (http://www.ssec.wisc.edu/~brianp/Mesa.html).

    - Implemented search path for macros. The macro search path can be
      specified in the .rootrc file with:

      Unix.*.Root.MacroPath:  .:~/rootmacros:$ROOTSYS/macros:$ROOTSYS/tutorials
      WinNT.*.Root.MacroPath: .:$HOME\rootmacros:$ROOTSYS\macros:$ROOTSYS\tutorials

      The search path is returned by the static function
      TApplication::GetMacroPath() and used by TSystem::Which().
      The new ROOT interpreter command ".which macro.C" returns the path of the macro.C.

    - New class TButton. A TButton object is a simple button with a title
      and an associated action. The action can be any valid CINT command
      or invocation of a macro. A TButton object can be created directly
      via the graphics editor in an existing pad/canvas. To be able to execute
      the actions bound to a button one has to set the call
      TCanvas::SetEditable(kFALSE) (also via context menu in canvas).

    - New member functions in the TH1 class:
      TH1D *TH1::ProjectionX(name="_px",firstybin=0,lastybin=0,Option_t *option="")
      TH1D *TH1::ProjectionY(name="_py",firstxbin=0,lastxbin=0,Option_t *option="")
      These two functions make a projection X,Y of a 2-D histogram into
      a 1-D histogram (always type TH1D).
      By default, ProjectionX uses all the bins along Y for the projection.
      if firstbin,lastybin are specified, they are used to restrict the Y range
      of the projection. Same for ProjectionY.
      If option =="e", the error bars are automatically computed for the projection.
      The resulting projection is named by default with the name of the 2-d histogram
      with the suffix "_px".
      TProfile *TH1::ProfileX(name="_pfx",firstybin=0,lastybin=0,Option_t *option="")
      TProfile *TH1::ProfileY(name="_pfy",firstxbin=0,lastxbin=0,Option_t *option="")
      Same as ProjectionX> instead the result is a TProfile histogram.

    - New class TCutG. A graphical cut.
      A TCutG object defines a closed polygon in a x,y plot.
      It can be created via the graphics editor option "CutG"
      or directly by invoking its constructor. The graphical cut object
      can be used by TTree::Draw as cut region on a 2d plot.

    - Implemented primitive garbage collector as a set of static member functions
      of TCollection. The purpose of this garbage collector is to make sure
      and object stored in many different collections (all referenced from
      the same master object) get deleted only once.

    - Change in TObject::Write. If a TFile contains subdirectories,
      the new version supports f.Write at the top level.
      In previous versions, it was necessary to dir->Write at each level
      of subdirectories.

    - Implement new option "I" in TH1::Fit. When this option is specified,
      the integral of the function in the bin range is used instead of the
      value of the function at the center of the bin.
      Note that this option gives better results, but is slower.

    - Many changes in TTree::MakeCode. The code generated by this function
      uses the new functions TTree::SetBranchAddress and TTree::SetBranchStatus
      instead of direct calls to TLeaf::SetAddress.

    - Many, many new minor features and bug fixes.

    --------------------------------------------------------------------------
    For more detail on the above mentioned major changes and a detailed
    description of the smaller new features and bug fixes see the developers
    history file below.
    --------------------------------------------------------------------------

    //
    // 25/07/1997  16.20.38  by  Fons Rademakers
    //
    - New class TMapFile: implements shared memory using a memory mapped file.
      Example usage of this new feature can be found in the hprod.C (producer)
      and hcons.C (consumer) scripts. The general principle of operation on
      the producers side is:
        - create a TMapFile object specifying its expected upper size limit
          (this file becomes the current directory)
        - create histograms, profiles (they will be automatically added to
          the current directory, objects of other classes need to call explicitely
          AppendDirectory())
        - fill histograms, etc
        - once in a while call TMapFile::Update() to update the objects in
          shared memory

      And on the consumer side:
        - open existing TMapFile object
        - get object from shared memory by name using TMapFile::Get()
        - display or operate on object

      The calls Update() on the producer side and Get() on the consumer side
      are necessary because we can not store objects with vtbl ptr's directly
      in shared memory. The problem is that the vtbl ptr is only valid on
      the producer side. Any call of a virtual function of an object in
      shared memory on the consumer side would result in a bus error (since the
      virtual function call would require a dereference of the illegal vtbl ptr).
      So the simple solution we've implemented is to stream the objects out to
      and in from a buffer mapped in shared memory (Update() and Get()).
      This method requires the objects to be stored in shared memory to have
      a Streamer() method (generated via rootcint). In the (near) future we
      hope to be able to remove the Update() (storing objects unmodified in
      shared memory) and only use the Get() (which will require a deep copying
      copy ctor that does not use any virtual functions).

      The objects in shared memory can be inspected with the browser.
    //
    // 25/07/1997  18.42.23  by Piotr Golonka
    //
    - Help menu activated for canvas, browser and OpenGL viewer.

    - Implement ToggleButtons for context menus. Methods affected are:
      TCanvas::SetEditable
      TPad::SetLogx
      TPad::SetLogy
      TPad::SetGridx
      TPad::SetGridy
      To activate a toggle button use *TOGGLE* in the comment field of the method
      instead of *MENU*
    //
    // 21/07/1997  13.19.27  by  Rene Brun
    //
    - Implement the drawing of fit parameters for TGraph/TGraphErrors objects.
      The TH1::PainStat function has two new arguments and becomes public.
      TGraph::PaintGraph invokes TH1::PainStat

    - In TBranch::Fill do not drop baskets if gDirectory == gROOT.

    - Fix a problem in h2root in case of a column with Double Precision.

    - Fix a problem in TFormula::Analyze in case of expressions involving
      x**2 or x^2.

    - Implement log scales for TGraph.

    - Several changes in class TButton. See documentation in class.

    - Implement writing/reading 2-dim arrays (with one variable) in
      the TBranch/TLeaf classes.

    - Changes in TTree::MakeCode to support 2-d arrays.

    - In function TPostScript::Text, special case when the string contains
      ntuple selection operators like & or !
      If the string contains a { the above symbols are skipped. This special case
      happens in histogram titles containing the selection expression.

    - Several improvements in the OpenGL interface. Perspective view
      now implemented.

    - Additional documentation in several classes.
    //
    // 05/07/1997  10.22.04  by  Rene Brun
    //
    - Protect class TClonesArray constructor and [] operator in case
      of an invalid referenced classname.

    - Protect classes TFitPanel, TDrawPanelHist in case a canvas is deleted,
      but there are still dialogcanvas (fitpanel,drawpanel) left on the screen.
    //________________________________________________________________________
    //
    //::>          VERSION  1.01/07   02/07/97 19.07.13
    //
    // 02/07/1997  18.50.05  by  Rene Brun
    //
    - Change specs for TPad::cd from cd(const char *) to cd(Int_t padnumber=0).
      When a canvas/pad is divided via TPad::Divide, one can directly
      set the current path to one of the subdivisions.
      See TPad::Divide for the convention to number subpads.
      For example:
        c1.Divide(2,3); // create 6 pads (2 divisions along x, 3 along y).
        To set the current pad to the bottom right pad, do
        c1.cd(6);
      Note that c1.cd() is equivalent to c1.cd(0) and sets the current pad
      to c1 itself.

    - Several structural changes to the TDialogCanvas and TButton classes
      and their derived classes.
      Several member functions of TPad are redefined in these two classes
      without specifying the option MENU.

    - New member function TCanvas::SetEditable et TCanvas::IsEditable.
      New data member fIsEditable in TCanvas.
      By default a TCanvas is editable.
      By default a TDialogCanvas is not editable.
      SetEditable appears as an option in the context menu.

    - Modify TClass::GetMenuItems to correctly fill the list of items
      in case a function is declared in MENU in a base class and redefined
      without the option MENU in a derived class.
    //
    // 26/06/1997  10.11.59  by  Rene Brun
    //
    - New version of TMotifBrowser from Nenad fixing a segmentation fault.

    - A few changes in g2root. In case a GEANT volume name contains
      characters like + - *, they are replaced respectively by p m s.

    - Optimisation in h2root. The maximum value of a variable length array
      is now saved in the TBranch/TLeaf structure, such that TTree::MakeCode
      can generate the variable declarations with the maximum value defined
      in the Hbook program.

    - Changes in class TH1::PaintColorLevels.
      When a maximum is set on a 2-d histogram, the new version will use
      the same color for all values greater or equal to the maximum.

    - New class TELTU implementing the Geant shape ELTU (Elliptic tube).

    - Change in TMaterial. This class inherits from TAttLine.

    - Protections in TPCON::Paint in case the number of Z sections is less than 2.

    - Implement a new option in TNode::Paint.
      A new visibility option (-3) can be set on the top level node.
      This will set visible only nodes with no sons. This option is the best one
      to quickly view a detector.

    - Changes in TPolyLine3D to dynamically allocate some buffers.
    //
    // 23/06/1997  09.05.30  by  Rene Brun
    //
    - The type of information printed in the histogram statistics box
      can be selected via gStyle->SetOptStat(mode).
      The parameter mode can be = nemruo  (default = 111100)
        n = 1;  name of histogram is printed
        e = 1;  number of entries printed
        m = 1;  mean value printed
        r = 1;  rms printed
        u = 1;  number of underflows printed
        o = 1;  number of overflows printed
      Example: gStyle->SetOptStat(11);
               print only name of histogram and number of entries.

    - Optimisation in TTree Input/Output. When a basket is written to the file,
      the basket object is deleted from memory. This saves a lot of space
      in memory when writing very large Trees (Gigabytes). This also improves
      the performance of the TTree::SetAutoSave facility.

    //________________________________________________________________________
    //
    //::>          VERSION  1.01/06   17/06/97 12.12.06
    //
    //
    // 16/06/1997  12.12.56  by  Rene Brun
    //
    - Change in TObject::Write. If a TFile contains subdirectories,
      the new version supports f.Write at the top level.
      In previous versions, it was necessary to dir->Write at each level
      of subdirectories.
    //
    // 15/06/1997  22.12.56  by  Fons Rademakers
    //
    - TUnixSystem: ExpandPathName(), Which(), DynamicPathName() and
      ConcatFileName() now return an allocated char* that should be
      deleted by the user. This is conform the TWinNTSystem behaviour
      and it is thread save. Routines using these functions have been
      modified accordingly.

    - Implemented search path for macros. The macro search path can be
      specified in the .rootrc file with:

      Unix.*.Root.MacroPath:  .:~/rootmacros:$ROOTSYS/macros:$ROOTSYS/tutorials
      WinNT.*.Root.MacroPath: .:$HOME\rootmacros:$ROOTSYS\macros:$ROOTSYS\tutorials

      The search path is returned by the static function
      TApplication::GetMacroPath() and used by TSystem::Which().

    - New ROOT interpreter command ".which macro.C". Returns path of macro.C.
    //
    // 14/06/1997  16.47.07  by  Rene Brun
    //
    - Modify TWebFile::ReadBuffer to take into account the case when
      TKey::ReadFile reads a buffer greater than kMAXFILEBUFFER.
      In this case, fOffset must be incremented.
    //________________________________________________________________________
    //
    //::>          VERSION  1.01/05   13/06/97 19.19.09
    //
    // 11/06/1997  21.01.54  by  Fons Rademakers
    //
    - Many (subtile) changes to let ROOT run without the builtin
      new and delete operators. The builtin operators perform
      extra memory checks and always set memory to 0. The system
      new and delete operators do not set memory to 0.
      Thank you Purify!

    - Unix/Motif interface to OpenGL. Use the Mesa public domain
      OpenGL implementation or your special OpenGL hardware drivers.
      For example to use OpenGL (Mesa) on HP-UX do:

      {
         gSystem.Load("/usr/lib/libXext.sl");
         gSystem.Load("/usr/lib/X11R4/libXmu.sl");
         gSystem.Load("$OPENGL/lib/libMesaGL.sl");
         gSystem.Load("$OPENGL/lib/libMesaGLU.sl");
         gSystem.Load("$OPENGL/lib/libMesaGLw.sl");
         gSystem.Load("$OPENGL/lib/libMesaaux.sl");
         gSystem.Load("libRGL.sl");
      }

      or on Linux:

      {
         gSystem.Load("/usr/X11/lib/libXmu.so");
         gSystem.Load("$OPENGL/lib/libMesaGL.so");
         gSystem.Load("$OPENGL/lib/libMesaGLU.so");
         gSystem.Load("$OPENGL/lib/libMesaGLw.so");
         gSystem.Load("libRGL.so");
      }

    - Handle the kSigWindowChanged signal. If x/hp/dterm is resized the
      line width of getline (the command line editor) will be adjusted
      accordingly.
    //
    // 11/06/1997  14.34.43  by  Rene Brun
    //
    - Support for log/log scales in TTree::Draw in case of polymarkers.

    - A few changes in TTree::DefinedVariable to allow for more combinations
      to access branch leaves.

    - Fix problem in TF1::Integral. Use current parameters instead of
      parameters in data members. This also fix a problem in TH1::Fit when
      called with the option "I".

    - Rewrite function TMarker::ExecuteEvent and TMarker::DistancetoPrimitive.

    - Modify TH1::MakeChopt to support option "hist"
      When option "hist" is active, only the histogram contour is shown.
      This option is useful in case errors are stored (via TH1::Sumw2) and
      one wants to draw only the histogram contour without error bars.

    - Fix a problem in TBranchClones::Streamer. The leaf offset should not be
      reset to 0 when the class referenced by the TClonesArray is available.

    - Rename existing class TButton to TGroupButton.

    - New class TButton. TGroupButton derives from TButton.
      A TButton object is a simple button with a title and an associated action.
      The action can be any valid CINT command or invokation of a macro.
      A TButton object can be created directly via the graphics editor
      in an existing pad/canvas.
      One can draw in a TButton.
      By default, the button action is executed when clicking with the
      left mouse button on the button.
      To edit the content of an existing button in a pad, select first
      the contextmenu item "SetStatus(0)" by clicking on the button with
      the mouse right button. Note that SetStatus sets the status for all
      buttons in the pad, not only for the selected button.
      A pad layout with one or several buttons can be saved (like any pad)
      on a C++ macro.

    - Correct typo in class TH1 when printing an error message.
    //
    // 06/06/1997  10.52.03  by  Rene Brun
    - Fix a problem in cint/newlink. Previous version could not process
      more than 10 include files in rootcint.
    //
    //________________________________________________________________________
    //
    //::>          VERSION  1.01/04   04/06/97 15.02.07
    //
    //
    // 03/06/1997  08.35.20  by  Rene Brun
    //
    - Implement new function TF1::Integral.
      This function computes the integral of a function between two limits
      using a gauss quadrature technique.

    - Implement new option "I" in TH1::Fit. When this option is specified,
      the integral of the function in the bin range is used instead of the
      value of the function at the center of the bin.
      Note that this option gives better results, but is slower.

    - Changes in TMotifBrowser. When going up and down in a directory-tree
      structure, the directoriy contents are correctly updated.

    - Fix in CINT/newlink by Masa in case of a class data member being
      a 2-d static array.

    - Fix a problem in h2root. The previous version did not work on large
      Hbook files due to an unnecessary limitation in the loop
      processing the RZ keys.

    - TTree::MakeCode generates a new style code based on SetBranchAddress.
      Take also care of static arrays in class referenced by TClonesArray.

    - Fix problem in TF2::SetRange (Thanks Glenn Cooper). Following a
      SetRange a Draw operation did not take into account the new range.
      Current histogram must be deleted. Done.

    - Correct typo in TH1::Fit (Thanks Glenn Cooper) affecting fits
      on 3-d histograms.

    - Change in TBranchClones::Streamer.
      When the class referenced by the TClonesArray is not available,
      set the leaf offset to 0, such that TTree::setBranchAddress can
      be used.

    - Protect TH1::PaintStat when no stats and no fits to be drawn.
      (thanks to Nick for reporting).

    - Fix a text alignment problem in TPostScript::Text.
      In case of vertical text, the horizontal alignment was wrong.

    - Protect TAttLine::DistancetoPrimitive against a division by zero.

    - Changes in TBranchClones constructor. The name of the branchcount
      is changed to name of TClonesArray pointer followed by underscore.

    - Protect TFormula::Compile in case of compilation error.
      A case happens where fNoper = 1 and fOper = 0. Now protected.

    - New functions TGraph::ComputeRange and TGraphErrors::ComputeRange.
      TGraph::PaintGraph calls ComputeRange for a better estimation of
      the graph range.
      Similar change in TGraphErrors::Paint to take into account the errors
      in the computation of the range.

    - Fix a problem in TTreeFormula::DefinedVariable in case the parameter
      is a string terminated by a dot (example 999.) Thanks to Damir.

    - Modify tutorial hsum to add a slider.

    - Mods in TSliderBox::ExecuteEvent to support vertical sliders.

    - Modify TH1::DrawPalette.
      In addition to the color table drawn by TH1::Draw with option "col"
      an axis showing the correspondance with colors is painted.

    - Implement TH1::SetCellError.

    - Changes in TBranchClones, TTree and TBranchObject.
      In case of TTree::SetBranchStatus, a leaf of a TClonesArray was not
      exported in the individual objects of the TClonesArray.

    - TMotifBrowser modified to avoid reloading the object from the file
      following a browse operation

    - $G__ci include modified to avoid a compiler warning on Alpha/Unix with the
      CXX compiler.
    //________________________________________________________________________
    //
    //::>          VERSION  1.01/03   24/05/97 13.57.18
    //
    //
    // 23/05/1997  17.30.48  by  Rene Brun
    //
    - New version of CINT from Masa.
      This new version fixes two problems reported to roottalk:
        1- int l = strlen(s); now OK
        2- complex problem reported by Alexei Klimentov. Code generated
           by rootcint did not compile in case of 2-d arrays.

    - New member functions in the TH1 class:
      TH1D *TH1::ProjectionX(name="_px",firstybin=0,lastybin=0,Option_t *option="")
      TH1D *TH1::ProjectionY(name="_py",firstxbin=0,lastxbin=0,Option_t *option="")
      These two functions make a projection X,Y of a 2-D histogram into
      a 1-D histogram (always type TH1D).
      By default, ProjectionX uses all the bins along Y for the projection.
      if firstbin,lastybin are specified, they are used to restrict the Y range
      of the projection. Same for ProjectionY.
      If option =="e", the error bars are automatically computed for the projection.
      The resulting projection is named by default with the name of the 2-d histogram
      with the suffix "_px".
      TProfile *TH1::ProfileX(name="_pfx",firstybin=0,lastybin=0,Option_t *option="")
      TProfile *TH1::ProfileY(name="_pfy",firstxbin=0,lastxbin=0,Option_t *option="")
      Same as ProjectionX> instead the result is a TProfile histogram.

    - Fix a problem in TTreeFormula::DefinedVariable in  case of a TTree
      with a fixed length array.

    - Many changes in TTree::MakeCode. The code generated by this function
      uses the new functions TTree::SetBranchAddress and TTree::SetBranchStatus
      instead of direct calls to TLeaf::SetAddress.

    - Fix a problem in TKey::Read in case the key read is a TDirectory.
      The directory name and title is now correctly set.

    - Change in TGraph::PaintGrapHist. In case all Y values are negative,
      the y axis had a line drawn up to 0 instead of the maximum of Y.
      (thanks to Rainer Cee for reporting this problem).
    //
    // 22/05/1997  08.26.50  by  Rene Brun
    //
    - Modify TClonesArray::ExpandCreate to reset pointers ranging from
      the parameter value n to the maximum size of the array.
      Set the internal pointer fLast to n-1 instead of max(n-1,fSize);

    - Slight change in formating the title in TTree::Draw.
      If the cut expression is too long to be drawn, it is shown as {...}.

    //
    // 20/05/1997  15.03.56  by  Fons Rademakers
    //
    - TDirectory: add method mkdir(name,title). This is shortcut for
      TDirectory *d = new TDirectory(name, title)

    - TSystem: added cd(), pwd() and mkdir() to navigate in OS file system.

    - TMessage: fix problem for Alpha/OSF networking (message length was
      wrongly encoded).
    //
    //
    // 18/05/1997  21.57.11  by  Rene Brun
    - New class TCutG. A graphical cut.
      A TCutG object defines a closed polygon in a x,y plot.
      It can be created via the graphics editor option "CutG"
      or directly by invoking its constructor.
      When it is created via the graphics editor, the TCutG object
      is named "CUTG". It is recommended to immediatly change the name
      by using the context menu item "SetName".
       When the graphics editor is used, the names of the variables X,Y
       are automatically taken from the current pad title.
      Example:
      Assume a TTree object T and:
         Root > T.Draw("abs(fMomemtum)%fEtot")
      the TCutG members fVarX, fVary will be set to:
         fVarx = fEtot
         fVary = abs(fMomemtum)

      A graphical cut can be used in a TTree selection expression:
        Root > T.Draw("fEtot","cutg1")
        where "cutg1" is the name of an existing graphical cut.

      Note that, as shown in the example above, a graphical cut may be
      used in a selection expression when drawing TTrees expressions
      of 1-d, 2-d or 3-dimensions.
      The TTree expressions may or may not reference the same variables
      than in the fVarX, fVarY of the graphical cut.

      A Graphical cut may be drawn via TGraph::Draw.
      It can be edited like a normal TGraph.

      A Graphical cut may be saved to a file via TCutG::Write.
      A TCutG object is added in the gROOT->GetListOfSpecials .

    - New option "CutG" in the Graphics Editor. Function TPad::CreateNewPolyLine
      has been modified.
      To create a CutG with the graphics editor, one must first do
      TTree::Draw("y:x","selection",..)
      then select the CUTG item and click on the 2-d plot to select
      the points delimiting the cut region.
      The polygon is automatically closed by Root.

    - TTreeFormula::Definedvariable and TTree::EvalInstance have been modified
      to take into account the new class TCutG.

    - TROOT::FindObject modified. The list of Specials is now in the search path.

    - TPolyLine3D::Streamer and TPolyMarker3D now operational.
    //
    //________________________________________________________________________
    //
    //::>          VERSION  1.01/02   15/05/97 18.58.47
    //
    // 15/05/1997  18.51.54  by  Rene Brun
    //
    - Modify TTreeFormula::DefinedVariable to take into account the case
      of a Tree with two TClonesArray referencing two classes with identical
      data member names.
      For example two TClonesArray fTracks and fMCTracks.
      One can do:
        Root > ntuple->Draw("fTracks.fPx")
        Root > ntuple->Draw("fMCTracks.fPx")

    - Masa fixed a bug in CINT/Inherit.

    - Fix a problem in TKey::Create when option compression is used.
      In some rare cases, the input parameter (nin) to mmuzip was wrong.

    - Implement a new constructor in the TArray classes (was already in TArrayF).

    - Modify TPad::CreateNewPolyLine in case of log scales.
      When a polyline was created with the graphics editor, the input points
      were not taking into account log scales in the current pad.

    - Change format in TGraph::SavePrimitive.
      Remove a comma left from a previous calling sequence.

    - Modify TInterpreter to include TWin32HookViaThread.

    - Implement TTree::Project (interface to TTree::Draw).

    - Activate option Bar in TH1::PaintHist.
      Because the TGraph object created by TH1::PaintHist uses gStyle
      for the Bar Offset and Width, the TH1 baroffset and width data members
      are temporarily copied to gStyle before drawing. gStyle is reset at
      the end of TH1::PaintHist.
    //
    // 06/05/1997  09.49.12  by  Rene Brun
    //
    - Do not print error messages when drawing empty 2-d histograms.
    //________________________________________________________________________
    //
    //::>          VERSION  1.01/01   06/05/97 08.06.28
    //
    // 06/05/1997  08.04.52  by  Rene Brun
    //
    - Implement possibility to fit a sub-range of a TGraph.

    - Modify TTree::Scan to work with columns that are strings.
      The width of columns printed by Scan is variable. It is computed
      automatically from the maximum length of a string variable.
      The interface is via TTreeFormula::PrintValue.

    - Added one parameter to TTreeFormula::PrintValue.
    //
    // 04/05/1997  20.21.01  by  Valery Fine(fine@vxcern.cern.ch)
    //
    - TWiNTSystem  - change the CTRL-C handle. Now it terminates WIN32
                      application. So far it crashes ROOT.

    - TGLKernelABC - Bool_t fTrueColorMode data-member and methods are introduced

    - TGLKernel::SetCurrentColor(Int_t color) - respects the fTrueColorMode to set color
                        as result OpenGL works with all kind of Video mode under Windows
    //
    // 02/05/1997  16.13.01  by  Rene Brun
    //
    - Fix a problem in h2root. The name of the leafcount was changed
      to lower case, including the first letter. First letter should be left
      unchanged.
    //
    // 30/04/1997  19.16.50  by  Rene Brun
    //
    - Merge with Fons version. This includes changes in $Copyright and $TMath includes.
      Cosmetic changes in Math.
      Add gEnv in cint_base.

    - Merge with Valery's version.
      New deck MakeDistSourceWindows in $kumacs.
      Add "SetLineIsProcessing" in Application and Rint.
      Changse in GWin32, $TGLKernel and glkernel.
    //________________________________________________________________________
    //
    //::>          VERSION  1.01/00   30/04/97 12.46.21
    //
    //
    // 30/04/1997  12.14.11  by  Fons Rademakers
    //
    - TObjectTable: removed most of the static member functions. Class is not
      a singleton anymore. However, static member AddObj() may only be called
      by system (in TObject::TObject) to update the global gObjectTable.

    - Implemented primitive garbage collector as a set of static member functions
      of TCollection. The purpose of this garbage collector is to make sure
      and object stored in many different collections (all referenced from
      the same master object) get deleted only once. For example, an object
      of class Event:

      class Event {
         private:
            TList      fTracks;
            THashTable fVertex1;
            THashTable fVertex2;
         ...
      };

      contains three collections. Each collection may contain pointers to
      the same objects (tracks). Now in case it is not clear which collection
      is the owner of the objects on should use the garbage collector in the
      Event destructor. For example:

      Event::~Event()
      {
         TCollection::StartGarbageCollection();
         fTracks.Delete();
         fVertex1.Delete();
         fVertex2.Delete();
         TCollection::EmptyGarbageCollection();
      }

    - TServerSocket: non-blocking I/O is now correctly supported.
      TServerSocket::Accept() now returns -1 in case of non-blocking I/O
      and no connection available.
    //
    // 30/04/1997  14.31.56  by  Rene Brun
    //
    - Add new member function TBuffer::SetReadMode and TBuffer::SetWriteMode.

    - Changes in TBasket and TBranch to allow adding data to a TTree
      in an old Root file. (file must be open in UPDATE mode).
    //
    // 29/04/1997  15.21.19  by  Valery Fine(fine@vxcern.cern.ch)
    //
    - TROOT::TROOT  - the default value for the fLineIsProcessing data-member
                      was changed from 0 (zero) to 1. This prevents any mouse
                      activities under Windows unless program creates TRint
                      object. Otherwise the stand-alone ROOT-based application
                      is crashed just the user touches the graphics windows
                      unexpected.
    - TRint::TRint  - Call gROOT->SetLineHasBeenProcessed() to change the state
                      of the gROOT->fLineIsProcessing counter and allow the user
                      to interact with TCanvas objects.