
Regina - A Normal Surface Theory Calculator

    This file contains specific details of most changes, including
    changes to the API for the calculation engine.

    For general highlights of the changes between releases, see
    HIGHLIGHTS.txt in the same directory as this file.

Version 4.4  [ 25 November, 2007 ] - The "hug a Mac today" release.

    OVERALL:
        - Builds and runs happily on MacOS!  Requires Fink to be installed.
        - Tidied up the directory hierarchy a little.  The old engine/engine/
          is now just engine/, and the old engine/doc-files/ is now
          engine/doxygen/.
        - Thanks to Ryan Budney for his many contributions to this release!
    CENSUS:
        - Expanded the closed non-orientable census to 11 tetrahedra.
        - Expanded the closed orientable census to 11 tetrahedra, and
          split it into three data files.  The 9-tetrahedron and
          10-tetrahedron files are shipped with Regina as before (as
          closed-or-census.rga and closed-or-census-large.rga); the
          11-tetrahedron file is extremely large and must be downloaded
          separately from the Regina website.
        - Modified the closed orientable census files to use more
          consistent choices of monodromy matrices for torus bundles.
        - Clarified the matrix notation used with graph manifolds.
    ENGINE:
        Class NClosedPrimeMinSearcher:
            - Census generation is much faster for larger numbers of
              tetrahedra, due to new tests for high-genus vertex links.
            - Also made census generation more efficient by pruning on
              high-degree edges (as well as the usual low-degree edges).
        Class NDoubleDescriptor:
            - Now a standalone class, since the base NVertexEnumerator
              has been removed.
            - Made all member functions static.  Objects of this class
              can no longer be created.
        Class NFacePairing:
            - Modified writeDot() to behave well with ancient versions
              of Graphviz.
        Class NHomologicalData:
            - New class for computing all sorts of detailed homological
              information for a manifold; thanks to Ryan Budney for this.
        Class NLargeInteger:
            - New routine divisionAlg() for using the division algorithm.
            - New routine legendre() for calculating Legendre symbols.
        Class NMatrix:
            - New == and != operators for element-by-element comparison.
        Class NMatrixInt:
            - Added a set() routine to the python interface for setting
              matrix elements (which was previously not possible in python).
            - Made matrix multiplication available in the python interface.
            - Added a python-only variant of initialise() that fills a
              matrix given a complete list of elements.
        Class NMatrixRing:
            - New routine det() for fast calculation of matrix determinants.
            - New convenience routine isIdentity().
            - Changed the return type of operator * from a raw pointer to a
              std::auto_ptr, to make it easier to multiply matrices inside
              temporary expressions.
            - Added a new multiplyAs() template routine that multiplies but
              (unlike operator *) returns a subclass of NMatrixRing.
        Class NMarkedAbelianGroup, NHomMarkedAbelianGroup:
            - New classes for working with groups defined by chain
              complexes; thanks to Ryan Budney for these.
        Class NPacket:
            - New routine reparent() to simplify ownership issues when
              using Python scripting.
        Class NPerm:
            - Micro-optimised routines that are called extremely frequently,
              such as sign().
        Class NPrimes:
            - New class that provides a more sophisticated infrastructure
              for prime factorisation than the old factorise() and
              primesUpTo() routines.
        Class NRational:
            - New routine abs() for calculating absolute value.
            - New routine doubleApprox() for converting to a real number.
        Struct NSatAnnulus:
            - New routine attachLST() to help with Seifert fibred spaces.
        Class NSFSpace:
            - Updated reduce() to make the best possible decisions on
              whether to reflect all fibres in cases where this is
              possible (previously it made faster decisions but
              occasionally missed some more subtle reductions).
            - Enhanced construct() to support the triangulation of all
              Seifert fibred spaces over the 2-sphere without punctures
              or reflector boundaries.
        Class NTetrahedron:
            - New routine orientation() for tracking orientation.
        Class NTorusBundle:
            - Greatly improved monodromy matrix reduction, to the point
              where equivalent torus bundles should give equal matrices.
            - Fixed a bug in the matrix reduction for non-symmetric
              matrices in non-orientable manifolds (sometimes the
              transpose matrix was obtained instead of the correct matrix).
        Class NTriangulation:
            - New routine layerOn() for performing layerings.
            - New routine dehydrate() for extracting Callahan-Hildebrand-Weeks
              dehydration strings.
            - Optimised the skeletal calculations, which now run *much* faster.
            - Renamed getEulerCharacteristic() to getEulerCharTri(), since for
              ideal triangulations this differs from the Euler characteristic
              of the corresponding compact manifold.  The old name is kept as
              an alias but is now deprecated.
            - Added a new routine getEulerCharManifold(), which *does* calculate
              the Euler characteristic of the corresponding compact manifold.
            - Fixed a crash in splitIntoComponents() that occurred when
              the triangulation skeleton had not yet been calculated.
        Class NVertexEnumerator:
            - Removed.  This abstract class existed to support multiple
              vertex enumeration algorithms, but in reality we're only
              using double descriptor anyway.  The virtual template
              member functions caused problems with g++-4.2, which was
              the final push.  NDoubleDescriptor is now a standalone class.
        Routine smithNormalForm():
            - New five-argument version that not only calculates the Smith
              normal form but also returns appropriate change of basis
              matrices; thanks to Ryan Budney.
        Routines columnEchelonForm() and preImageOfLattice():
            - New routines for working with matrices and homomorphisms;
              thanks again to Ryan Bydney.
        Routines factorise(), primesUpTo():
            - Deprecated in favour of routines from the new NPrimes class.
        Routine clonePtr():
            - New routine to assist copy constructors for classes that
              compute data on demand.
    USER INTERFACE:
        - New Algebra -> Cellular Info tab containing a variety of new
          homological data for triangulations; thanks to Ryan Budney.
        - Graphs now look better when drawn using an old Graphviz 1.x
          (previously the graphs were only tested under Graphviz 2.x).
        - Better infrastructure for determining the status of the
          current Graphviz installation.  For version 1.x, Regina now
          insists on using dot, since the old neato 1.x cannot handle
          multiple edges.
        - Removed the Crush column from normal surface lists, since it has
          never contained any information beyond "N/A" or "Unknown".
        - The Regina reference manual is now called the Regina handbook,
          for consistency with other KDE applications.
    PYTHON:
        - The regina-python tool has new options -i/--interactive (run a
          script and leave the interpreter open) and -n/--nolibs (do not
          load any of the normal user libraries).
    UTILITIES:
        trisetcmp:
            - Now outputs more appropriate messages when subcomplex testing
              (previously the same messages were used for both subcomplex
              testing and isomorphism testing).
    TEST SUITE:
        - Added a new test suite for python bindings, in addition to the
          usual C++ test suite that is already present.
        - Added tests for the NPerm class.
        - Added tests for vertex link calculations.
        - Added tests for the orientable double cover of a triangulation.
        - Added tests for the new NPrimes class.
        - Added division algorithm tests for NLargeInteger.
        - Added tests for the new NHomologicalData class.
        - Added tests for triangulation dehydrations and rehydrations.
        - Initial work on tests for the NRational class.
    BUILD ENVIRONMENT:
        - Updated libtool from version 1.5a to 1.5.22 with Debian patches
          (required for MacOS support).

