"Improvements" to soft linking procedure to remove reliance on most recent (local) version of SCons
bug fixes
Create softlinks within SConscript, removing dependence on local
version of SCons.  Tested with SCons version 2.1.0 and newer on
Linux and MacOSX.
Unbundle SCons distribution.

Replace ./scons/scons.py with a wrapper script that starts the installed
version of scons. In this way, any packages relying on the bundled version
don't immediately break. This might be removed in the future.

Closes #18
Wrap up all info about VarTypes in a single encapsulated structure in THaVar.C

This also fixes typos for (U)Long64_t** in THaVar::GetTypeName(itype)
and broken THaVar::GetTypeSize(itype)
Add support for std::vector containers to global variable system

Supported types are vector<int>, vector<unsigned int>, vector<float>
and vector<double>. A vector variable can be defined by calling and
one of the overloaded instances of THaVarList::Define or the generic
THaVar constructor. Defining std::vector variables via RTTI is not yet
implemented.

Closes #22.

As part of this, THaVar gets a new member variable fDim to hold the
current size of object arrays and vectors.  fDim replaces the
problematic local static variable in GetObjArrayLenPtr() with
per-variable storage. The GetObjArrayLenPtr() function has been
replaced by GetObjArrayLen().  This fixes #26.

Also, change THaArrayString::fNdim from Byte_t to Int_t. Really no
need to be that petty.
Make THaVarList a THashList instead of a TList for better performance.

(Almost) everything just happens automagically as we inherit from
THashList instead of TList. THaVarList::Find(const char* name)
automatically makes hash table lookups, vastly improving the search
speed if a large number of global variables is defined.

Also, make THaVarList the owner of its objects, so as the list is
deleted, so are all of its elements. This was already the previous
behavior; this just eliminates duplicate code.

Closes #27.
Modify output of THaVar::Print(). Assume variable-size arrays as default.

Non-array variables no longer print "[1]" after the type name.
Fixed-size arrays now print "=[n]", where n is the number of elements.
Multi-dimensional arrays print "=[n,m,...]", and variables-size arrays
print "[n]".

Requires small modifications to THaArraysString.
Moved addition of version number to shared libraries from src/SConscript
to SConstruct, where it should be.  This is important for use with
extensions which require the Hall A libraries (like hcana, for example).
Rewrite THaDecData with object-oriented raw data type classes BdataLoc

Implemented a new BdataLoc class hierarchy that handles (decodes) raw
event data from single front end channels and related information.
Supports either crate/slot/channel addressing (including multihit
channels) or crate/header/offset addressing (data identified by header
words in the event buffer). Also supports a new data type Roclen that
reports the event length in a given crate and a new TrigBitLoc class
to handle Hall A-style trigger bits. This last one should eventually
go into the Hall A library. See the top of BdataLoc.C for the full
list of definitions (calls to BdataLoc::DoRegister).

This is pretty much what I had in mind in July 2007 when I wrote the
FIXME comments in the original.

The VDC efficiency calculation has been moved into a separate VDCeff
physics module that will be checked in later.

The database may either be in the legacy format that was understood by
the original code or, preferably, in a new key/value format. For the
latter, one needs database keys like

D.crate = \
  syncadc1, 1, 25, 16,  \
  syncadc2, 2, 24, 48,  \
...

where "crate" corresponds to the BdataLoc type one wants to define for
the given variable names. There is exactly one key per BdataLoc type
(NOT per variable!). The key's value is one long string (continued
with \ continuation marks if necessary) containing n-tuples of
configuration parameters, name first. Spaces, commas and tabs are
accepted as delimiters in the database values. Most BdataLocs need
4-tuples as in the example above), however trigger bit variables take
6-tuples:

D.bit = bit1  3  5  64  0  1500

where the values indicate crate, slot, channel, cutlo and cuthi. The
latter two values are the lower and upper limits of the TDC cut to
apply to identify a set bit. (Ask Bob for details on how this hardware
is set up.)

Support for the legacy file format can be enabled by defining of
DECDATA_LEGACY_DB.  This is currently the default. In that case,
database files are only assumed to be in new format if they have a
first line comment containing "Version: 2".

The class no longer defines any histograms. Most of the histos in the
original were for the VDC efficiency calculation anyway. If you need
to histogram roclen12 or roclen16, for example, define roclen
variables here and histograms of these variables as output
definitions.

Use Print("FULL") after Init() to see all defined variables, including
channel definitions.

An example key/value type database file is provided in DB/20121201/db_D.dat
Add capability to use cppcheck

Invoked with 'scons cppcheck=1'

cppcheck must be installed and in PATH ... if not, an informational error message is generated.