Version 4.3.1  [ 5 May, 2006 ]

    ENGINE:
        Class NClosedPrimeMinSearcher:
            - Improved speed by adding additional face pairing graph
              tests; see math.GT/0604584 for details.
            - Made a very slight improvement in speed by testing for
              extremely high degree edges.
            - Fixed memory leak (the destructor was not deallocating some
              internal arrays).
            - Minor changes to the behaviour of mergeEdgeClasses()
              (might return only some flags instead of all flags).
        Class NFacePairing:
            - New constructor for building the face pairing of an
              existing triangulation.
            - New routines hasOneEndedChainWithStrayBigon() and
              hasTripleOneEndedChain() for testing for more types of
              graphs that cannot appear in a closed census.
            - New routines hasSingleStar(), hasDoubleStar() and
              hasDoubleSquare() for investigating larger face pairing graphs.
            - New routines writeDot() and writeDotHeader() to assist
              with graph visualisation.
        Routine readOrb():
            - New routine for importing Orb / Casson triangulations;
              thanks to Ryan Budney for contributing this import filter.
        Routine readSnapPea():
            - Verifies that the first line of the file is "% Triangulation",
              instead of simply testing for the '%' and ignoring the rest.
    USER INTERFACE:
        - Now displays face pairing graphs in the triangulation viewer, using
          Graphviz for the rendering (see the Skeleton tab).  This required
          splitting the main Skeleton tab into two smaller child tabs.
        - New configuration options for the Graphviz executable and the
          default Skeleton child tab.
        - No longer crashes when attempting to clone the root packet
          (it simply displays an error message instead).
        - Added a workaround for the icon problems that arise when using
          GNU/Linux distributions with buggy icon themes.
        - Added 48x48 and 64x64 icons for Regina and its data files.
    TEST SUITE:
        - New tests for recognising bad and otherwise interesting subgraphs
          within face pairing graphs.

Version 4.3  [ 27 March, 2006 ]

    OVERALL:
        - Expanded the closed non-orientable census to 10 tetrahedra.
        - Expanded the closed orientable census to 10 tetrahedra, and
          split it into two data files (large and small).
        - Updated postal address for the Free Software Foundation.
        - Bibliographic updates for the reference manual.
        - Fixed some harmless compiler warnings, and tightened syntax
          to adhere to the requirements of gcc 4.1.
    ENGINE:
        Class LessDeref:
            - New utility class for working with pointers in the Standard
              Template Library.
        Class NGluingPerms, NGluingPermSearcher, NClosedPrimeMinSearcher:
            - Significant overhaul.
            - Moved gluing permutation search routines into new classes
              NGluingPermSearcher and NClosedPrimeMinSearcher.
            - Supports partial depth-based searching (by passing a
              non-negative depth parameter to the new runSearch() routine).
            - Tracks both vertex and edge links using a modified union
              find structure to prune more braches of the search tree
              where possible.  This makes an incredible difference to the
              census running time.  Pruning takes place on non-orientable
              vertex links, too many or too few vertices or edges, low
              degree or invalid edges, conical faces, and L(3,1) spines.
        Class NGraphLoop, NGraphPair, NGraphTriple:
            - New families of graph manifolds.
        Class NKnot:
            - Removed this unwritten placeholder class.
        Class NLayering:
            - New class to help follow through layerings of tetrahedra
              within a triangulation.
        Class NLayeredSolidTorus:
            - New routine formsLayeredSolidTorusTop() for finding an LST
              from the top end instead of the bottom.
            - New routine transform() for following through an isomorphism.
        Class NLayeredTorusBundle, NTxICore, NTxIDiagonalCore, NTxIParallelCore:
            - Added for recognition of layered surface bundles.
        Class NListOnCall:
            - New class for expensive and rarely used hard-coded lists.
        Class NManifold:
            - Routine writeTeXName() no longer provides wrapping dollar signs.
            - New operator < for ordering manifolds deterministically.
        Class NMatrix2:
            - New specialised class for working with 2-by-2 integer matrices.
        Class NPacket, NPacketListener:
            - New NPacket routine sortChildren().
            - Packet listeners are now unregistered immediately *before*
              packetToBeDestroyed() is called.  This avoids unpleasantries
              when a listener tries to unregister itself during this call.
        Class NPerm:
            - The assignment operator now returns a reference instead of void.
        Class NSatAnnulus, NSatBlock, NSatRegion, NBlockedSFS, NBlockedSFSLoop,
                  NBlockedSFSPair, NBlockedSFSTriple, NPluggedTorusBundle,
                  plus subclasses and other support structures:
            - New classes for recognising and describing Seifert fibred spaces
              and other graph manifolds that are built using saturated blocks.
        Class NSFS, NExceptionalFibre:
            - Removed; see below.
        Class NSFSpace, NSFSFibre:
            - Complete overhaul of the Seifert fibred space classes.
            - Now more general, supporting both orientable and
              non-orientable 3-manifolds as well as base orbifolds with
              reflector boundary components.
            - Classes have been renamed from the old NSFS / NExceptionalFibre
              to make it clear that large-scale changes have taken place.
        Class NSFSAltSet:
            - New class for finding alternative simple representations of
              the same bounded Seifert fibred space.
        Class NSnapPeaTriangulation:
            - Added a boolean argument to the constructor that permits the
              SnapPea kernel to work with closed triangulations if the user
              really wants to allow it.
        Class NStandardTri:
            - Routine writeTeXName() no longer provides wrapping dollar signs.
        Class NTorusBundle:
            - New class of 3-manifolds describing torus bundles over the
              circle.
        Class NTriangulation:
            - Combined isomorphism and subcomplex testing routines into
              a single all-in-one routine to avoid excessive code reuse.
            - Added new subcomplex testing routine findAllSubcomplexesIn(),
              in which all matches (not just the first) are returned.
            - Routines getTetrahedronIndex(), getComponentIndex(),
              getBoundaryComponentIndex(), getFaceIndex(), getEdgeIndex()
              and getVertexIndex() now returned signed instead of unsigned
              longs, so that -1 can be returned if the object could not
              be found.
    USER INTERFACE:
        - Added a configuration option that allows the SnapPea kernel to
          work with closed triangulations.
        - Fixed the crash when deleting a triangulation that is currently the
          target of an isomorphism/subcomplex test.
        - Fixed a crash that sometimes occurs in large files when deleting
          a triangulation that is currently being viewed.
        - Fixed extremely slow updates in the triangulation composition tab
          for very large data files.
        - Text and script packets now open with the cursor at the top
          instead of the bottom.
    PYTHON:
        Class NSnapPeaTriangulation:
            - Offers the additional zero-argument routine volumeWithPrecision()
              as a way of returning the precision of the volume calculation.
    UTILITIES:
        tricensus-mpi:
            - Significant overhaul.
            - Now supports finer-grained subsearches via --depth.
            - Better logging.
            - Only writes .rga data files for cases in which at least
              one triangulation was found.
            - New option --dryrun for a quick overview of the search space.
        tricensus-mpi-status:
            - New tool for parsing tricensus-mpi logs.
        trisetcmp:
            - Support subcomplex testing as well as isomorphism testing.
    TEST SUITE:
        - Don't enforce precision limits for degenerate snappea volume
          testing, to allow for flexibility in floating point behaviours
          of different chipsets.
        - Added tests for NIsomorphism.

Version 4.2.1  [ 18 September, 2005 ]

    OVERALL:
        - Added a chapter on imports and exports to the reference manual.
        - Expanded the closed non-orientable census to eight tetrahedra.
    ENGINE:
        Overall structure:
            - Fixed "regina-engine-config --cflags", which wrote includes
              for Regina's dependencies but not for Regina itself (sigh).
        Class NIsomorphism:
            - New routine random() for generating random isomorphisms.
            - New routine apply() for permuting the tetrahedra and
              vertices/faces of an existing triangulation.
            - New routine isIdentity() for testing for identity isomorphisms.
        Routine writeSnapPea():
            - Add a precondition that the triangulation has no boundary faces.
    USER INTERFACE:
        - Refuse to export a triangulation to SnapPea format if it
          has boundary faces.
    UTILITIES:
        trisetcmp:
            - New utility for comparing two different sets of triangulations.

Version 4.2  [ 7 July, 2005 ]

    ENGINE:
        Overall structure:
            - Included portions of the SnapPea kernel!  Thanks again to
              Jeff Weeks for his support.
            - Added a regina-engine-config script to make it easier to
              build Regina's calculation engine into other applications.
        Class NExampleTriangulation:
            - Added to facilitate construction of several different
              ready-made sample triangulations.
        Class NFacePairing:
            - New routine hasWedgedDoubleEndedChain.
        Class NLayeredSolidTorus:
            - New routine isLayeredSolidTorus for classifying an entire
              triangulation component.
        Class NPacketListener:
            - Added an extra boolean argument to childWasRemoved() to indicate
              the situation in which the parent is also being destroyed.
        Class NSnapPeaCensusManifold, NSnapPeaCensusTri:
            - Added to aid recognition of very small SnapPea census
              triangulations.
        Class NSnapPeaTriangulation:
            - Added to give Regina triangulations access to the SnapPea kernel.
        Class NTriangulation:
            - New routine finiteToIdeal() for extending a triangulation.
            - New routines insertConstruction() and dumpConstruction() to
              make it easier to hard-code triangulations in source code.
            - Fixed vertex link calculations, which were previously
              incorrect if a triangulation contained invalid edges.
            - Fixed bug in twoZeroMove() which caused a crash in some cases
              involving triangulations with boundary.
        Class NTrivialTri:
            - Added recognition of one-tetrahedron balls.
    USER INTERFACE:
        - Include several example triangulations in the triangulation
          creation dialog.
        - Allow exporting a triangulation to C++ source.
        - Renamed "Ideal to Finite" as "Truncate Ideal Vertices" in the menu.
        - Include a padlock in the corner of a packet icon if the packet
          is uneditable.
        - Tighter thread safety in the GUI.  This is required because some
          calculations (such as surface enumeration) run in a separate thread.
        - Worked around a Qt bug that caused a crash when pressing a key in
          a table of normal surfaces or matching equations.
        - Fixed a bug in which GAP output was unparseable due to GAP
          inserting spaces where Regina was not expecting them.
    UTILITIES:
        tricensus-mpi:
            - New census manager for use on MPI-enabled clusters.
    TEST SUITE:
        - Added tests for SnapPea calculations.
        - Further additions to the triangulation tests, in particular
          involving invalid and non-standard triangulations.
        - Beginning of a series of tests for elementary moves.
    BUILD ENVIRONMENT:
        - Updated libtool to version 1.5a.  Hopefully this will make
          things better for Darwin/Fink.
        - Requires KDE >= 3.2, so that the XDG applications directory can
          be used for the desktop file.
        - Verifies in the configure script that shared libraries are
          enabled where necessary (i.e., in the KDE and Python interfaces).
        - Better magic in the configure script for finding the correct
          boost.python libraries.
        - Fixed a bug in the configure script whereby -g stripping was
          too agressive, resulting in a compile failure for the python
          interface under some environments.

Version 4.1.3  [ 25 July, 2004 ]

    OVERALL:
        - Included the closed hyperbolic census of Hodgson and Weeks.
        - Made explicit in the reference manual introduction where the
          example files can be found.
    PYTHON:
        - For most objects, == now works like C++ pointer equality
          instead of Python object equality.  That is, it tests whether
          the Python wrappers point to the same C++ object, not whether
          the Python wrappers are in fact the same wrapper.
        - Fixed scripting in the GUI, which was broken with python 2.3
          (indented blocks were treated as complete after just one line).
        - Added a sample python session illustrating progress reporting.
    USER INTERFACE:
        - Added an "Open Example" menu item for easy access to the
          sample files.
        - Allow the choice of text editor component to be configured.
        - Several fixes to make Regina work properly with the vimpart,
          including work-arounds for bugs in the vimpart itself.
        - Fixed the massive resource drain while editing a script's
          variable table in a heavily populated data file.
        - Fixed crashes that occured when deleting packets while a
          drop-down packet chooser is in use elsewhere.
        - Tightened up the handling of read-only mode for internal
          components.  Also removed some loopholes that allowed editing
          of uneditable packets.
        - Improved handling of keyboard focus.
        - Changed "Python Reference" to point to the modules index
          instead of the title page.

Version 4.1.2  [ 14 June, 2004 ]
    OVERALL:
        - Updated configure scripts so that the python interface builds
          out of the box on a larger number of platforms (specifically Red Hat
          and Fedora Core are now supported).  Many thanks to Craig Macintyre
          for his patience and assistance with this.
        - More updates to the troubleshooting section; overhauled the
          README.txt and website to hopefully make everything clearer
          and the important information easier to find.
        - Added a suggested form for citing Regina.
        - Updated INSTALL.txt to reflect current --prefix guessing.
    ENGINE:
        Class NTriangulation:
            - Added simplifiedFundamentalGroup() to allow external bodies
              such as GAP to simplify group presentations.
    USER INTERFACE:
        - Allow users to simplify fundamental groups using GAP.
        - Added "Education" to the categories for the desktop file, since
          KDE seems adamant about having no separate maths/science menu.
          Anything is better than showing up in Lost & Found. :)
        - Fixed compile error when building against an STL-enabled Qt
          (thanks to Robert Myers for spotting this one).

Version 4.1.1  [ 24 April, 2004 ]
    USER INTERFACE:
        - Fixed compile error when building against Python 2.3.
        - Added "What's This?" button to main/packet window decorations.

Version 4.1  [ 7 March, 2004 ]
    OVERALL:
        - Further enhancements to the reference manual, including more
          detailed explanations in the main body as well as a new index.
    ENGINE:
        Class NNormalSurface:
            - New routine doubleSurface().
            - Added findNonTrivialSphere() and findVtxOctAlmostNormalSphere()
              to support 0-efficiency algorithms.
        Class NProgress:
            - Added timing utilities getRealTime() and totalCPUTime().
        Class NTriangulation:
            - New 0-efficiency / decomposition routines splitIntoComponents(),
              connectedSumDecomposition(), isThreeSphere(), knowsThreeSphere()
              and makeZeroEfficient().
            - New Seifert fibred space constructions insertAugTriSolidTorus()
              and insertSFSOverSphere().
    USER INTERFACE:
        - Actions specific to each packet type now appear in their own
          context-specific menus, i.e., a "Triangulation" menu appears
          when a triangulation is open, etc.
        - Added "Please Wait" dialogs during slow operations.
        - Thorough "What's This?" support and tooltips offered across the
          entire user interface.
        - New tip-of-the-day support.
        - More icons for triangulation actions.
        - Updated the .desktop file and mimetype tests to work correctly
          with KDE 3.2.
    UTILITIES:
        tricensus:
            - Fixed bug in which --genpairs created empty output files.
    TEST SUITE:
        - Added tests for connected sum decomposition.

Version 4.0.1  [ 26 January, 2004 ]
    OVERALL:
        - The ./configure script now takes a guess at the correct --prefix,
          runs sanity tests upon it and insists upon Qt >= 3.2.
        - Regina now ships with pregenerated manpages to avoid the need
          for docbook-utils and its complicated dependencies.
        - The troubleshooting section of the reference manual now
          includes compile-time problems and discusses the test suite.
    USER INTERFACE:
        Class GridListViewItem:
            - Added to centralise support for list views with grids.
            - Fixed a compile error with Qt versions 3.1 and earlier.

Version 4.0  [ 20 December, 2003 ]
    ENGINE:
        Class NAngleStructureList:
            - Enumeration routine now takes an optional progress manager
              and can run in a separate thread.
        Class NGroupPresentation:
            - Improved simplification of group presentations.
        Class NNormalSurface:
            - Using NProperty to store calculable properties.
            - Using NTriBool instead of 1/-1/0 for orientability,
              two-sidedness and connectedness.
        Class NNormalSurfaceList:
            - Enumeration routine now takes an optional progress manager
              and can run in a separate thread.
        Class NProgress:
            - Removed isCancellable() since this is not really necessary;
              an operation may simply choose not to poll for cancellation
              requests.
            - Removed isChanged() and made the changed flag protected so
              subclasses can modify it directly.
            - Requires subclasses to adjust the changed flag on all
              public access/update routines.
            - Made cancel() const so that reading threads can use it.
        Class NProgressNumber:
            - New convenience routine incCompleted().
            - New lookup routine getNumericState().
        Class NTriBool:
            - Added for representing three-way booleans.
        Class NVectorMatrix, NVectorUnit:
            - Modification routines throw exceptions if called.
    USER INTERFACE:
        Class NAngleStructureCreator:
            - Displays progress and allows cancellation.
        Class NNormalSurfaceCreator:
            - Displays progress and allows cancellation.
        Class ProgressDialogNumeric:
            - Added for displaying progress using regina::NProgressNumber.
        Class PythonConsole:
            - Added Help menu for displaying scripting documentation.
        Class ReginaMain:
            - Added Python reference to Help menu.
        Class PythonManager:
            - New static routine openPythonReference() for displaying
              calculation engine documentation.
    TEST SUITE:
        - Added tests for angle structure enumeration and analysis.
        - Expanded normal surface tests to include trivial triangulations.
        - Added tests for fundamental group calculation and recognition.

Version 3.97  [ 24 November, 2003 ] - Final prerelease for version 4.0.
    OVERALL:
        - Ships with the 7-tetrahedron closed non-orientable census.
        - Compile-time configuration uses different tests for pthread, since
          the old tests were broken on some systems.
        - Added a Python caveats section to the reference manual.
    ENGINE:
        Class NEdge, NVertex:
            - Added getDegree() as an alias for getNumberOfEmbeddings().
        Class NGluingPerms:
            - Incorporate new results that allow us to discard more face
              pairings in a non-orientable census (see math.GT/0307382:v2).
        Class NLayeredSolidTorus:
            - Added routine flatten() to flatten a layered solid torus
              to a Mobius band.
        Class NMutex::MutexLock:
            - Added reference constructor as well as a pointer constructor.
        Class NNormalSurface, NNormalSurfaceVector:
            - Added routine isCentral() to test for central surfaces.
        Class NSimpleSurfaceBundle, NTrivialTri:
            - Added for recognition of trivial non-orientable triangulations.
    USER INTERFACE:
        Overall structure:
            - Split out common shell/part material into the separate
              library libregina-kdecommon.
            - Integrated python scripting into the graphical user interface.
              This is contained within libregina-kdecommon and is accessible
              through the main menu/toolbar and through the script editor.
            - Avoid using flat buttons where possible.
        Class ExportDialog:
            - New routine validate() to detect when there are no packets
              suitable for export.
        Class ExtTabCtl, PacketTabbedUI, PacketTabbedViewerTab:
            - Allow changing the current tab (this required a new extension
              class to KTabCtl).
        Class ImportDialog, NewPacketDialog:
            - New routine validate() to detect when there are no
              suitable parent packets.
        Class NNormalSurfaceCreator:
            - Allow the default coordinate system to be configured.
        Class NScriptUI, NTextUI:
            - Fixed problems with word wrapping and line endings in
              the embedded text editor.
        Class NTriangulationUI, NTriAlgebraUI:
            - Allow the initially visible tabs to be configured.
        Class NTriGluingsUI:
            - Implemented census lookup for triangulations.
            - Fixed a bug in the updating of tetrahedron labels when other
              tetrahedra are removed from a triangulation.
        Class PacketChooser:
            - New routine hasPackets() to detect empty packet choosers.
        Class ReginaPart:
            - Make File/Save fall back to File/Save-As for new files.
            - Make File/Save-As respect the automatic file extension setting
              and also check whether the selected file already exists.
        Class ReginaPreferences, ReginaPrefSet:
            - Many new configuration options.  In addition to those
              mentioned above, census data files and Python options can
              also be configured.
    TEST SUITE:
        - Added tests for normal surface enumeration and analysis.

Version 3.96  [ 31 October, 2003 ] - Second prerelease for version 4.0.
    OVERALL:
        - Added surface filter documentation to the reference manual,
          which brings it completely up to date with the GUI.
    ENGINE:
        Overall structure:
            - Yet more routines made const.
        Class NAbelianGroup:
            - Added global comparisons isTrivial() and operator ==.
        Class NMutex:
            - Now uses inner class MutexLock for locking and unlocking.
        Class NProperty, NPropertyBase, StoreValue, StoreConstPtr,
                StoreManagedPtr:
            - New classes for management of calculable object properties.
        Class NPropertyHolder:
            - Moved most of its functionality directly into NFile and
              replaced what was left with the new class NFilePropertyReader.
        Class NTriangulation:
            - Turaev-Viro invariants are now cached; this includes a new
              routine allCalculatedTuraevViro().
        Class ShareableObject:
            - Now derives from regina::boost::noncopyable.
    USER INTERFACE:
        Class NTriAlgebraUI:
            - Redesigned the algebra viewer to make it easier to read.
            - Incorporatd Turaev-Viro invariants into the UI.
        Class NTriCompositionUI:
            - Incorporated isomorphism / subcomplex testing into the UI.
            - Fixed crash when refreshing.
        Class PacketTabbedViewerTab:
            - Added to support tabbed UIs within tabbed UIs.
        Class ReginaPart:
            - Make the main window splitter remember its place when packet
              panes are changed.
    TEST SUITE:
        - Added tests for trivial triangulations and property handling.

Version 3.95  [ 12 October, 2003 ] - Prelease for version 4.0.
    GRAPHICAL USER INTERFACE:
        - Rewrote the entire user interface in C++ using the KDE
          libraries.  The result is much faster, cleaner and easier to
          maintain.  The old Java user interface is gone!  The user
          interface can be started by running "regina-kde".
    PYTHON:
        - Python scripting rewritten to use standard Python, not Jython.
          A python session can be started by running "regina-python".
        - The Python API has changed to be much more faithful to the C++
          calculation engine, especially with respect to global and static
          routines and constants.
        - All classes now sit directly within the module regina.
    ENGINE:
        Overall structure:
            - Fixed minor memory leaks.
            - Made more routines const.
            - Beginning to incorporate std::auto_ptr.
        Class Engine:
            - Removed since this is no longer necessary with the new
              python bindings.
        Class NAngleStructureList:
            - Made the enumerating constructor private and added the
              public replacement enumerate().
        Class NAugTriSolidTorus:
            - Changed to fit into the new NStandardTriangulation structure.
        Class NFacePairings:
            - Fixed bug in isCanonical().
        Class NGluingPerms:
            - Further optimisations for non-orientable census generation.
        Class NGroupPresentation:
            - Slightly improved group recognition.
        Class NHandlebody:
            - Added as a new 3-manifold class.
        Class NIsomorphism:
            - Allows an isomorphism with 0 tetrahedra.
            - Now derives from ShareableObject.
            - Supports boundary incomplete isomorphisms as well as
              complete isomorphisms.
            - Changed return types of const lookup routines from
              const T& to just T.
        Class NL31Pillow:
            - New class for identifying particular L(3,1) triangulations.
        Class NLargeInteger:
            - Added constructor and assignment taking a const std::string&.
            - Routine stringValue() now returns a std::string, not a char*.
        Class NLensSpace:
            - Changed to fit into the new NManifold structure.
        Class NLayeredChain:
            - Changed to fit into the new NStandardTriangulation structure.
        Class NLayeredLensSpace:
            - Changed to fit into the new NStandardTriangulation structure.
        Class NLayeredLoop:
            - Changed to fit into the new NStandardTriangulation structure.
        Class NLayeredSolidTorus:
            - Changed to fit into the new NStandardTriangulation structure.
            - Renamed isLayeredSolidTorusBase() to
              formsLayeredSolidTorusBase().
        Class NManifold:
            - New class to represent a 3-manifold irrespective of its
              triangulation.
        Class NNormalSurfaceList:
            - Made the enumerating constructor private and added the
              public replacement enumerate().
        Class NPacket, NPacketListener:
            - The NPacket destructor now orphans the packet if this has
              not already been done.
            - Added event listening for packets, including new class
              NPacketListener, new routines NPacket::listen(),
              NPacket::isListening() and NPacket::unlisten() and new
              class NPacket::ChangeEventBlock.
            - New NPacket routines moveUp(), moveDown(), moveToFirst()
              and moveToLast().
            - Reclassified member variables from protected to private.
        Class NPerm:
            - Routines edgeDescription() and faceDescription()
              implemented in the calculation engine.
        Class NPlugTriSolidTorus:
            - Changed to fit into the new NStandardTriangulation structure.
        Class NSFS:
            - Changed to fit into the new NManifold structure.
            - New overloaded routine insertFibre(long, long).
            - No longer allows illegal (0,k) fibres to be added.
            - More common names recognised.
        Class NSnappedBall:
            - Changed to fit into the new NStandardTriangulation structure.
            - Renamed isSnappedBall() to formsSnappedBall().
        Class NSpiralSolidTorus:
            - Changed to fit into the new NStandardTriangulation structure.
            - Renamed isSpiralSolidTorus() to formsSpiralSolidTorus().
        Class NStandardTriangulation:
            - New class to represent a standard triangulation.
        Class NTriSolidTorus:
            - Changed to fit into the new NStandardTriangulation structure.
            - Renamed isTriSolidTorus() to formsTriSolidTorus().
        Class NTriangulation:
            - New routine turaevViro() to calculate Turaev-Viro invariants.
            - Changed isIsomorphicTo() to return an entire isomorphism,
              not just whether an isomorphism exists.
            - New routine isContainedIn() to test for boundary
              incomplete isomorphisms.
        Routine isKnownSFS():
            - Removed in favour of
              NStandardTriangulation::isStandardTriangulation().
        File dehydration.h:
            - New routine readDehydrationList().
        File nsnappea.h:
            - Renamed to snappea.h.
        File stringutils.h:
            - Added routines startsWith() and stripWhitespace().

Version 3.2  [ 22 June, 2003 ] - The post-thesis release!
    OVERALL:
        - Added file format documentation to reference manual.
        - Calculation engine test suite is much enhanced.
        - Closed orientable census, closed non-orientable census and
          splitting surface signature census added to example files.
        - PhD thesis submitted on 30 May, 2003!
    ENGINE:
        Overall structure:
            - Using C++-style casts instead of C-style casts.
            - Signedness of chars is explicitly specified where it matters. 
        Class NBoolSet:
            - Using unsigned chars for byte codes.
        Class NCensus:
            - New constant PRUNE_P2_REDUCIBLE.
        Class NFacePair:
            - New class for working with pairs of face numbers.
        Class NFacePairing:
            - Added convenience operator [].
            - Added hasTripleEdge(), hasBrokenDoubleEndedChain(),
              hasOneEndedChainWithDoubleHandle() and associated routines.
            - Renamed private routine isCanonical() to
              isCanonicalInternal(), added public routine isCanonical()
              with no preconditions.
        Class NGluingPerms:
            - Uses new NFacePairing routines to identify certain
              situations in which no solutions are possible.
            - Uses a completely redesigned algorithm in the closed
              prime minimal P2-irreducible case.
            - Added pruning during permutation generation to eliminate
              edges identified with themselves in reverse.
            - Added pruning using low-degree edges in the non-orientable
              P2-irreducible case.
            - Allows a null automorphism list in findAllPerms().
        Class NLayeredLoop:
            - Renamed getIndex() to getLength().
        Class NLayeredSolidTorus:
            - Fixed a bug in isLayeredSolidTorusBase() that generated
              false positives in ideal triangulations.
        Class NNormalSurface:
            - Added routine knownCanCrush().  Currently this routine
              is next to useless; it is expected to be enhanced with
              future releases.
            - Property queries are now const since internal cached
              properties are declared mutable.
        Class NPerm:
            - Using unsigned chars for permutation codes.
        Class NPrismSpec, NPrismSetSurface:
            - New classes for dealing with triangular prisms defined by
              slicing along normal quads in a tetrahedron.  Currently
              these classes do very little.
        Class NSFS:
            - Better recognition of common names; now recognises all
              spaces with finite fundamental group.
        Class NTetFace:
            - Added routine setFirst().
            - Added copy constructor.
            - Operators ++ and -- are now implemented in all forms
              (++x, x++, --x, x--) and all have return values.
        Class NTriangulation:
            - New routine insertLayeredLoop().
            - 0-efficiency testing is done in quad space where possible.
            - Fixed a bug in which getHomologyH1Bdry() gave incorrect
              answers if the skeleton had not already been calculated.
            - New boundary queries hasTwoSphereBoundaryComponents() and
              hasNegativeIdealBoundaryComponents().
            - Renamed insertLensSpace() to insertLayeredLensSpace().
            - Interface-only skeletal query routines are now also
              implemented in the C++ calculation engine.
        Routine prior(), next():
            - Copied from the Boost C++ libraries for easy access to
              prior and following iterators.
    JAVA USER INTERFACE:
        Overall structure:
            - Incorporated engine enhancements listed above.
    UTILITIES:
        regconcat:
            - New utility for combining several data files.
        tricensus:
            - New option --minprimep2 for P2-irreducibility.
            - Explicitly verifies that all face pairings supplied on
              standard input are in canonical form.

Version 3.1  [ 18 October, 2002 ]
    OVERALL:
        - Added calculation engine test suite.
        - Environment variables now take precedence over configuration
          files when running the startup script.
        - Build process now uses standard autoconf/automake structure.
    ENGINE:
        Overall structure:
            - Added support for multiple vertex enumeration engines.
        Class NCensus:
            - Redesigned to do its work through classes NFacePairing and
              NGluingPerms.
            - Added support for arbitrary criterion functions.
            - Added support for splitting a census into pieces.
        Class NCompConstraint, NCompConstraintSet:
            - Added.
        Class NConeRay:
            - Removed in favour of new class NRay.
        Class NFacePairing, NGluingPerms:
            - Added to bear the brunt of census generation.
            - Massive optimisations and rewrites throughout census code.
            - Removed all thread yields, which were causing processes to
              have 0.0% CPU time on some systems.
        Class NIndexedArray:
            - Added routine validate().
        Class NKnot:
            - New (but incomplete) knot/link class.
        Class NLensSpace, NSFS:
            - Added getCommonName().
        Class NNormalSurfaceVector:
            - Replaced isCompatibleWith() with makeEmbeddedConstraints().
        Class NPerm:
            - Routine isIdentity() now implemented in C++ engine.
            - New routine setPerm(int, int).
        Class NTriangulation:
            - Fixed idealToFinite() which was newly broken in Regina 3.0.
            - Routine intelligentSimplify() now tries random 4-4 moves.
            - New routine collapseEdge().
            - Routine simplifyToLocalMinimum() now make boundary moves last
              and does not do book opening at all.
            - Fixed bug in 2-3, 3-2 and 4-4 moves that appears when faces of
              the old tetrahedra are glued to each other.
        Class NRay:
            - Added to replace old class NConeRay.
        Class NVector:
            - Added negate().
        Class NVertexEnumerator, NDoubleDescriptor:
            - Added to bear the brunt of normal surface enumeration and
              to allow different enumeration engines to be plugged in.
            - Caches some frequent calculations, resulting in a startling
              performance increase.
        Routine getVersionString(), getVersionMajor(), getVersionMinor(),
                testEngine():
            - Moved to engine.h and added to the C++ calculation engine.
        Routine reducedMod():
            - Fixed bug in the midpoint case.
        File nfile.h:
            - New file format constants to replace the constants removed
              with regina.h.
        File nhashmap.h, nhashset.h:
            - Added to deal with differing STL extension installations.
        File nknownmanifold.h:
            - Added global 3-manifold recognition routines.
        File nperm.h:
            - New arrays allPermsS2Inv, allPermsS3Inv, allPermsS4Inv.
        File regina.h:
            - Removed along with the constants it defined.
    JAVA USER INTERFACE:
        normal.algorithm.Algorithm:
            - Fixed bug in which isPacketEditable() was enforced even for
              non-modifying algorithms.
        normal.console.JPythonPacketConsole:
            - Optionally creates an additional Jython variable for direct
              access to some preselected packet within the tree.
        normal.mainui.NormalFrame:
            - New Jython consoles create an additional variable for the
              packet currently selected in the visual tree.
        normal.packetui.surfaces.NSFPropertiesEditor:
            - Don't enforce Euler characteristic <= 2 (singular surfaces
              can give other values).
    UTILITIES:
        tricensus:
            - Completely redesigned interface (now command-line based).
            - Supports splitting a census into pieces.
        tricensus-manager:
            - New utility for distributing a census amongst several machines.

Version 3.0  [ 28 June, 2002 ] - The "XML, about bloody time" release.
    OVERALL:
        - Moved from old impenetrable binary data files to new
          compressed XML data files.
        - Introduced various command-line utilities (see UTILITIES below).
        - Removed CORBA engine/interface.  It was too much hassle to
          maintain, and with Regina building on more platforms it has
          lots much of its usefulness.
        - JNI engine no longer requires autogenerated JNI headers.
        - Reference manual much enhanced.
    ENGINE:
        Overall structure:
            - Moved entire calculation engine into namespace regina.
            - The Great STL Port: replaced hand-rolled container classes
              with Standard Template Library classes.
            - Added numerous XML-related routines and classes.
            - Modified to also build under gcc3.
            - Removed configuration macro __MUTE_WARNINGS.
            - Replaced configuration macros __NO_IOS_NOCREATE and
              __NO_RAW_CASTING with their negations __USE_IOS_NOCREATE and
              __USE_RAW_CASTING which are optional in all situations.
            - Added configuration macros __HASH_NAMESPACE and
              __NO_NAMESPACE_ALIASES.
        Class NBoolVector, NDoubleList, NDynamicArray, NHashSet,
                NInfiniteArray, NIntMap, NOrderedPair, NPointerSet,
                NQueue, NSet, NStack, NString, NStringPair and associates:
            - All removed in favour of Standard Template Library classes.
        Class NAngleStructureList, NNormalSurfaceList:
            - New nested classes StructureInserter / SurfaceInserter.
        Class NAugTriSolidTorus, NTriSolidTorus:
            - Supports multiple ways of attaching layered chains.
        Class NFileInfo:
            - Added.
        Class NGroupExpressionTerm:
            - Changed from simple ordered pair to its own full class.
        Class NIndexedArray:
            - Added.
        Class NJNIEnumeration:
            - Added to aid the Java-C++ link.
        Class NLargeInteger:
            - Added third error-detection parameter to constructor
              NLargeInteger(const char*, int).
        Class NLayeredChainPair, NPlugTriSolidTorus:
            - Added for further subcomplex recognition.
        Class NLayeredLoop:
            - Added routine getSeifertStructure().
        Class NLensSpace:
            - Fixed bug causing reductions to be sometimes non-optimal
              (although still correct) - see modularInverse() notes below.
        Class NLocalFileResource:
            - Replaced static members MODE_READ, MODE_WRITE with static
              routines sysModeRead(), sysModeWrite().
        Class NNormalSurface:
            - Added routines isVertexLink() and isThinEdgeLink().
        Class NPacket:
            - Added routines to support arbitrary packet tags.
            - Finally changed getPacketName() to getPacketTypeName().
            - Removed tidyReadPacket().
        Class NPerm:
            - Added isPermCode().
        Class NScript:
            - Changed list of variables to a proper map and removed routines
              getVariableIndex() and removeVariableAt().
            - Insistance on unique variable names; in enforcing this
              routine addVariable() now returns bool.
        Class NSFS:
            - Added routine getHomologyH1().
        Class NSignature, NSigCensus, NSigPartialIsomorphism:
            - Added to deal with splitting surface signatures.
        Class NTriangulation:
            - Uses NIndexedArrays for skeletal elements for fast index lookup.
        File boostutils.h:
            - Added utility classes from the Boost C++ libraries.
        File hashutils.h:
            - Added various hash functions.
        File memutils.h:
            - Added allocation/deallocation functions.
        File stlutils.h:
            - Added extension Standard Template Library utility classes.
        File stringutils.h:
            - Added miscellaneous string manipulation routines.
        File zstream.h:
            - Added compressing and decompressing I/O streams.
        Routine modularInverse():
            - Fixed a rather nasty bug in gcdWithCoeffsInternal() that
              caused modularInverse() to sometimes give wrong answers.
        Routine readFileMagic():
            - Added to provide a format-independent file reader.
    JAVA USER INTERFACE:
        Overall structure:
            - Incorporated engine enhancements listed above.
        normal.console:
            - Added class JPythonPacketConsole.
        normal.engine.implementation.jni.JNIShareableObject:
            - Added static method sameCppPtr() which is necessary with gcc3.
        normal.exports:
            - Now exports to three different Regina data file formats.
        normal.mainui:
            - File information dialog is somewhat more informative.
        normal.mainui.NormalFrame:
            - Now supports opening a Jython console linked to a packet tree.
        normal.mainui.PacketPane:
            - Renamed getUI() to getPacketUI() to avoid clashing with j2sdk1.4.
        normal.options.NormalOptionSet:
            - Default "Display Icon" option changed from true to false.
        normal.packetui:
            - Resizing one coordinate column in various coordinate
              viewers now resizes all coordinate columns.
    UTILITIES:
        regconvert, regfiledump, regfiletype, sigcensus, tricensus:
            - Added.

Version 2.4  [ 4 April, 2002 ]
    OVERALL:
        - Much enhanced documentation.
        - Added SnapPea census and knot/link census to examples.
        - Added functionality changelog (HIGHLIGHTS.txt).
        - Added prepackaged Jython library directory.
    ENGINE:
        Overall structure:
            - Moved engine/imports to engine/foreign.
        Class NAngleStructure, NAngleStructureList, NAngleStructureVector:
            - Added.
        Class NConeRay:
            - Now a new class of its own accord, derived from
              NVectorDense and created to allow vertex solution routines
              to work in contexts outside normal surfaces.
        Class NNormalSurface:
            - Added getName() and setName().
        Class NNormalSurfaceVector:
            - Now derives from NConeRay, to which some routines have moved.
            - Changed declaration of createNonNegativeCone() to return
              cone faces as well as extremal rays.
        Class NPerm:
            - Added toString().
        Class NTriangulation:
            - Uses fewest possible tetrahedra in insertLensSpace().
            - Added insertRehydration(), makeDoubleCover().
        File nperm.h:
            - Added constant arrays orderedPermsS4, orderedPermsS3.
        Routine intersectCone():
            - Works with more generic cones by requiring cone faces to
              be passed as well as extremal rays.
        Routine writeSnapPea():
            - Added.
    JAVA USER INTERFACE:
        Overall structure:
            - Added readline/editline support using Bablok's wrapper classes.
            - Converted option REGINA_JNIDIR to a list of directories.
            - Option REGINA_OPTIONS_GLOBAL defaults to REGINA_HOME if
              /etc/regina does not exist.
        normal.ApplicationShell.CommandLineArguments:
            - Added.
        normal.Shell:
            - Allow filenames to be specified on the command-line.
            - Removed some arguments from getParameter().
            - Added getFileParameters().
        normal.exports:
            - Added class SnapPeaExporter.
        normal.imports:
            - Added class DehydrationImporter.
        normal.mainui:
            - Added more keyboard accelerators.
        normal.mainui.FilePane:
            - Added getFileType() and setFileType().
        normal.mainui.NormalFrame:
            - Added File->Info menu item.
            - Made various routines public so outsiders can manipulate
              the primary frame.
        normal.packetui.surfaces.CoordinateViewer:
            - Inserted editable surface name as first column.
        normal.packetui.triangulation.TriangulationCreator:
            - Creates triangulations from dehydration strings.

Version 2.3  [ 12 December, 2001 ] - The "Farewell Stillwater" release.
    OVERALL:
        - Makefile.options variables IDLTOJAVACLIENT and IDLTOCPPSERVER
          became IDLTOJAVA and IDLTOCPP with slightly more generic meanings.
    ENGINE:
        Overall structure:
            - Modified #includes to treat engine/engine, engine/jni
              and engine/corba as top-level include directories.
            - Removed config.h in favour of PD_MACROS in Makefile.options.
            - Removed configuration macros __NO_INCLUDE_PATHS and __BINARY_IO.
            - Introduced macro MY_ENGINE_OBJECT for CORBA wrapper classes.
            - Macros GET_ENGINE_OBJECT no longer crash when null is passed.
        Class NAugTriSolidTorus, NLayeredChain, NLayeredLoop, NLensSpace,
                NSFS, NSpiralSolidTorus, NTriSolidTorus:
            - New classes.
        Class NDiscSetSurface:
            - Modified parameters for adjacentDisc().
        Class NFace:
            - Added getType(), getSubtype(), isMobiusBand(), isCone().
        Class NHashSet, NHashSetIterator:
            - New classes.
        Class NNormalSurface:
            - Added crush().
            - Added isConnected(), isVertexLink(), isSplitting().
            - Fixed isOrientable() and added isTwoSided().
        Class NPacket:
            - Added makeUniqueLabels().
        Class NPerm:
            - Added operators = and != and constructor NPerm(const NPerm&).
        Class NTriangulation:
            - Added isZeroEfficient(), hasSplittingSurface(),
              knowsZeroEfficient() and knowsSplittingSurface().
            - Added extra condition to shellBoundary() covering two
              boundary faces plus two identified faces.
            - Added extra condition to twoZeroMove(NEdge*, ...) covering
              two boundary faces plus two identified faces.
            - Added fourFourMove().
        File ndisc.h:
            - Added routine discOrientationFollowsEdge().
        File nnormalsurface.h:
            - Added arrays triDiscArcs, quadDiscArcs, octDiscArcs.
        Routine hashMap(T*), hashMap(NString):
            - Added to support new class NHashSet.
        Routine readSnapPea():
            - Sets the new packet label to the SnapPea manifold name.
    JAVA USER INTERFACE:
        Overall structure:
            - Loading/saving local files is now possible even through CORBA!
            - Incorporated engine enhancements listed above.
            - Added Jython operator overloads to a number of classes.
        normal.engine.utilities:
            - Added NLargeInteger to replace java.math.BigInteger so
              Jython scripts can use native mathematical operators with
              arbitrary precision integers.
        normal.exports:
            - Created architecture for exporting to foreign file formats.
            - Added classes Exporter, ReginaExporter, ScriptExporter.
        normal.images:
            - A couple of new icons.
        normal.imports:
            - Redesigned import architecture; replaced old class
              ImportFilePane with new class Importer.
            - Imported packets now have appropriate packet labels (such
              as their names in the imported files).
            - The file dialog is now brought up before anything else is done.
            - Added classes ReginaImporter, ScriptImporter.
        normal.mainui.TopologyPane:
            - Fixed bug where icon was sometimes not displayed.
        normal.packetui:
            - Added a new TopologyPane argument to some routines to
              allow interfaces to manipulate the visual packet tree.
        normal.packetui.triangulation.CompositionViewer:
            - Displays more detailed information.
        normal.packetui.triangulation.SkeletonTableFrame:
            - Displays more details regarding face/vertex type.

Version 2.2  [ 7 October, 2001 ]
    OVERALL:
        - Documentation now DocBook-based; generates HTML and man pages.
        - Documentation now in docs/, not docs/normal/docs/.
        - Builds and runs under windows!
        - Added support for both global and local configuration files;
          configuration files are now called regina.conf.
        - Vastly reworked runtime scripts.
        - Tidied up Makefiles and CVS.
    ENGINE:
        Overall structure:
            - Ported CORBA stuff to omniORB3.
        Class NDoubleList, NDynamicArray:
            - Added operator = to the iterator classes.
        Class NEdge, NFace:
            - Added extra skeletal query routines.
        Class NGroupExpression, NGroupPresentation:
            - New classes.
        Class NLayeredLensSpace, NLayeredSolidTorus, NPillowTwoSphere,
                NSnappedBall, NSnappedTwoSphere:
            - New classes.
        Class NPacket:
            - Changed meaning of second (boolean) parameter to clone().
            - Added getNumberOfDescendants() and getNumberOfChildren();
              renamed totalTreeSize() to getTotalTreeSize().
        Class NTriangulation:
            - Added fundamental group as a new property.
            - Added a two-zero move about a vertex.
        File numbertheory.h:
            - Added modularInverse().
    JAVA USER INTERFACE:
        Overall structure:
            - Reads Regina options from directory $REGINA_OPTIONS_LOCAL
              and reads runtime options from system properties (which
              should be set by startup scripts).
            - Ported from JPython 1.1 to Jython 2.1-alpha1.
            - Now supports custom Jython libraries.
            - Improved support for mnemonics and keyboard accelerators.
            - Fixed tooltips in tables.
        normal.Application:
            - Moved fileExtension member into normal.mainui.FilePane subclasses.
        normal.Shell:
            - Dynamically finds JavaHelp classes so JavaHelp is not
              necessary for compilation.
            - Cleanly handles missing runtime options file.
            - Added a registry of all open Jython consoles.
        normal.algorithm:
            - Added class ElementaryMove.
        normal.console:
            - Major rearrangements; new class JPythonUtils now does most of
              the Jython work.
        normal.console.JPythonConsoleFrame:
            - Stores the root of the associated packet tree.
            - Allows saving the contents of the console to a file.
        normal.engine.implementation.corba.CORBAEngine:
            - Better error handling.
        normal.mainui:
            - Renamed SystemPane to TopologyPane and moved generic file
              editing functionality into FilePane to allow for editing
              different file types.
            - Much all-round cleaning up.
        normal.mainui.LibraryPane:
            - New class; allows editing of Jython libraries.
        normal.mainui.NormalFrame:
            - Moved console ownership routines into normal.Shell.
            - More appropriate enabling/disabling of menu items and buttons.
            - Edit menu hooks into current working file.
        normal.mainui.TopologyPane:
            - Closing a file closes all associated consoles.
            - Fixed the bug where double clicking on a tree item opens
              it three times.
            - Fixed bugs in the various fire... routines.
            - Improved interaction with the packet rename dialog.
            - Fixed the packet renaming bug in the visual tree display.
        normal.mainui.PacketTreeNode:
            - Replaced insertUnwrappedDescendants() with
              verifyDescendants() which actually does what it should; thus
              the refresh button now works properly.
            - Added findChildNodeIndex().
        normal.packetui.PacketUI:
            - Added subtreeWasDeleted().
        normal.packetui.packet.NContainerViewer:
            - Displays tree size statistics.
        normal.packetui.surfaces:
            - Coordinate tables in edge weight space now flag boundary edges.
        normal.packetui.surfaces.Coordinates:
            - Some routines now require the triangulation to be passed.
        normal.packetui.triangulation:
            - Pulled SkeletonTableFrame out into its own standalone class
              and turned it into a dialog.
        normal.packetui.triangulation.NTriangulationEditor:
            - Added triangulation component recognition.

Version 2.1.1a  [ 8 March, 2001 ]
    OVERALL:
        - Set up system for creating distributions.
        - Final tidying up for proper release.

Version 2.1.1
    OVERALL:
        - Added a CORBA interface to the engine.
        - Rearranged Makefiles and directory structure for CVS and
          SourceForge.
    ENGINE:
        Overall structure:
            - Split config.h into config.h and regina.h.
        Class Engine:
            - Formalised and slightly rearranged.
            - Added getVersion...() routines.
        Class NBoolSet:
            - Now passed as characters to and from external interfaces.
              Added getByteCode(), setByteCode() and fromByteCode() for
              this purpose.
        Class NNormalSurfaceList:
            - Added coordinate system FACE_ARCS; renumbered EDGE_WEIGHT.
        Class NPerm:
            - Now passed as characters to and from external interfaces.
        Class NTriangulation:
            - Added routine isStandard().
    JAVA USER INTERFACE:
        Overall structure:
            - Allows running as an applet as well as an application.
            - Class normal.Application now contains just global constants
              and a generic applet/application shell.  Class normal.Shell
              contains top-level Regina runtime routines and routines
              specific to the shell type (applet or application).
            - Made miscellaneous optimisations.
        normal.packetui.census.NCensusCreator:
            - Altered the boundary combo box strings to avoid
              misinterpretation.
        normal.packetui.surfaces.NSurfaceFilterEditor:
            - Fixed the bug in which changes in the filter were not
              always being immediately reflected in the surface list.

Version 2.1.0  [ 18 December, 2000 ]
    (Initial public release.)

Ben Burton (bab@debian.org)
http://regina.sourceforge.net/

