Crystal Space detailed change log.
http://crystal.sourceforge.net/

The overall history is in reverse (descending) chronological order, so that
each new day's entries apears before the previous day's entries.  The
individual changes for each given day, however, are in normal (ascending)
chronological order.

10-Feb-2004
	- Eric Sunshine fixed CS/data/Jamfile so that it no longer tries to
	  install the non-existent unifont.csf file.  (Bug reported by Frank
	  Richter.)
	- Eric Sunshine made the following changes:
	    - Relocated AWS resources (.def files) to CS/data/aws from
	      CS/data/temp.
	    - Renamed the VFS volume /temp to /varia in order to avoid
	      confusion with the like-named VFS volume /tmp, which is intended
	      to be user-writable, whereas /varia potentially will be read-only
	      since it represents ${prefix}/etc/crystal/varia.
	    - Walktest now tries to read and write the camera file using the
	      VFS volume /tmp rather than /varia (nee /temp) since /tmp is more
	      likely to be writable by the user.  If, at load time, it fails to
	      find a camera in /tmp, then it will fallback to /varia.
	    - Fixed partedit so that it no longer looks for its resources using
	      the unreliable /this directory.  Now looks in /varia.
	    - Fixed several applications and plugins to use more sensible VFS
	      directories (depending upon context) instead of using the
	      unreliable /this.
	- Jorrit fixed an initialization error in DrawSimpleMesh() of the
	  NR OpenGL renderer.
9-Feb-2004
	- Eric Sunshine fixed bug in csKeyValuePair where it was incorrectly
	  invoking SCF_CONSTRUCT_IBASE() even though it should not have been
	  doing so because its parent, csObject, already did so.
	- Eric Sunshine made the following changes to the event system:
	    - Eliminated extremely dangerous and potentially fatal assumption
	      in csEvent where, in several places, it blindly assumed that an
	      iEvent passed in by a client was a csEvent or csPoolEvent.
	    - Corrrected very bizarre code in csEvent::UnflattenCrystal() which
	      performed a static cast of `this' to csPoolEvent, checked if the
	      result of the cast of zero (which will never be the case), and
	      then performed conditional behavior based upon that result.
	    - Fixed bug in csEvent::UnflattenCrystal().  When unserializing a
	      data buffer, it incorrectly assigned CS_DATATYPE_STRING as the
	      attribute type rather than CS_DATATYPE_DATABUFFER.
	    - Unified the signatures of the iEvent::Find() methods so that they
	      all accept a reference in which to place the found item.
	      Previously, some Find() methods accepted a reference, while
	      others accepted a pointer.
	    - Added a number of missing `const' qualifiers to iEvent method
	      signatures.
	    - Rewrote the event-related section of apimod98.txi in order to
	      clarify what was otherwise confused mumbo-jumbo.
	- Eric Sunshine changed cspace.i so that it does a much more thorough
	  job of restricting the portions of csString which it exports to the
	  scripting side.  (All higher-level languages for which CS bindings
	  exist already have powerful string classes, so we can safely export
	  a bare-bones csString interface.)
	- Eric Sunshine pared down the methods exported by cspace.i for
	  csArray<csPluginRequest> to avoid problems with languages, such as
	  Java, for which Swig does not correctly handle the case of both const
	  and non-const versions of the same method.
	- Eric Sunshine renamed csString::GetData() to toString() in javapre.i
	  to be consistent with other Java classes from which a string
	  representation can be extracted.
	- Eric Sunshine fixed javapre.i and javapost.i so that they work
	  correctly in the presence of the CS_MICRO_SWIG and CS_MINI_SWIG
	  macros.
	- Vincent Knecht changed %doc to %docdir in cs.spec so documentation is
	  installed only once by rpm file. Also changed %prefix to /usr instead
	  of /usr/local/crystal.
8-Feb-2004
	- Eric Sunshine corrected Reed Hedges' changes to evdefs.h so that they
	  are correct for plain-C compilers.  This file is processed by non-C++
	  compilers (as noted by the comment at the very top of the file), so
	  please be careful when making changes.
	- Eric Sunshine made minor Texinfo mark-up changes to creategenmesh.txi
	  and converted tabs in @example blocks to spaces in order to ensure
	  proper formatted output.
	- Eric Sunshine moved handling of special `ranlib' requirements out of
	  configure script and m4 fragments, and into macosx.jam and
	  macosx.mak.  Specifically, work-around for Jam 2.4 bug which sets
	  RANLIB to "", and use of "-s" option with ranlib for MacOS/X Panther.
	  This allows the issues to be addressed in centralized locations, thus
	  giving external simpler access to the solutions.
	- Vincent Knecht updated cs.spec so we can build RPMs from CS current
	  snapshot.  Building is now done with Jam.
7-Feb-2004
        - Philip Wyett fixed make build of gl3d plugin after recent effects
	  changes.  Make did not know how to build the source files from the
	  'effects' subdirectory of 'engine/3d'.
	- Keith Fulton fixed bounding box calculation on setup of a sprcal3d
	  model, which was causing SECONDS of lag the first time any sprcal3d
	  was created and made visible.  Now it happens more or less instantly.
	- Keith Fulton fixed compiler errors in Null Renderer for NR settings.
	- Luca fixed some uninitialized stuff in csEvent class (ie 'count').
	- Luca fixed some memory leaks in csMouseDriver and csJoystickDriver.
6-Feb-2004
	- Jorrit clarified the comment for iEngine::CreateBaseMaterial().
	- Jorrit corrected the HOWTO on creating a Thing. It was still
	  mentioning that Things support portals. But this is no longer true.
	- Jorrit added a HOWTO on creating genmesh objects.
	- Reed Hedges made some changes to Doxygen comments, and named some
	  anonymous enums, for event type codes.
5-Feb-2004
	- res added a small convenience wrapper arounf LoadLibrary() and 
	  FreeLibrary() for Win32.
	- Eric Sunshine fixed a few global-search-replace problems in
	  configure.ac from yesterday's unification of make/Jam variables which
	  caused run-time errors in configure.
	- Eric Sunshine worked around gcc 2.95.x complaint about ambiguous
	  csRef<csFoo> to csRef<iFoo> assignment in particles plugin.
	- Eric Sunshine fixed bugs in walktest/Jamfile and walktest.mak where
	  `walkall' target unconditionally tried to build the OpenGL canvas and
	  renderer even if OpenGL was not detected.
	- Eric Sunshine fixed bug in aws/skinpars.yy.  The `expf' rule lacked a
	  terminating semi-colon.
	- Eric Sunshine fixed docs/Jamfile so that it also now installs
	  history.old, README.html, and doxygen.css.
	- Eric Sunshine fixed bug in data/Jamfile were it was installing some
	  maps directly into ${sharedir}/crystal and others into
	  ${sharedir}/crystal/maps.
	- Eric Sunshine added scripts/python/Jamfile to ensure that the Python
	  example scripts and very important cspace.py get installed.
	- Eric Sunshine added scripts/perl5/Jamfile to ensure that cspace.pm
	  gets installed.
	- res made a micro optimization in csHash<>::Grow.
	- res fixed a few leaks:
	    - csPoolEvents now have a weak ref to the event queue.
	    - csEvent::Remove() and RemoveAll() didn't free the attribute 
	      array.
	    - Another superflouous csStrNew() in VFS.
	- res changed the Win32 port to remove the event listener of the old
	  keyboard driver before installing the new one.
	- res changed some errorneous free()s to delete[]s in
	  directdetection.cpp.
4-Feb-2004
	- Jorrit started the removal of the old effect system (used in OR).
	  This is unused and doesn't work properly as well.  Removed support
	  for the 'effect' and 'effects' keywords in the loader.  Removed
	  support for setting effects on materials.  The effect plugin is still
	  there because the old OpenGL renderer still needs it.
	- Jorrit moved the effects plugin source into the
	  plugins/video/renderer/opengl directory. So it is now private to the
	  old OpenGL renderer. This means that the effect system is not
	  essentially removed (it will be really removed when the old OpenGL
	  renderer is removed).
	- res fixed csProcTexture to unregister itself from the proctex event
	  handler upon destruction.
	- Eric Sunshine augmented the `msvcgen' facility so that it is capable
	  of creating multiple customized workspaces rather than always
	  creating only a single workspace (csall) containing all projects.
	  The following workspaces are now created:
	    - wkstypical: Projects which the typical CS users will use.
	    - wksall: All projects, even experimental and broken ones.
	    - wkswalkall: Walktest and plugins typically needed by Walktest.
	    - wksnewrenderer: Similar to wkstypical, but includes new renderer
	      and related modules rather than old renderer.
	  Most CS users should use the wkstypical workspace in place of the
	  obsolete csall workspace.  Project files also now contain two new
	  build modes: Release_NR and Debug_NR.  These build modes ensure that
	  appropriate #defines are active for the new renderer, and should be
	  used when working with the wksnewrenderer workspace.
	- Eric Sunshine updated some out of date documentation in the user
	  manual; corrected some Texinfo mark-up errors; and eliminated a TeX
	  `underfull hbox' warning.
	- Eric Sunshine removed `caltocs' tutorial since the associated program
	  was removed some time back.  Perhaps, in the future, someone might
	  want to update this tutorial to explain use of sprcal3d plugin.
	- Eric Sunshine renamed the following makefile variables to be
	  consistent with their Jamfile counterparts:
	    FLEXBIN       --> CMD.FLEX
	    BISONBIX      --> CMD.BISON
	    SWIGBIN       --> CMD.SWIG
	    NASM.BIN      --> CMD.NASM
	    USE_XFREE86VM --> XFREE86VM.AVAILABLE
	    HAS_CAL3D     --> CAL3D.AVAILABLE
	- Jorrit fixed awstest and awstut so they no longer use /this.
	- Eric Sunshine fixed the following problems related to the new MSVC
	  workspaces (reported by Jonathan Tarbox):
	    - Template files accidentally #defined USE_NEW_RENDERER instead of
	      CS_USE_NEW_RENDERER.
	    - win32/volatile.h contained `#undef CS_USE_NEW_RENDERER', thus
	      effectively undoing #define in the project files.
	    - When the new Release_NR and Debug_NR build modes were added,
	      missed configuration in msvcgen/template7/wscfg.tpi which needed
	      to be updated to reflect the new modes.
	- res fixed a stupid leak in win32.cpp.
	- res changed ::CreateSolidBrush() to ::GetStockObject() in win32.cpp.
	  Latter has the advantage that the brush doesn't need to be destroyed
	  with DeleteObject() later.
	- res fixed a leak in VFS MountRoot(). A string allocated with 
	  csStrNew() was passed to an scfStringArray, which howeverallocates 
	  the strings itself.
	- Neil Mosafi changed csvosa3dl plygin:
	   - No longer store iObjectRegistry in a csRef<>.
	   - Use size_t to iterate against STL classes as it's portable.
	   - Use pointer instead of csRef<> as arguments to functions.
	- Neil Mosafi added support for a3dl:clone class to csvosa3dl plugin.
	  This new type of object will construct a mesh using the factory of 
	  the template mesh.
3-Feb-2004
	- Eric Sunshine fixed syntax error in aws.mak introduced yesterday
	  which manifested when running 'msvcgen' targets.
	- Eric Sunshine worked around more fallout from recent changes to the
	  Jam build facility.  Jambase in Jam 2.4 incorrectly defines RANLIB as
	  "" on MacOS/X, and this bogus setting overrides the `RANLIB ?=
	  "ranlib"' emission from CS's configure script.  Worse, when configure
	  detected MacOS/X Panther and tried to append "-s" to the value of
	  RANLIB as required by Panther, it was really appending "-s" to
	  Jamconfig's empty definition of RANLIB, thus resulting in an
	  altogether broken value for RANLIB.
	- Eric Sunshine added an `unconditional' option to
	  CS_JAMCONFIG_PROPERTY() which, when used, causes it to emit the Jam
	  property using `=' rather than `?='.
	- Jorrit removed the obsolete simplevp application.
	- Jorrit enabled csVideoPreferences compilation with NR.  It seems to
	  compile fine without changes.  This also fixes compilation of simpvs.
	  Note that simpvs with OpenGL still crashes though.  simpvs with
	  software works fine.  'simpvs' with NR crashes even earlier before
	  showing the AWS dialog.
	- Jorrit fixed csVideoPreferences so it no longer uses the VFS /this
	  path.
	- Jorrit fixed simpmap after res2k accidently changed partsys to some
	  'street' level.
	- Jorrit fixed the genmesh GetVertices() and related functions in NR
	  so that they now call SetupFactory() (this was for some reason not
	  done with NR) and also no longer set the 'dirty' flags to true. The
	  Invalidate() function should set those flags to true but simply
	  getting the vertices should not make it dirty.
	- Eric Sunshine fixed a problem in win32.jam which prevented the
	  USE_DLLWRAP=yes option from working correctly.  Specifically, the
	  -shared flag which was discovered by configure for use in "gcc
	  -shared" was being sent to dllwrap, and dllwrap was not at all happy
	  about it.
	- Eric Sunshine fixed bug in cspython.mak where SRC.CSPYTHON
	  incorrectly included cs_pyth.cpp from both the source directory and
	  from $(OUTDERIVED).  It was supposed to include only the one from
	  $(OUTDERIVED).  Also simplified msvcgen special case; thus allowing
	  removal of CSPYTHON_MSVC_EXCLUDE hack.
	- res fixed sprcal3d.mak to include cal3d.lib in the generated VC 
	  project.
2-Feb-2004
	- Eric Sunshine changed STREAMMAX and TEXTUREMAX constants in
	  csXMLShaderCompiler::shaderPass from 'static const int' to 'enum'
	  since MSVC used by Bruce Williams <midnightcoder@midnightcoder.com>
	  could not grok the 'static const int'.  The 'enum' is accepted by all
	  the compilers used for CS.
	- Keith Fulton updated for more accurate bounding box calculations in
	  very latest cal3d cvs, and attempted to update ./configure to check
	  for new cal3d API.
	- Eric Sunshine changed the Flex rules in Jam files and makefiles so
	  that they no longer insist upon using a custom skeleton file since
	  several users report "flex: fatal internal error, bad line in
	  skeleton file" when using the custom skeleton file.  Instead of using
	  a custom skeleton file, the build rules now pass the generated file
	  through 'sed' to massage it into not including <unistd.h> on Windows.
	- Eric Sunshine changed Flex rule in Jam so that it uses -L always to
	  suppress #line directives, rather than only using it if gcc is being
	  used.  We must suppress #line directives always because the generated
	  file might get checked into CVS, and then it would be used by MSVC
	  users whose compiler dislikes these directives.
	- Eric Sunshine fixed several Jam file and makefiles which were
	  hard-coding 'sed' rather than using $(SED).
	- Eric Sunshine fixed aws.mak to use $(FLEXBIN) and $(BISONBIN) rather
	  than hard-coding 'flex' and 'bison'.
	- Eric Sunshine relocated default definitions of SED, DEEPCOPY, and
	  DELTREE into helper.jam from various other Jam files.
	- Eric Sunshine migrated Keith Fulton's change to the Cal3D check from
	  configure to configure.ac where it belongs so that it won't get
	  clobbered the next time someone re-generates configure from
	  configure.ac.
	- Eric Sunshine fixed the sed invocation in static.mak which emits the
	  #ifdef/#endif around SCF_REGISTER_FACTORY_FUNC().  Problem was that
	  'make' was eating the newlines in the sed expression, causing the
	  output to appear all on one line.
	- Eric Sunshine fixed bug in static.mak.  It was not cleaning up the
	  files it created when the 'clean' target was invoked.
	- Eric Sunshine changed behavior of aws.mak so that Flex and Bison
	  output files are placed into a subdirectory of $(OUTDERIVED) rather
	  than being placed back into the source tree.  This allows AWS to be
	  built even when the source code is on a read-only volume or on a
	  shared drive, etc.  Added 'awsgen' target which forcibly runs Flex
	  and Bison.  Added 'awsinst' which copies the generated files back
	  into the source directory so that they can be committed to CVS.
	- Eric Sunshine eliminated need for DO_SWIGPYTHINST conditional from
	  cspython.mak by slightly reorganizing the rules.
	- Eric Sunshine eliminated need for DO_SWIGPERL5INST conditional from
	  csperl5.mak by slightly reorganizing the rules.
	- Eric Sunshine added check to configure.ac which determines how to
	  disable warnings about unused variables.  The result of this check is
	  used by a few Jamfiles and makefiles when building auto-generated
	  code (such as that from Flex, Bison, Swig) which often contains many
	  unused variables.  Previously, these Jamfiles and makefiles made the
	  potentially bogus assumption that all compilers understand
	  -Wno-unused.
	- Eric Sunshine fixed copy/paste error in _GetCollisionPairs() in
	  perlpost.i which resulted in syntax error.
	- Jorrit added two parameters to the new
	  iLightManager->GetRelevantLights() function. The first parameter
	  is the maximum number of lights the caller needs and the second
	  parameter indicates if sorting on relevance is desired. Mesh
	  objects can use these parameters to get more control on the list
	  of lights they get from the light manager.
	  This is currently not implemented. It is just an API change.
	- Eric Sunshine fixed more serious brokeness resulting from Matze's
	  recent changes to the Jam build facility:
	    - GUI application install rule in macosx.jam was totally borked.
	      It had not been updated at all for the new installation scheme.
	    - General borkness of macosx.jam caused build of GUI and console
	      applications to fail while trying to invoke `mkdir -p ""'.
	    - Application rule in application.jam neglected to send "options"
	      (such as "console") to SystemInstallApplication.  This further
	      broke installation on MacOS/X since SystemInstallApplication was
	      given to believe that it was always installing GUI applications.
	    - Install targets ignored $(CMD.INSTALL) which is emitted by
	      configure and were instead using $(INSTALL).  Fixed by having
	      configure emit $(INSTALL) instead of $(CMD.INSTALL).  For
	      consistency, also renamed $(CMD.RANLIB) to $(RANLIB).
	    - Fixed bug in Install1 in install.jam where it was applying
	      $(INSTALLFLAGS) at the wrong position in the command invocation.
	- Neil Mosafi added support for "a3dl:model" to the csvosa3dl plugin (a
	  Sprite3D wrapper)
1-Feb-2004
	- Eric Sunshine applied a couple small patches from Randall Foreman
	  <eidpers@comcast.net> for Borland C++Builder which fix re-declaration
	  of loop variable in 'for', and which ensures that "Press a key to
	  close this window" is flushed to console window.
        - Philip Wyett removed cast to int causing signed / unsigned mismatch
          in csString& csString::RTrim ().
	- Neil Mosafi added Cone and Billboard classes to the csvosa3dl plugin.
	  This provides support for constructing CS meshwrappers corresponding
	  to "a3dl:cone" and "a3dl:billboard" metaobjects on a VOS site
30-Jan-2004
	- res augmented csThing::InitializeDefault() to unprepare the thing
	  when the 'clear' flag is set.
	- res added a sanity check to csThingObjectType::Initialize().
	- Jorrit removed an obsolete constructor from csMeshWrapper.
	- Jorrit did the following lighting related changes:
	    - Added iLightManager. This interface must be implemented by an
	      engine (and registered to the "iLightManager" tag in the object
	      registered) and mesh objects can then use this light manager to
	      find out which lights affect them. In the end this will replace
	      the DeferUpdateLighting() system.
	    - Removed iMeshObject->UpdateLighting(). Mesh objects now have
	      to use the light manager to request the lights they need (if
	      any). All mesh objects have been modified to reflect this.
	    - Changed iParticle->UpdateLighting() to use a csArray instead
	      of an iLight**.
	    - Added a temporary implementation of GetRelevantLights() in
	      csMeshWrapper. This implementation works exactly like
	      UpdateDeferedLighting() used to do in the past. This means
	      the current system is just as efficient as the old one.
	      In future we need to update this so that the array of
	      lights doesn't have to be recalculated if nothing has changed.
	      Also we need to sort lights on relevance so we can return
	      the most relevant lights to the object.
	    - Completely removed the obsolete DeferUpdateLighting() call.
	    - Replaced this with a SetLightingUpdate() call. Using this
	      call the application can control what lights should be
	      returned to the mesh object upon calling GetRelevantLights()
	      and in what order. With this function you can control the
	      number of lights that should be used for lighting the object
	      and also what kind of relevance sorting should be used (not
	      implemented yet).
	    - Changed iso engine to call SetLogicalParent() on the mesh
	      objects so that the iIsoMeshSprite is set on the mesh.
	    - Iso engine also implements iLightManager now so that mesh
	      lighting works the same as in the 3D engine.
	    - Removed the obsolete flag parameter on
	      iEngine->GetNearbyLights().
	    - Updated the documentation for these changes.
	- Eric Sunshine fixed bug in msvcgen.mak introduced on 28-Jan-2004
	  (during csutil/cssys merge) where it neglected to ensure that
	  $(OUTBASE)/mk/msvcgen existed before trying to create subdirectories
	  of that directory, thus leading to a crash.
	- Jorrit did the following lighting related changes:
	    - Added a new CS_LIGHTINGUPDATE_ALWAYSUPDATE flag to indicate
	      that lighting should be updated all the time. By default
	      this is not set which means that lighting is only updated
	      when the object moves or when the list of lights that are
	      currently affecting the object changes. This is ok in almost
	      all cases but it can fail when a light indirectly affects an
	      object through a portal and the portal changes in some way (i.e.
	      is removed or moves). In that case the default behaviour will
	      not catch the lighting change.
	    - Made all DrawTest() implementations call GetRelevantLights() only
	      when they think the object is visible instead of all the time.
	      This is more optimal.
	- Jorrit changed csArray<Bot> to the safer csPDelArray<Bot>.
	- Jorrit fixed a bug in one of the engine CreateMeshWrapper()
	  functions.  It would set the logical parent of the created mesh to
	  the iBase of the csObject instead of the iMeshWrapper. This caused
	  the bots to crash with the new lighting system.
	- res fixed a few 64bit portability issues in csutil reported by VC7.
	- res removed the unused csSymbolTable class.
	- Jorrit updated the MeshAnim HOWTO about automatic lighting.
	- res made some small optimizations to csHash<>.
	- res made some more small optimizations to csHash<> and fixed the
	  GetAll() argument.
	- duhprey fixed partphys_ode to compile.
29-Jan-2004
	- Eric Sunshine made the following changes to clean up after Matze
	  changed the return type of csGetConfigDir(), csGetResourceDir(),
	  csGetAppDir(), and csGetAppPath() to return csString instead of char
	  const*.
	    - Completely restored the functionality of the platform-independent
	      csGetPluginPaths(), most of which Matze had removed for some
	      reason.  Most importantly, this makes csGetPluginPaths() once
	      again search for installed Crystal Space plugin modules, which is
	      something that no longer occurred following Matze's changes, and
	      would easily account for the fact that external projects on
	      MacOS/X and Windows -- both of which use this implementation of
	      csGetPluginPaths() -- could no longer locate any CS plugins.
	    - Fixed bugs where he was returning 0 (null) for functions which
	      were supposed to be returning csString.
	    - Updated Doxygen comments for these functions since they were
	      quite invalid following Matze's changes.
	    - Eliminated unnecessary obfuscation in OSXGetDirs.cpp and
	      winsyspath.cpp which was introduced with this change.
	    - Upgraded csGetConfigPath() for MacOS/X since Matze forgot to
	      update this implementation.
	    - Changed Windows port to use generic/appdir.cpp since
	      winsyspath.cpp was simply duplicating its functionality.
	    - Fixed bug: Following Matze's changes, platform-independent
	      csGetAppPath() would leak `envPATH' string if program was not
	      found in $PATH.
	    - Fixed csGetConfigPath() for Unix so that it once again checks
	      $CRYSTAL/etc for vfs.cfg.  Likewise, csGetPluginPaths() for Unix
	      once again checks $CRYSTAL/lib.
	    - Restored error checking code which had been removed, the removal
	      of which could potentially cause csPluginPaths::AddOnce() to
	      misbehave.
	    - Generally cleaned up the code.  Also eliminated compilation
	      errors and warnings.
	- Eric Sunshine fixed several syntax errors in CS/mk/jam/*.jam files.
	- John Harger changed shaderVarAccessor in the genmesh and particles
	  plugins into proper embedded SCF interfaces (which eliminated a
	  warning about using "this" in member initialization)
28-Jan-2004
	- Eric Sunshine removed a slew of csengine library references from the
	  project since the csengine library no longer exists.
	- Eric Sunshine documented removal of csengine in apimod98.txi.
	- Eric Sunshine eliminated TeX 'hbox' warning from render.txi.
	- Eric Sunshine physically merged the cssys resources (headers,
	  sources, and resources) into the csutil directory structure.  cssys
	  has now been abolished completely.
	- Jorrit fixed mk/jam/win32.jam which Matze forgot to change
	  after changing the PACKAGE.xxx to PACKAGE_xxx.
	- Eric Sunshine fixed all the places in the project where Matze forgot
	  to change Jam/make variable PACKAGE.xxx to PACKAGE_xxx (except for
	  win32.jam which Jorrit already patched).
	- Eric Sunshine fixed Jorrit's fix to win32.jam, in which Jorrit
	  incorrectly changed PACKAGE.VERSION.LIST to PACKAGE_VERSION.LIST.
	- Eric Sunshine augmented win32.jam so that the "File Description"
	  attribute emitted to the version .rc file has a reasonable default
	  value if the target's Jamfile did not invoke the Help rule.
	- John Harger fixed the particles interface to avoid the dangerous
	  csArray references.
	- Norman Kraemer replaced in viewmesh the call to SetRenderScale() with
	  RescaleFactory().
27-Jan-2004
	- Dentoid added a missing CS_IMPLEMENT_PLUGIN to the engine plugin.
	- John Harger moved everything from iParticlesObjectState::Update into
	  the physics plugin. This will allow better control over the particles
	  and especially make the ODE particle physics plugin a lot easier and
	  cleaner.
	- Keith Fulton re-enabled factory scaling in sprcal3d.  Using a <scale>
	  tag in the .cal3d file now rescales the bones, meshes and all anims
	  for you.  Put it after all the other items are loaded in your file.
	- Keith Fulton fixed an error message on bad mesh name in sprcal3dldr.
26-Jan-2004
	- Eric Sunshine updated CS/scripts/jamtemplate/cs_check_host.m4 to
	  reflect all the MacOS/X-specific fixes Eric applied to
	  CS/configure.ac over the last several months (i.e. "ranlib -s",
	  "gcc -E", etc.).
	- Eric Sunshine inlined the functionality from CS/docs/html/Jamfile and
	  CS/docs/pubapi/Jamfile into CS/docs/Jamfile because the Jamfiles in
	  those two subdirectories get deleted automatically by jobber.pl
	  (since all content of those directories is generated automatically by
	  jobber.pl).
	- Jorrit removed the csengine library and merged all sources into
	  the engine plugin. include/csengine and libs/csengine are now
	  gone. Jorrit also fixed walktest so it no longer includes files
	  from include/csengine.
	- Luca added a very informative message in the bottom of the screen
	  for the waterdemo application.
	- Matze removed csengine from cs-config.
	- res made the following changes to data/config/opengl.cfg:
	    - Improved comment for Video.OpenGL.TextureDownsample.
	    - Added GL font cache settings.
	- Eric Sunshine removed plugine/engine/3d/enginep.cpp since it is no
	  longer needed.  This file existed solely to force a reference from
	  the plugin to libcsengine.a to ensure that the library was actually
	  linked into the plugin module.  Since all engine sources now reside
	  in engine/3d and libcsengine.a is gone, this is no longer necessary.
	- Eric Sunshine fixed bug in plugins/engine/3d/engine.mak where it
	  failed to install engine.cfg.  This functionality should have been
	  relocated here when libs/csengine.mak was removed.
	- Eric Sunshine converted plugins/engine/3d/engine.mak to the new style
	  which does not pollute the $(OUT) directory.
	- Eric Sunshine fixed bug in bugplug.mak where it failed to install
	  bugplug.key.
25-Jan-2004
        - Matze did some updates to the jam rules:
            - I decided not to fight autoconf while using custom variable
              names.  This gives more trouble than necessary.  So we're using
              bindir, includedir, etc., for installation directories now.
            - Rewrote installation rules and used the ones from autojam.
            - Fixed and simplified header install rules.
            - Added new targets to install documentation.
        - Matze changed the csGet*Dir functions to return csString and
          introduced CRYSTAL_PLUGIN and CRYSTAL_CONFIG in the unix variant and
          changed the order in the linux variant a slight bit.
	- Eric Sunshine fixed a couple more places in particleldr.cpp where
	  false was being returned as a csPtr<>.  Reported by Randall Foreman's
	  Borland compiler.
	- res corrected the Help statement in the cscursor Jamfile.
23-Jan-2004
	- Jorrit fixed a crash bug in the engine.  At destruction it was
	  forcing a get of the thing plugin.  However this also happens at
	  cleanup if nothing else has been initialized yet (i.e. if there is
	  an error doing application initialization).  This caused crashes
	  because thing plugin was trying to do stuff to the renderers which
	  were not initialized yet.
	- Eric Sunshine fixed configure's "-shared" flag check so that it works
	  with Autoconf >= 2.58, as well as with earlier releases.  This check
	  needs to examine conftest.err, which normally is not created by
	  AC_LINK_IFELSE() in <= 2.57, so the check had to perform some m4
	  magic to fool AC_LINK_IFELSE() into creating conftest.err.  As of
	  Autoconf 2.58, however, AC_LINK_IFELSE() always creates conftest.err,
	  but it also deletes conftest.err before the "-shared" check has a
	  chance to examine the file.  In addition to fixing this problem, the
	  functionality of examining conftest.err has also been generalized and
	  is now available as a standard option to all callers of
	  CS_BUILD_IFELSE(), CS_CHECK_BUILD(), and CS_CHECK_BUILD_FLAGS(),
	  rather than being implemented as a special case for the "-shared"
	  check.
22-Jan-2004
	- Jorrit added the engine target to both jam and make 'walkall' since
	  the engine plugin is now required.
21-Jan-2004
	- Eric Sunshine made some minor updates to cygwin.txi, the most
	  important of which was to replace "make all" with "make -k all" in
	  the CS build instructions.
	- Jorrit did the following array related changes:
	    - Added csSafeCopyArrayMemoryAllocator which is a memory allocator
	      that takes care to properly re-construct all objects upon
	      reallocation of the array.  This memory allocator can be used
	      when you have an array of objects that cannot be safely moved
	      around in memory otherwise.
	    - Added csSafeCopyArray conveniance class which is a version of
	      csArray that uses the csSafeCopyArrayMemoryAllocator.
	    - Changed csWeakRefArray to inherit from csSafeCopyArray.
	    - As a consequence of the above changes the dangerous
	      csWeakRef::Link() and Unlink() functions could be made private so
	      they cannot be misused.
	- res made the following changes:
	    - Fixed "Independent target ../../../mk/visualcX/foobar.rc" Jam
	      warnings, for real now.
	    - Fixed "..\..\out\mk\fragment7\..\..\..\mk\visualc7\foobar.rc"
	      style paths VC projects.
	- res made the following changes:
	    - Changed walktest so it doesn't link in csengine statically any
	      more.
	    - Removed some unused stuff from csengine.
	    - Cosmetic change in msvcgen.jam.
	- Luca added a friend declaration to access a private member from an
	  enclosed class in the class csSpriteCal3DMeshObject.  He also added
	  the needed dependencies for sprcal3d and sprcal3dldr (CSGFX CSGEOM
	  CSUTIL).
20-Jan-2004
	- Jorrit added a new MemoryAllocator template parameter to csArray.
	  With this parameter it is possible to use another memory allocator
	  that csArray uses for its allocation of the table. The default
	  memory allocator uses malloc/realloc/free.
	- Jorrit added csWeakRef<T>::Link() and Unlink() which are functions
	  that nobody should ever call.
	- Jorrit added csWeakRefArray<T> which is an array of weak references.
	  This is needed because csArray<csWeakRef<T> > does not work because
	  you cannot reallocate an array of weak references.
	- John Harger cleaned up the particles plugin interface a bit, and
	  changed the loader syntax a little.
	- Eric Sunshine added new interface iParticlesColorCallback.  This
	  replaces the ugly functional-style color callback used by
	  iParticlesObjectState and iParticlesFactoryState with a more
	  object-oriented and normalized approach.
	- Eric Sunshine cleaned up particle related headers and added some
	  missing documentation to ensure that Doxygen will actually produce
	  output for the interfaces.
	- Eric Sunshine eliminated several compilation warning in the particles
	  and particlesldr plugins.
19-Jan-2004
	- Steven Geens changed the calling of PositionChild to a hierarchical
	  scheme.
	- Norman Kraemer changed render3d Jamfile to include shader subdir
	  only if new renderer is configured or msvc project file generation
	  is in progress.
	- Eric Sunshine reverted Norman's change since MSVC_QUIET is not a
	  reliable way to check if the MSVC project file generation is in
	  progress.  This variable is just an optional variable used by
	  the generation process itself, and is not guaranteed to be set during
	  generation.  If you need to generate render3d shader project files,
	  it should be sufficient to invoke mk/msvcgen/msvcgen.sh with the
	  argument "-sUSE_NEW_RENDERER=yes".
	- Eric Sunshine updated EAX URLs in msvc6.txi and msvc7.txi since the
	  old ones were out of date.  New URLs provided by David Calkins
	  <dcalk@dejazzd.com>.
	- Eric Sunshine fixed a bunch of Texinfo mark-up problems in msvc6.txi
	  and msvc7.txi.
	- Eric Sunshine fixed bugs in particlesldr.cpp which were reported by
	  Randall Foreman's Borland compiler.  Was returning 'false' from a
	  couple functions declared to return csPtr<>.
	- Eric Sunshine fixed a few additional problems reported by the Borland
	  compiler.  Please use "#ifdef CS_DEBUG" rather than "#if CS_DEBUG".
18-Jan-2004
	- Jorrit removed unused 'next'/'prev' fields in csLight. These
	  are no longer needed after the redesign of two days ago.
	- Jorrit added iPortal->GetWorldVertices() to get the world space
	  vertices of a portal.
	- Jorrit fixed iEngine->GetNearbyObjects() and GetNearbyMeshes()
	  to actually use this so that these functions now use the correct
	  world space vertices.
	- Luca compiled the new renderer with VC6 and did some fixing:
	    - Added a "friend MeshTreeNode" to the class
	      csChunkLodTerrainFactory to let the former to access private
	      members of the latter.
	    - Converted a "for (int i =" to "int i; for (i = " in
	      mesh/partgen/particle.cpp
	    - Added CSGFX dependency (DEP.XXX in the makefile) to emit.mak,
	      fountain.mak, fire.mak, explo.mak, genmesh.mak, rain.mak,
	      spiral.mak, snow.mak, spr3d.mak.
	    - Fixed a compilation error in odedynam.h.
	- Luca modified his last commit, upon advice of res, using the right
	  order for the libraries' dependency, id est: cstool csgfx csgeom
	  csutil.
	- Andrew Craig fixed two problems in sprcal3d.  First was a check to
	  make sure it does not attach the same mesh more then once.  Second is
	  a fix to SetMaterial() to use the right mesh ID.
17-Jan-2004
        - Steven Geens added HitBeamOutline and HitBeamObject for sprcal3d.
	  He's not completely sure it works, but it doesn't seem to break
	  anything.
	- Steven Geens updated a test of configure.ac and configure so it
	  checks correctly for the cal3d cvs version.
16-Jan-2004
	- Jorrit started work on the unification of all types of lights in
	  CS. Moved a lot of general stuff from csDynLight/csStatLight (and
	  also iDynLight and iStatLight) to csLight/iLight.
	- Jorrit removed the iStatLight and iDynLight interfaces. All
	  useful functionality that used to be there has been moved to
	  iLight. Various functions in iEngine have been changed to
	  work with iLight instead of iStatLight or iDynLight.
	- Jorrit added a now a iLight->GetDynamicType() function that
	  returns one of the following:
	    CS_LIGHT_DYNAMICTYPE_STATIC
	    CS_LIGHT_DYNAMICTYPE_PSEUDO
	    CS_LIGHT_DYNAMICTYPE_DYNAMIC
	- Jorrit added mention of the above changes to the apimod98.txi
	  document.
	- Jorrit modified the tutorials in the documentation to reflect
	  the changes.
	- Jorrit unified iLightingInfo->DynamicLightDisconnect(),
	  DynamicLightChanged(), StaticLightDisconnect(), and
	  StaticLightChanged() so that only LightDisconnect() and
	  LightChanged() remain.
	- Jorrit removed iLight->IsDynamic(). This is now obsolete since
	  you can use iLight->GetDynamicType() for this.
	- Jorrit removed csStatLight and csDynLight internally in the engine.
	  All lights are now csLight instances. Turned out that nearly all
	  code was identical anyway.
	- Jorrit removed all functions that deal specifically with dynamic
	  lights. Instead dynamic lights are now created exactly like
	  normal static lights and have to be added to the sector list.
	  CreateDynLight() has been removed. The last parameter of
	  CreateLight() is now one of the dynamic types (instead of a boolean).
	- Jorrit removed iLight->SetSector(). It is not valid to manually set
	  the sector of a light. This is done automatically when you add
	  a light to a sector by calling sector->GetLights()->Add().
	- Eric Sunshine performed some Texinfo markup corrections in simple.txi
	  and apimod98.txi, and eliminated TeX underfull hbox complaint from
	  apimod98.txi.
	- Jorrit removed a few warnings here and there.
	- Eric Sunshine fixed a bug in csSocketListener where it failed to
	  initialize its mcast_in member.  This addresses bug #873491, however,
	  this is only the tip of the iceberg since UDP support in cssocket is
	  fundamentally and fatally flawed in almost every way possible.
	  Fixing it will be a major, major undertaking, and will require either
	  implementing a proper, complete, and comprehensive
	  connection-oriented emulation (rather than the broken, incomplete,
	  and highly buggy emulation currently implemented), and by eliminating
	  the conceptual flaw that UDP sockets are always non-blocking; or by
	  revising the API to support connection-oriented, connectionless, and
	  multicast modes.
15-Jan-2004
	- Peter Amstutz changed the keyboard movement in the "simple" tutorials
	  (along with the associated texinfo documentation) to follow more
	  conventional controls for the first person view on the assumption
	  that most people start writing CS applications by copying "simple1"
	  and so they should have a better set of default controls from which
	  to work.  :-)
	- Jorrit fixed the .csplugin file in the ODE based physics plugin for
	  particles.  It was using the same plugin ID as the simple physics
	  plugin.
	- Jorrit attempted to convert the rain mesh to the NR.  It doesn't yet
	  work though.
	- Jorrit fixed the bugs in the rain mesh object.  It now works mostly
	  with NR except that portals seem to overwrite it.
	- Jorrit fixed the transform of the rain particle system so it renders
	  at the correct spot with NR.
	- Jorrit fixed a bug in the loader.  By delaying to set the render
	  priority of an object up to the end the automatic portals generated
	  from old map files wouldn't inherit the right object priority.  This
	  could cause render errors.  With OR these errors didn't come up due
	  to coincidence but with NR they were very visible.
	- Eric Sunshine greatly enhanced the Doxygen documentation for
	  iNetworkSocket so that it explains precisely what the interface
	  represents, and how & when clients might want to use it.
	- Eric Sunshine fixed classes csMetaMaterial and csMetaTexture in
	  csvosa3dl plugin.  They were accidentally and incorrectly using
	  private inheritance.  Note that "class Foo : public Bar, Cow, Smoo"
	  is not the same as "class Foo : public Bar, public Cow, public Smoo".
	- Eric Sunshine updated csvosa3dl.mak so that it links the plugin
	  against csgeom.
	- Marten removed the now deprecated iRenderBufferSource.
	- Jorrit optimized NR version of genmesh a little bit. Render
	  buffers are now only recreated when really needed and not every
	  time the dirty bit was set. Also removed the copy of the triangle
	  array to an int* buffer. That's not needed.
	- Eric Sunshine simplified a number of macros in checkbuild.m4,
	  checklib.m4, and configure.ac by removing some unnecssary
	  m4_default() invocations.
	- Eric Sunshine fixed outdated documentation for CS_EMIT_BUILD_FLAGS()
	  macro in configure.ac.
	- Eric Sunshine fixed aesthetic problem in configure.ac where output of
	  the results of certain tests for build flags (such as -Werror, -Wall)
	  could differ between cached and uncached runs.
	- Eric Sunshine added new enable-exceptions test to configure.ac which
	  complements the existing disable-exceptions test.  Both tests now
	  emit custom makefile/Jam variables which can be used by modules which
	  need fine-grained control over exceptions.
	- Eric Sunshine fixed problem in configure.ac's -fvtable-thunks check
	  where it was hard-coding the flag -Werror, rather than using the
	  computed value $cs_prog_cxx_enable_errors.
	- Eric Sunshine fixed VOS check in configure.ac so that it no longer
	  hard-codes -D_REENTRANT and -fexceptions CFLAGS, since doing so makes
	  the invalid assumption that all compilers will understand these
	  flags.  Instead, now uses the result of the new enable-exceptions
	  configure.ac check, and takes advantage of the fact that each build
	  system provides a portable way to specify preprocessor defines.
	- Eric Sunshine added const and non-const operator[] methods to
	  Opcode's Point class (OPC_Point.h).  This works around problem with
	  Borland compiler where it considered the following code ambiguous:
	    Point p; float x = p[0];
	  Other compilers correctly apply Point's float* operator and then
	  treat the returned result as an array.  Borland, however, was unable
	  to choose if it should use the const or non-const float* operator.
	- Eric Sunshine revised outdated and incomplete Doxygen comments for
	  iNetworkEndPoint, iNetworkConnection, iNetworkListener,
	  iNetworkDriver, and csNetworkDriverCapabilities.
	- John Harger fixed a sorting problem (though the back2front sorting
	  is broken still in libcstool/rendermeshlist) and enabled selecting
	  other physics plugins for the particles plugin.
	- res updated the ball mesh plugin makefile to link against csgfx, too.
	- res fixed AWS to compile with NR.
	- res fixed Opcode after the recent operator-related changes. MSVC was
	  confused by the presence of both a float* and float[] operator.
	  Removed float* version.
	- Jorrit added a sequence to the terrain level so that the sun
	  moves. This gives nice realtime lighting effects on the landscape.
	- Keith added timeFactor for slow motion and reversible anims for
	  sprcal3d. Improved error reporting on bad loads of .cal3d files.
	  Added stopLock flag to animation mixer so that animation stops on
	  the last keyframe if true.
14-Jan-2004
	- res changed glrender3d to not depend on GLU any more. Though a GLU
	  header was #included, no GLU function was used anyway.
	- res sanitized line endings in ivideo/custcursor.h and the custom
	  cursor plugin.
	- Eric Sunshine fixed copy/paste error in the new partphys_ode.mak
	  which broke the makefile.
	- Eric Sunshine fixed awsScrollBar::Setup() so that it positions the
	  components of the horizontal scrollbar properly.  Previously, it was
	  using magic constants (2, 4, 6) to adjust the component positions,
	  but these constants were incorrect even for the default skin.
	  Positioning of the components is now completely independent of magic
	  constants, and is also entirely consistent with the way the
	  components of the vertical scrollbar are positioned.
	- Norman Kraemer changed Frame's Height access from Frame.Height() to
	  Frame().Height()
	- Norman Kraemer made the glshader_cg compileable once again, but says
	  that it certainly won't work.  I adjusted include paths, structure
	  names and method spurs.  Since i added the missing Compile method as
	  a false returning dummy method it certainly won't work.  I guess
	  there should go the code from the now defunct Prepare() method.
	- Peter Amstutz rewrote the GenerateBox() method in the genmesh plugin
	  to create a box with better texel settings (the old code had texture
	  warping bugs on certain sides of the box)
	- Peter Amstutz added support for textures and materials to the
	  csvosa3dl plugin.  It also loads "a3dl:object3D.cube" into the
	  engine.
	- Peter Amstutz modified the configure.ac script to add the flags
	  -D_REENTRANT and -fexceptions to the VOS cflags variable.
13-Jan-2004
	- Jorrit added a version of Top() to csArray that is not const.
	- Jorrit multiplied the values in the two glPolygonOffset() calls
	  with 3 (in the NR OpenGL renderer) to avoid flickering in case
	  stencil lighting is used. This still doesn't completely avoid
	  flickering but it helps considerably.
	- Neil Mosafi changed the custom cursor plugin to use iReporter instead
	  of a comment and also to use csHash<> instead of csHashMapReversible
	- Eric Sunshine fixed memory leak in csVosA3DL::GetSector().  It was
	  assigning a 'new' csVosSector directly to a csRef<>, thus leaking a
	  reference.
	- Eric Sunshine fixed a number of cases in the csvosa3dl plugin where
	  it was accidentally and incorrectly using private inheritance.  Note
	  that "class Foo : public Bar, Cow, Smoo" is not the same as "class
	  Foo : public Bar, public Cow, public Smoo".
	- Eric Sunshine fixed csVosA3DL and csVosSector so that they do not use
	  csRef<> for storing iObjectRegistry, since this tends to lead to
	  reference loops.
	- Eric Sunshine removed numerous unnecessary #includes from csvosa3dl
	  plugin.
	- Eric Sunshine fixed bug in csVosObject3D.  It failed to invoke
	  SCF_CONSTRUCT_IBASE() and SCF_DESTRUCT_EMBEDDED_IBASE().
	- Eric Sunshine fixed bug in csMetaObject3D.  It was leaking a
	  csVosObject3D.
	- Eric Sunshine fixed bug in csVosSector.  It failed to invoke
	  SCF_CONSTRUCT_IBASE().
	- Eric Sunshine added a makefile for the csvosa3dl plugin.
	- Eric Sunshine fixed bug in csvosa3dl Jamfile.  It was incorrectly
	  assigning $(COMPILER.CFLAGS) to the global C++FLAGS, which impacts
	  _all_ modules.  Presumably, this was done to work around some
	  unspecified issue, but it was an incorrect solution.  (Peter, if you
	  can provide information about the issue you were dealing with,
	  perhaps we can devise a more appropriate solution.)
	- Eric Sunshine fixed vosa3dl.h so that it #includes headers for
	  classes used as template arguments, rather than simply forward
	  declaring them.  This will allow it to work correctly with older
	  compilers, such as the Borland compiler, which must see the entire
	  class declaration before the class is used as a template argument.
	- Eric Sunshine protected vostest.mak via a conditional so that the
	  vostest application is built only if VOS has been detected.
	- Eric Sunshine fixed bad copy/paste error in the configure.ac VOS
	  check, where it was testing against $(SDLCONFIG), thus VOS would only
	  be found if SDL was also present.
	- Eric Sunshine fixed incorrect m4 quoting in the VOS configure.ac
	  check.
	- Eric Sunshine changed the VOS configure.ac test so that it no longer
	  unnecessarily emits the HAS_VOS makefile property.
	- Eric Sunshine added cache support to the VOS, SDL, FreeType2, Perl,
	  and cslibs configure.ac checks.
	- Eric Sunshine fixed bug in configure.ac's Perl SDK check where it was
	  accessing Config.pm's `sitearch' value, when it should have been
	  accessing `archlib'.
	- Eric Sunshine fixed configure.ac's Perl SDK check so that it wraps
	  all invocations of external programs inside AC_RUN_LOG().
	  Previously, it only wrapped some such invocations.
	- Eric Sunshine fixed bug in sprcal3d.mak.  It neglected to add
	  $(CAL3D.LFLAGS) to LIBS.EXE for static build.  Also updated makefile
	  to new style in which object files are placed in custom subdirectory
	  of $(OUT) rather than polluting $(OUT).
	- Eric Sunshine fixed bugs in gl_render3d.mak where it failed to
	  utilize GLU.CFLAGS.
	- Eric Sunshine fixed bug in render3d/opengl/Jamfile where it failed to
	  utilize GLU.CFLAGS and GLU.LFLAGS.
	- Eric Sunshine fixed bugs in csvos3adl.mak and sprcal3d.mak where they
	  were incorrectly utilizing VOS.LFLAGS and CAL3D.LFLAGS, respectively.
	  The error would cause static link builds (USE_PLUGINS=no) to fail.
	- duhprey added an ODE based particle physics plugin. (alpha)
12-Jan-2004
	- Peter Amstutz added a preliminary version of a VOS
	  plugin for CS, along with a test program.  The configure script
	  checks for VOS and will not build the plugin or
	  test program unless VOS is available.
	- Jorrit fixed a compile error with syntax services. You can't
	  forward declare an enum (csZBufMode).
	- Jorrit fixed a big bug in csHash::DeleteAll(). If the size of
	  the bucket table happened to exceed the initial modulo size then
	  DeleteAll() would simply crash. In fixing this function Jorrit
	  also removed the 'bool' return value from DeleteAll(). This
	  is useless. If application code needs to know if values are
	  going to be deleted it can call GetSize() right before calling
	  DeleteAll().
	- John Harger comitted Daniel Duhprey's patch for particles, changing
	  the internal update loop a bit. Also a few new features were added
	  such as variable mass and improved start/stop features including
	  an option to turn of autostarting.
11-Jan-2004
	- Jorrit fixed a compile error and some warnings in the new particles
	  system.
	- Eric Sunshine eliminated some unnecessary $(addprefix) invocations
	  from bugplug.mak.
	- Eric Sunshine converted particles.mak, particlesldr.mak, and
	  partphys_simple.mak to the new-style makefile which emits its working
	  files to a custom subdirectory of $(OUT).
	- Eric Sunshine removed some highly questionable and unnecessary
	  implicit rule goop from particles.mak and partphys_simple.mak.
	- Eric Sunshine fixed formatting of 'help' messages from particles.mak,
	  particlesldr.mak, and partphys_simple.mak.
	- Eric Sunshine eliminated bogus cssys reference from particles.mak.
	- Eric Sunshine ported particles.cpp to MacOS/X by eliminating
	  invocation of unportable tanf().
	- Eric Sunshine fixed particles/simplephys.h to #include
	  csutil/randomgen.h rather than the deprecated csutil/rng.h.
	- Eric Sunshine added particles, particlesldr, and partphys_simple
	  plugins to user.mak.
	- Eric Sunshine changed the particles, particlesldr, and
	  partphys_simple plugins to #include appropriate header files rather
	  than using forward declarations for a number of interfaces which were
	  used as template arguments.  This will allow the code to build
	  correctly with older compilers, such as Borland C++Builder.
	- Eric Sunshine removed a good number of unnecessary #includes and
	  forward delcarations from the particle-related plugins and fixed
	  numerous formatting goofs.
	- Eric Sunshine worked around problem where configure.ac's GLU and GLUT
	  checks could export incorrect build flags on MacOS/X if user had
	  installed XFree86.  In this case, it would find the GLU and GLUT
	  resources from XFree86 rather than utilizing GLU.framework and
	  GLUT.framework.
	- Eric Sunshine fixed problem in configure.ac where the OpenGL and
	  related checks were not sensitive to Darwin cross-building from
	  MacOS/X (via the --with-x switch).  In this case, the checks were
	  still incorrectly trying to locate OpenGL.framework, GLU.framework,
	  and GLUT.framework, rather than the XFree86 resources.
	- Steven Geens fixed sprite sockets. They wouldn't work correctly
	  if morph targets were used.
	- res made the following changes:
	    - Changed the syntax service plugin to use tokenlist.h for it's
	      token list setup.
	    - Added a method to parse Z modes to the syntax service plugin.
	    - Added a zmesh2 zmode.  Works similar to zmesh, but with the
	      difference that it sets a zmode suitable for passes >= 2 (eg if
	      the mesh has a zmode of zuse, zmesh2 will result in an effective
	      zmode of ztest.)
	    - Shader passes can now override the zmode of the renderer.
	    - Updated the OR lighting shader to utilize zmesh2 in the 2-pass
	      technique.
	- John Harger fixed the quads mode in the particles plugin. The test
	  level should work now too. (And has a nice fire effect, courtesy of
	  Daniel Duhprey)
10-Jan-2004
	- res added a facility to draw meshes with less render buffer juggling
	  etc. required from the client.
	- res updated the csfx* functions to use that facility on NR.
	- In csutil/inpnames.{h|cpp}, Oktal added functions csTypeOfInputDef
	  and csParseJoystickDef.
	- Keith Fulton added ability to override default material in sprcal3d
	  mesh.
	- res made the following changes:
	    - Moved 'Help' statement in Jamfiles in front of Application /
	      Plugin / etc.  statements.  This way, the Win32 version .rc
	      generator can use them.
	    - Fixed "Independent target ../../../mk/visualcX/foobar.rc" Jam
	      warnings.
	    - Changed the AWS Jamfile to use the out/...  directory as an
	      additional inlude path, to work around problems caused by
	      different versions of Bison used for the local build and the
	      generated stuff in CVS (the file skinpars.hpp was slightly
	      different, but enought to cause a link error when the CVS version
	      was used, as opposed to the locally generated one.)
	- res changed the point sprite caps test in glrender3d to consider both
	  the ARB_point_sprite and ARB_point_parameters extensions.
	- res made some cosmetic changes to the particles and partphys_simp
	  plugins.
	- res changed the particle_basic shader to not use fixed function
	  lighting any more.
	- Philip Wyett moved decleration of 'iPortal *po' into better scope.
	- acraig added the ability for sprcal3dldr to name materials inside the
	  .cal3d file new material tag is where name is optional:
	    <material file="image file" name="material name"/>
	- John Harger changed the internal memory structure of the particles
	  there is no longer an upper maximum, and it should work better
	  overall.  Quads are currently unfunctional, only point sprites work.
9-Jan-2004
	- Jorrit fixed a warning in memimage.cpp.  It was trying to delete a
	  void* which is undefined.
	- Jorrit totally reverted the deletes in memimage.cpp. The superclass
	  (csImageFile) was already doing those deletes.
	- Marten made a first attempt to preliminary fix for re-entrant portals
	  and disabled floating portals for new renderer.
	- Jorrit reverted Marten's last portal fix as it causes totally new and
	  much worse problems.
	- Jorrit fixed the /temp path in vfs.cfg.  It used ./data instead of
	  @data.
	- Jorrit fixed a bug in the generic renderloop step plugin.  When
	  render portals it was not flushing the list of meshes with the same
	  shader.
	- Jorrit fixed a bug in the csList::Iterator.  It was always skipping
	  the first element.
	- Jorrit fixed the NR object handling in csSector so that it now uses a
	  csArray instead of a csList to cache the visibility results and it
	  also uses the render context instead of only the render view.
	  Unfortunatelly this still doesn't fix the problems.
	- Jorrit replaced DeleteAll() with Empty() in csRenderMeshList for more
	  efficiency.
	- Jorrit removed the sorting of the renderMeshListInfo structures in
	  csRenderMeshList.  This is not needed since they are already inserted
	  sorted.
	- Jorrit optimized csRenderMeshList->GetSortedMeshList() a bit more by
	  avoiding the two iterator loops over the render priorities.
	- Jorrit considerably optimized the generic render loop by avoiding an
	  unneeded csArray for keeping the sorted meshes.
	- Jorrit did another small optimization to avoid the construction of
	  the dynDomain array if the material didn't change (in
	  csGenericRenderStep::RenderMeshes).
	- Jorrit changed the array parameter in iShaderProgram->SetupState() to
	  const.
	- Jorrit also changed the array parameter in iShader to const.  To do
	  that I had to move the adding of the dynamic domain to the caller.
	- Jorrit reverted the optimization to avoid the construction of the
	  dynDomain array.  It was wrong.
        - Matze changed bison and flex jam rules to build into the out
	  directory instaead of the source directory and added a rule to copy
	  the generated files.
	- Marten made some more fixes to portals.
	- Eric Sunshined applied a patch from Randall Foreman
	  <eidpers@comcast.net> to allow AWS to be built with the Borland C++
	  compiler.  Specifically, Borland did not like class-scoped 'static
	  const int's being used in array declarations or 'case' statements.
	  Now instead uses 'enum' to declare constants.
	- Eric Sunshine made a bunch of Doxygen comment corrections in AWS
	  headers.
	- Jorrit clarified some Doxygen comments for iMovable.
	- Jorrit changed the shader compiler to give more verbose diagnostics
	  when -verbose commandline option is given.
	- res fixed sprcal3d to compile with OR again after his latest changes.
	- John Harger finally comitted the new particle system plugin.  Also
	  made some changes in render3d/opengl to allow for interleaved
	  renderbuffers.  Expect this plugin to be incomplete, and to change
	  often during the next few days/weeks.  The interface shouldn't change
	  much, though.
8-Jan-2004
	- Jorrit moved include/ivideo/rendersteps directory to
	  include/iengine/rendersteps. Apparently this was forgotten during
	  the move from the renderloop stuff from plugins/video to
	  plugins/engine.
	- Jorrit avoided a number of virtual calls in the sector visibility
	  callback that is used for the new renderer (5 virtual calls per
	  object per frame).
	- Eric Sunshine added csgeom to library list for ptanimimg and stdpt
	  plugins to pacify Borland compiler which reports an unsatisfied
	  references to operator-(csVector2,csVector2).  Reported by Randall
	  Foreman <eidpers@comcast.net>.
	- Marten Svanfeldt made the following fixes:
	    - Added a default constructor and initializer for
	      csPolyTextureMapping.
	    - Fixed a leak in csImageMemory.
	    - Write outside array in the loading from cache in genmesh.
	    - Fixed a leaking GDI resource in glwin (2d canvas for opengl).
	    - Fixed a few leaks in xmlshader.
	    - Fixed a leak in the glshader_ffp loader.
	- res made the following changes:
	    - Removed unused csRefHash class from csMaterial, changes
	      csMaterial to store shaders in a csHash<> instead of a csHashMap.
	    - Changed sprcal3d so the bounding box is properly updated when the
	      mesh animates.
	    - Added a 1-TU version of the OR lighting shader.  Still has issues
	      with transparency, tho.
	- Marten updated todo_newrenderer.txt
        - Philip Wyett eliminated warnings of init from int to float in
          'include/imesh/thing/polygon.h'.
7-Jan-2004
        - Andrew Craig fixed the Jamfile for sprcal3dldr to link in the
	  required CAL3D library.
	- Jorrit did some cleanups on the imposter code.
	- Daniel Duhprey fixed scattering for 2 texture units for the terrain
	  engine.
	- Eric Sunshine updated configure.ac's Cal3D check to test for the very
	  recently added features required by sprcal3d.
	- Eric Sunshine fixed a syntax error in OPC_Collider.h which was
	  pointed out by Randall Foreman <eidpers@comcast.net>.  For non-GCC,
	  it was declaring "virtual const char* ValidateSettings() = 0 {...}",
	  which is an obvious syntax error.
	- Eric Sunshine changed csjoywin.h so that it also #includes
	  <dinputdefs.h> since this is needed by Borland C++Builder.  Reported
	  by Randall Foreman <eidpers@comcast.net>.
	- Eric Sunshine fixed clean/distclean targets in cs.mak and Jamfile so
	  that they aslo clean up configure.lineno and config.status.lineno.
	- Eric Sunshine fixed a number of copy/paste errors in shadermgr.mak,
	  waterdemo.mak, and xmlshader.mak.
	- Eric Sunshine converted shadermgr.mak and xmlshader.mak to the new
	  format for makefiles.
	- Eric Sunshine fixed formatting of "help" messages in terrainldr.mak
	  and waterdemo.mak.
	- Eric Sunshine added xmlshader to user.mak.
	- Eric Sunshine added the auto-generated dinputdefs.h file to
	  joystick/csjoywin since it is needed by Borland C++Builder.
	  http://bbx.hp.infoseek.co.jp/dikeyboard.html
	  http://bbx.hp.infoseek.co.jp/archive/GetDIDF.zip
	  References provided by Randall Foreman <eidpers@comcast.net>.
	- John Harger added point sprite support to the NR for use in the
	  upcoming particle system plugin
6-Jan-2004
	- Eric Sunshine changed the libbfd check in configure.ac so that it is
	  not performed on Windows.  Newer versions of Mingw supply libbfd and
	  libiberty, and people did not like seeing these GPL-licensed
	  libraries mentioned in the link statement for plugin modules.  (Note,
	  however, that in reality these libraries were not actually being
	  linked into plugin modules on Windows since there are no symbolic
	  references to libbfd or libiberty within the CS object files when
	  building on Windows, and linkers are smart enough to ignore libraries
	  which to which there are no symbolic references.)
	- Eric Sunshine changed the CS_CHECK_PROG_VERSION() Autoconf macro so
	  that it reports the discovered program's version in all cases.
	  Previously, it only reported the version number if the version check
	  failed.
	- Eric Sushine added missing forward declaration for csRandomGen to
	  imesh/spritecal3d.h.
	- Eric Sunshine added copy constructor and assignment operator to
	  csMatrix3.  Also moved implementation of axis-angle specifier
	  constructor to .cpp file.  Removed unnecessary 'inline' keywords.
5-Jan-2004
	- res fixed sprcal3d so render buffers are created correctly for
	  multi-mesh models.
	- Keith Fulton added more functionality to sprcal3d and updated
 	  bbox calcs to be more efficient.   This requires cal3d cvs as
	  of Jan-04-04, or later.
	- Jorrit fixed a compile error in glrender3d.
	- Jorrit fixed a few occurances of 'crystalspace.renderer.stringset'
	  and replaced them with the correct 'crystalspace.shared.stringset'.
	- Eric Sunshine applied some changes to various headers and sources in
	  order to pacify Borland C++Builder based upon a list of compiler
	  diagnostic messages (and very loosely based upon a patch) provided by
	  Randall Foreman <eidpers@comcast.net>.
	- duhprey updated ODE so it now optionally updates on
	  cscmdPreProcess instead of calling Step
	- duhprey attemped to fix the sky in terrain on ATI cards (from thebolt)
4-Jan-2004
	- Luca fixed a compilation error for the VC6 compiler.
	- res added the creation of a global string set to InitApplication().
	  Previously, code to create such string set could be found at multiple
	  places throughout CS.
        - Philip Wyett continued a general cleanup of CS code formatting.
	- Eric Sunshine changed the default Perl SDK option in configure.ac
	  from --with-perl to --without-perl since csperl5 still fails to build
	  on numerous platforms.
	- Jorrit removed a csReversibleTransform from genmesh objects. This
	  was added for the new renderer but was actually not used.
	- Jorrit optimized the ball mesh object in a similar manner by also
	  removing tr_o2c.
	- Jorrit optimized the thing mesh object in a similar manner by also
	  removing tr_o2c.
	- Jorrit optimized the spr3d mesh object in a similar manner by also
	  removing tr_o2c.
	- res fixed the stenciltest level from coming up black by including
	  the needed shaders in the material definition.
	- res made the following changes:
	    - Minor cosmetic change in initapp.h.
	    - Fixed csHash<>::GlobalIterator::Reset(): it failed to properly
	      skip to the first element to be returned.
	    - Made iShaderVariableAccessor a descendant of iBase (so it can be
	      refcounted.)
	    - Changed sprcal3d lighting to properly update when the sprite is
	      animated.
	    - Updated sprcal3d to work with NR.
	- res made sure the bounding box of sprcal3d objects is correct.
3-Jan-2004
        - Philip Wyett continued a general cleanup of CS code formatting.
	- Steven Geens fixed a very fatal typo in sprcal3dstate.
	- Steven Geens added a fast way to check the sockets of a cal3d sprite
	  in viewmesh.
	- res made the following changes:
	    - Enclosed the 'WINVER' #definition in win32/csosdefs.h in an
	      #ifdef, so an already (possibly user-)defined WINVER doesn't
	      cause problems.
	    - csRenderMesh was forward declared as 'class' at some places,
	      causing problems with VC7.
	    - Changed bugplug so the font used for text output is cached.
	    - Fixed the stencil plugin to fall back to a TinyXML docsys if no
	      iDocumentSystem is present for shader loading.
	    - Changed the generic render step to restore zOffset and zmode
	      after drawing a portal.
	    - The GL canvases now do a sanity check for the minimum required
	      OpenGL 1.1.
	    - Changed the GL font cache to change texture a bit less often.
	    - The currently active TU is now also managed by the GL state
	      manager.
	    - The GL state manager doesn't accept a TU parameter to
	      SetTexture() etc any more. Those functions now always use the
	      currently selected TU.
	    - Changed the NR GL ActivateTexture() to be a bit more sane. It
	      also tracked the currently bound texture, something the state
	      manager already did.
2-Jan-2004
	- Jorrit added an optimization to the portal container so that
	  a more optimal transfrom from camera->2D is used in case no
	  clipping is required at all.
	- Jorrit added PointOnPolygon() to iThingStatic to test if a point
	  is on a polygon.
	- Steven Geens added sockets to the cal3d XML loader.
	- Eric Sunshine made the following changes to the csperl5 module:
	    - Fixed fatal bug in perlpost.i's overrides of
	      csInitializer::RequestPlugins() and SetupEventHandler().  They
	      were incorrectly checking if the first argument was of type
	      iObjectRegistry reference _after_ they had already dereferenced
	      the argument, which meant that the reference type information had
	      already been thrown away.  Thus, the tests _always_ failed.  The
	      iCollideSystem::GetCollisionParis() override suffered from the
	      same bug when checking if its first argument was an
	      iCollideSystem reference.  They now use the high-level
	      SWIG_ConvertPtr() to check the type and perform the dereference,
	      rather than low-level Perl API.
	    - Fixed fatal bug in perlpost.i's override of
	      csInitializer::RequestPlugins() where it completely ignored the
	      number of incoming arguments and requested plugins based upon
	      whatever random garbage existed in memory off the end of the Perl
	      argument stack following the last of the actual requested
	      plugins.
	    - Fixed fatal bug in perlpost.i's override of scfInitialize().  It
	      constructed its own argv[] array, but then sent zero (0) for argc
	      to the C++ scfInitialize(), thus it always appeared that there
	      were no arguments; not even the program path (argv[0]), which is
	      absolutely required by scfInitialize() for proper functioning.
	    - Fixed fatal bug in perlpre.i's "out" typemap for extracting the
	      object pointer from csRef<>, csPtr<>, and csWrapPtr<>.  The
	      typemap neglected to inform Perl that it was returning an object,
	      with the result that _all_ csRef<>, csPtr<>, and csWrapPtr<>
	      objects appeared to be invalid.
	    - Fixed fatal bug in perlpre.i's "out" typemap for extracting the
	      object pointer from a csWrapPtr<>.  It neglected to invoke
	      iBase__DynamicCast() to retrieve the pointer's _true_ value for
	      the given object's type.  This value can differ from the iBase
	      pointer value when multiple-inheritance is involved or when
	      embedding is involved.  Treating the iBase pointer as though it
	      was the actual object pointer was incredibly dangerous and often
	      incorrect.  The dynamic cast is mandatory.
	    - Fixed fatal bug in several perlpre.i's array-based "in" typemap
	      where they were checking if the incoming argument itself was an
	      array (an impossibility in Perl), whereas they needed to first
	      dereference the argument before checking the object's type.
	    - Fixed potentially fatal bug in numerous perlpost.i functions
	      which were using low-level Perl API (SvIV + blind cast) to
	      convert SWIG references into CS objects by attempting to manually
	      extract the object pointers from the references.  Unfortunately,
	      this simple approach was not always appropriate since it did not
	      replicate the deep Voodoo that Swig's own SWIG_ConvertPtr()
	      employs.  Changed all functions to use SWIG_ConvertPtr() instead.
	    - Fixed bug in numerous perlpost.i functions which were manually
	      and incorrectly constructing Swig references using low-level Perl
	      API (sv_setref_iv), rather than high-level Swig functionality.
	      Changed to use SWIG_MakePtr() instead.
	    - Fixed perlpost.i's csInitializer::RequestPlugins() override so
	      that it now invokes the C++ RequestPlugins() just once rather
	      than once per requested plugin since invoking it once per plugin
	      made it impossible for the C++ RequestPlugins() to perform proper
	      dependency resolution between requested plugins.
	    - Fixed bug in perlpost.i's scfGetVersion().  It was incorrectly
	      trying to call intfname_scfGetVersion() rather than
	      cspace::intfname::scfGetVersion().
	    - Fixed problem in perlpost.i's scfGetVersion() where it was
	      invoking call_pv() with the G_NOARGS flag.  Although legal, the
	      Swig-generated intfname::scfGetVersion() would sometimes throw an
	      exception because it would see arguments on the stack from some
	      other procedure further up in the call chain and think that the
	      arguments were meant for it (even though it is not expecting any
	      arguments).  Fixed by removing G_NOARGS from the invocation.
	    - Fixed bug in perlpost.i's CS_QUERY_REGISTRY() and
	      CS_QUERY_REGISTRY_TAG().  They were incorrectly managing the
	      reference count of the returned object when wrapping it inside
	      csWrapPtr<>, thus leaking a reference.
	    - Fixed bug in perlpost.i's WRAP_SCRIPT_CLASS()'s "in" typemap in
	      which it mismanaged the class' reference count, leading to
	      double-delete when the incoming object was of precisely the
	      script class' type (rather than a subclass, in which case the
	      reference count was managed correctly).
	    - Fixed perlpre.i's "in" typemap for argc/argv[] so that it is once
	      again utilized.  Problem was that Swig typemaps do not seem to
	      understand that 'const char*' and 'char const*' represent the
	      same type, and it also had the wrong signature (was missing a
	      'const').
	    - Fixed to %ignore the C++ scfInitialize(argc,argv) since a
	      Perl-specific scfInitialize() is provided by perlpost.i.
	    - Fixed problem which made it impossible to load the pure Perl
	      cspace module directly from Perl since it lacked a definition of
	      cs_static_var_cleanup which comes from the
	      CS_IMPLEMENT_STATIC_VARIABLE_CLEANUP macro.  Fixed this by
	      creating the new perl5mod.cpp which is linked only into the pure
	      Perl module; not into the csperl5 CS plugin.  This source file
	      contains goop needed by cspace.so (.dll), but not by csperl5.
	    - There is no possible way that this module could ever have worked
	      with all these (now fixed) fatal flaws present.  It seems that
	      this module had never been tested.  My testing was fairly limited
	      on account of minimal computing resources, so it is entirely
	      possible that other fatal flaws may yet manifest.
	- Eric Sunshine made the following changes to the cspython module:
	    - Fixed pythpost.i's csInitializer::RequestPlugins() override so
	      that it now invokes the C++ RequestPlugins() just once rather
	      than once per requested plugin since invoking it once per plugin
	      made it impossible for the C++ RequestPlugins() to perform proper
	      dependency resolution between requested plugins.
	    - Fixed bug in pythpost.i's _CS_QUERY_REGISTRY() and
	      _CS_QUERY_REGISTRY_TAG().  They were incorrectly managing the
	      reference count of the returned object when wrapping it inside
	      csWrapPtr<>, thus leaking a reference.
	- Eric Sunshine made the following changes to the csjava module:
	    - Fixed bug in javapost.i's _CS_QUERY_REGISTRY() and
	      _CS_QUERY_REGISTRY_TAG().  They were incorrectly managing the
	      reference count of the returned object when wrapping it inside
	      csWrapPtr<>, thus leaking a reference.
	- Eric Sunshine made the following changes to cspace.i:
	    - Fixed csInitializer::InitializeSCF() so that it is once again
	      recognized by Swig typemaps, thus the Python/Perl/Java typemaps
	      for this function once again work correctly.  Problem was that
	      Swig typemaps do not seem to understand that 'const char*' and
	      'char const*' represent the same type.
	    - Now publishes csArray<csPluginRequest>.
	    - Now publishes csInitializer::RequestPlugins(iObjectRegistry*,
	      csArray<csPluginRequest>).
	    - Eliminated the broken _RequestPlugin() interface published by
	      cspace.i.  The problem with this approach was that it called the
	      C++ csInitializer::RequestPlugins() once per requested plugin,
	      rather than calling RequestPlugins() just once total, which is
	      the way RequestPlugins() is meant to be called.  By calling it
	      once per plugin, it was impossible for RequestPlugins() to
	      perform proper dependency resolution between requested plugins.
	    - Added CS_MINI_SWIG and CS_MICRO_SWIG defines to cspace.i.  Define
	      one of these macros if you are trying to debug or test the
	      scripting build systems or the scripting facilities themselves
	      but despair of having to wait 30 minutes for each compile attempt
	      to complete.  Define CS_MINI_SWIG to avoid publishing most of the
	      CS interfaces except for csInitializer, object registry, VFS,
	      SCF, event queue & handlers, 2D & 3D drivers, and font & font
	      server.  This should cut compilation time down considerably.  If
	      this is still too long, however, then define CS_MICRO_SWIG, which
	      will publish only csInitializer, object registry, SCF, and VFS.
	      This is about the bare minimum of exports which are still useful
	      for testing various bits of functionality, and should reduce
	      compilation time as much as possible.  CS_MICRO_SWIG implies
	      CS_MINI_SWIG.
1-Jan-2004
	- Marten Svanfeldt made the first commit of 2004. Changes are:
	    - Added basic portal support to new renderer. It still lacks
	      support for <float> portals, fogs and a few other bits.
	    - Fixed clipping with the new renderer.
	    - Added portal sorting to the csRenderMesh sorting routines.
	- Jorrit changed iPortalContainer->Draw() so it no longer does
	  SCF_QUERY_INTERFACE to get the mesh wrapper (and movable) but
	  uses the movable parameter instead.
	- Jorrit reverted his latest change to iPortalContainer since
	  it appears the movable is not passed along. Nevertheless the
	  SCF_QUERY_INTERFACE should be avoided there so we need to
	  rethink this.
	- Marten provided the correct fix for the issue above. It is to use the
	  movable passed to DrawTest (through the transform stored in rmesh)
	- Jorrit performed a considerable optimization with the new renderer
	  by avoiding one or more SCF_QUERY_INTERFACE calls per object (per
	  frame) and in some cases a loop. This SCF_QUERY_INTERFACE was there
	  to get the z-buffer mode in the csRenderMesh structure (so the
	  mesh object implementation could get the z-buffer mode from the
	  mesh wrapper). Instead this is now done in
	  csRenderMeshList->AddRenderMeshes() where there was a loop over
	  all render meshes anyway and csRenderMeshList also has direct
	  access to the csMeshWrapper.
	  Note: this also fixes z-buffer mode for some mesh objects like
	  ball which simply assumed CS_ZBUF_USE in all cases.
	- Jorrit fixed a compile error in the new renderer terrain plugin.
30-Dec-2003
	- Eric Sunshine applied patch from Bjorn Hansen
	  <holomorph@users.sourceforge.net> which adds csParseMouseDef() to
	  'inpnames'.  His patch also fixes csParseKeyDef() so that invalid key
	  names don't just take the first character and return true.  Instead
	  it returns false as it should.  Eric also applied a few bug fixes and
	  improvements to Bjorn's patch.
	- Jorrit fixed a compile error introduced with the latest patch
	  from Bjorn. The fix is incorrect (just commented out the line
	  that doesn't compile) so a real fix is needed.
	- Eric Sunshine applied a fix to csParseMouseDef() instead of merely
	  commenting out the code.
	- Steven Geens probably fixed an out-of-sync hierarchical meshing
	  problem in spr3d.
29-Dec-2003
	- Eric Sunshine changed user.mak so the old OpenGL renderer is not
	  built when USE_NEW_RENDERER is 'yes'.
	- Eric Sunshine applied patch from Bjorn Hansen
	  <holomorph@users.sourceforge.net> for csInputBinder::HandleEvent().
	  It was completely ignoring key down events and mis-interpreting key
	  up events as key down events.
	- Steven Geens added sockets to sprcal3d. The PositionChild method
	  hasn't been implemented yet. Steven Geens also fixed some minor
	  bugs in sprcal3d.h and configure.ac.
	- Steven Geens implemented the PositionChild method of sprcal3d.
	  The socket system should now be completely ready.
28-Dec-2003
	- Philip Wyett fixed a few config files so Freetype2 could again be
	  invoked.
	- Steven Geens added iMeshObject::PositionChild(iMeshObject*
	  child, csTicks time) and an empty implementation for each of its
	  subclasses. He also added code to the OR to place hierarchical
	  children with this method.
	- Steven Geens changed spr3d so it now uses PositionChild() and not
	  DrawTest() to place hierarchical children.
27-Dec-2003
	- Philip Wyett continued a general cleanup of CS code formatting.
	- Philip Wyett added 'docconv' to the root CS directory .cvsignore.
26-Dec-2003
	- Philip Wyett continued a general cleanup of CS code formatting.
25-Dec-2003
	- Philip Wyett performed some cleanup of CS code formatting.
	- Eric Sunshine applied patch from Bruce Williams
	  <midnightcoder@midnightcoder.com> to cs_world.xsd (XML schema) which
	  fixes a couple typographical errors (rotx,roty,rotx), etc.
24-Dec-2003
	- Eric Sunshine fixed linking problem with csjoywin.  It was using
	  #define INITGUID before #including windows.h, and was also linking
	  against dbguid.lib.  It needs to do one of these, but not both.
23-Dec-2003
	- Jorrit fixed a problem in iLoader->LoadTexture(). It would register
	  the texture twice resuling in two texture handles. For the OR this
	  is actually not a real problem (except for wasting resources) but
	  the NR could not cope with this.
	- Luca fixed a bug in the csEventQueue::CreateEvent(uint8 type)
	  method. The method was not setting the flag CSEF_BROADCAST when the
	  the event's Type is csevBroadcast.
21-Dec-2003
	- res added a shader, or_lighting.xml, which mimics the old renderer.
	- res fixed genmesh to provide the lighting as vertex colors on NR as
	  well.
	- res augmented xmlshader to report a warning when an unknown buffer
	  destination was specified.
	- Philipp Aumayr added 3 functions to iWin32Assitant so that it's now
	  less of a pain to use an external message loop.  2 of those functions
	  are for setting/getting a state wether CS should use its MSG loop,
	  the third function is to send Win32 messages to CS.
	- Anders Stenberg removed a ; in Fixed fP the kept it from compiling;
	- Anders Stenberg made a better "draw the last pixel of the line"-fix
	  in the 2D renderer.
	- Anders Stenberg re-enabled DrawPixmap in NR, since it by some reason
	  was disabled. (Probably my fault. :)
	- res fixed drawing of unlit Thing polys in NR.
	- res fixed a non-virtual destructor in terrfunc.
	- Eric sunshine renamed the following macros in order to avoid
	  pollution of the global namespace.  (The old names are still
	  recognized, though deprecated.)
	    STATIC_CAST()      --> CS_STATIC_CAST()
	    DYNAMIC_CAST()     --> CS_DYNAMIC_CAST()
	    REINTERPRET_CAST() --> CS_REINTERPRET_CAST()
	    CONST_CAST()       --> CS_CONST_CAST()
	- Eric Sunshine corrected order of libraries in DEP.RENDSTEP_STENCIL to
	  fix linking problem on Cygwin (hopefully).
	- Eric Sunshine fixed bug in cspace.i.  Was using bogus %ignoren rather
	  than %ignore.
	- Anders Stenberg made the following changes to NR to
	  bring it closer to OR:
	    - Made or_lighting the default shader, with a renderloop to fit it.
	    - Added a "zmesh" z-mode for renderloop passes, that uses the
	      z-mode set by the mesh.
	    - Moved the adding of a default shader to materials from loader to
	      engine, so that materials created from code also will get it.
	  These changes mean that all the simp* applications should work
	  pretty good. There still is a problem with textures on the sprites in
	  simple2 and simpcd. This seems to be caused by engine->Prepare being
	  called _before_ all textures are created/loaded. Is that behaviour
	  allowed?
20-Dec-2003
	- Andreas Busch added Yield() to csThread for posix and win32.
	- res made some changes to GL proc texes and the GL canvas to work
	  around flipping issues.
	- res fixed compiling in Win32 after recent Yield() addition: Yield
	  is #defined empty in winbase.h, causing trouble. #undefined in
	  win32/csosdefs.h now.
	- res updated the "cal3d sufficiently recent" configure test.
	- res fixed the remaining plugins in plugins/mesh to utilize the
	  SCF_DESTRUCT_* macros.
	- res fixed a compile error on odedynam on gcc 3.3, reported by andres
	  from IRC.
	- res commented out some #ifdefs in the light loading code
	  distinguishing between NR and OR, causing incorrect lighting with NR
	  in some cases.
	- Eric Sunshine added a bunch of missing SCF_DESTRUCT_IBASE() and
	  SCF_DESTRUCT_EMBEDDED_IBASE() invocations which Frank missed when he
	  updated the CS/plugins/mesh directory to invoke these macros.
	- Eric Sunshine added a bunch of missing SCF_DESTRUCT_IBASE() and
	  SCF_DESTRUCT_EMBEDDED_IBASE() invocations to classes in
	  CS/plugins/video/render3d/shader which had been added to the project
	  after Eric had added these macros to all classes in the
	  CS/plugins/video directory.
19-Dec-2003
	- Eric Sunshine added the new method
	  csInitializer::RequestPlugins(csArray<csPluginRequest> const&) to
	  complement the existing variable-argument RequestPlugins(...).  The
	  new method allows the list of plugins to be composed at run-time,
	  whereas the old method required the list to be known at compile-time,
	  which was not always convenient or possible.  For example, the
	  scripting interfaces can not know the list of plugins at
	  compile-time, so they have been forced to invoke RequestPlugins()
	  once per plugin, which is semantically incorrect and causes plugin
	  dependency logic to fail.  The new method will allow scripting
	  interfaces to correctly invoke RequestPlugins() once only with the
	  full list of requested plugins.
	- Jorrit removed some old callback code from the generic renderloop
	  plugin.
	- Jorrit removed some warnings from stdrep and also fixed a wrong
	  printf statement (%0.77s is not valid).
	- Eric Sunshine changed csArray<> and csBlockAllocator<> to perform
	  explicit object destruction via p->~T() rather than p->T::~T() in
	  order to pacify the Borland compiler which seems to be inexplicably
	  buggy and which "randomly" emits bogus error messages about
	  "destructor not matching class name" in a few cases where csArray<>
	  and csBlockAllocator<> are used.  The reason we were using p->T::~T()
	  in the first place was that some older (buggy) C++ compilers disliked
	  p->~T(), however I think that we no longer support those compilers,
	  thus p->~T() should be safe.  If, however, we find that some
	  compilers still complain about this notation, then we will have to
	  pursue a more complicated solution.
	- Eric Sunshine added a lot of missing Doxygen comments to csMutex,
	  csSemaphore, and csCondition.
	- Eric Sunshine fixed an historical anomaly in csEventQueue where it
	  was creating a single stack-based csEvent for broadcast of the
	  cscmdPreProcess, cscmdProcess, cscmdPostProcess, and
	  cscmdFinalProcess pseudo-events.  This was problematic for two
	  reasons.  First, the event would be destroyed out from under
	  receivers of the event even if they claimed co-ownership of the event
	  via IncRef().  Second, the event object mutated from cscmdPreProcess
	  to cscmdProcess to cscmdPostProcess to cscmdFinalProcess.  This could
	  cause grief for a module which claimed co-ownership of an event.  For
	  instance, what a module thought was a cscmdPreProcess event at the
	  time that it invoked IncRef(), might suddenly become a
	  cscmdFinalProcess a short time later.  This broke the
	  event-is-immutable invariant.  To fix, these pseudo-events are now
	  reclaimed from the event pool just like any other event.
	- Eric Sunshine replaced csEventQueue's unsafe spin-lock with a csMutex
	  in order to ensure proper thread-safety.
	- Eric Sunshine changed csEventQueue's ListenerVector to a simple
	  csArray<> rather than a csDirtyAccessArray<>, since the "special"
	  functionality of csDirtyAccessArray<> was neither required nor used.
	- Eric Sunshine applied patch from Randall Foreman
	  <eidpers@comcast.net> which fixes a number of cases where classes
	  were accidentally inheriting SCF interfaces privately, rather than
	  publicly.
	- Eric Sunshine applied patch from Randall Foreman
	  <eidpers@comcast.net> which fixes a number of const versus non-const
	  conflicts from the return value of strchr().  Eric also re-wrote some
	  of the code to avoid these conflicts altogether.
	- Eric Sunshine fixed bug in csGraphics3DOGLCommon::DebugCommand()
	  where it was incorrectly parsing the the incoming command string with
	  the result that it failed to recognize commands with arguments.
	- Eric Sunshine fixed bugs in csLoader::ParseHeightgenValue().  Was
	  returning boolean values even though function is declared as
	  returning csGenerateImageValue*.  Reported by Randall Foreman
	  <eidpers@comcast.net>
	- Eric Sunshine updated awsEmbeddedComponent to reflect Jorrit's
	  addition yesterday of iAwsComponent::setPreferredSize() and
	  clearPreferredSize().
18-Dec-2003
	- Jorrit added two new methods to iAwsComponent. One to set the
	  preferred size and one to clear it again. This way one can forcibly
	  set the preferred size of some component. This is useful for
	  some layout managers like BorderLayout so you can have better
	  control over the layout.
	- Eric Sunshine fixed bugs in glshader_fixed.mak and softshader.mak
	  where header files (.h) were being listed in SRC.GLSHADER_FIXED and
	  SRC.SOFTSHADER.  This resulted in the values of OBJ.GLSHADER_FIXED
	  and OBJ.SOFTSHADER becoming corrupted, which caused the build to
	  fail.
	- Jorrit added 'xmlread' to Jamrules for the static compile of
	  walktest.
	- Anders Stenberg fixed static LOD in new renderer.
	- Anders Stenberg (hopefully) fixed some off-by-one problems in NR GL
	  coordinate systems. No idea why they were setup as they were. Hope
	  it didn't have some ingenious significance and I botched it up.
	- Anders Stenberg made GL extension manager only print extension info
	  when verbose mode is enabled.
	- Philip Wyett added missing newline at the end of the file to
	  shadermgr.cpp and xmlshader.h.
	- Anders Stenberg modified standard reporter to give a more easy to
	  read output to the console and to the yellow popup.
	- Anders Stenberg fixed one more off-by-one problem in GL canvas with
	  NR. Blit was off one pixel along Y.
	- res added GL_ARB_shading_language_100 and GL_ARB_shader_objects
	  extensions to the GL extension manager.
17-Dec-2003
	- Jorrit fixed an initialition bug in the xmlshader compiler.
	  It would not initialize the writemask which means that you could
	  get random color effects in the new renderer.
	- Jorrit fixed waterdemo.cfg which was depending on the font
	  multiplexer for some reason.
	- Jorrit fixed a crash bug in the OpenGL renderer introduced
	  yesterday. This would cause walktest to crash at exit.
	- Jorrit fixed various problems with lights caused by not
	  initializing the influence radius properly in the constructor.
	- Jorrit fixed the thing plugin so that the 'clear' in
	  InitializeDefault actually clears the lightmaps. This should fix
	  engine->ForceRelight() but it doesn't so more bug hunting is
	  needed.
	- Jorrit removed some left-over old code from the thing plugin
	  to prepare lightmaps. It was doing a loop over all polygons
	  and doing nothing in that loop.
	- Jorrit added some debug code to scan for big memory allocations
	  in memdebug.cpp.
	- Anders Stenberg fixed procedural textures in NR.
	- Eric Sunshine fixed problem in cspython.mak from 14-Dec-2003 where it
	  was using raw library names (such as "gdi") from
	  PYTHMOD.LIBS.PLATFORM when trying to link cspython.dll, rather than
	  using proper library references (such as "-lgdi") in the link
	  command.
16-Dec-2003
	- Jorrit fixed a warning in shadervar.h with initializers given in
	  the wrong order.
	- Jorrit fixed another similar warning in shadervar.cpp.
	- Jorrit fixed memdebug.cpp so that it now includes platform.h
	  before testing for CS_EXTENSIVE_MEMDEBUG. That flag is set in
	  volatile.h but since memdebug.cpp needs to test for that flag
	  BEFORE loading cssysdef.h we have to include volatile.h (through
	  platform.h) manually.
	- Jorrit removed the rest of r3dtest. Marten apparently only
	  removed the .cpp file.
	- Jorrit fixed the 'nrall' target that was removed because it
	  was part of the r3dtest Jamfile. Now nrall is a compile group
	  to which every relevant target adds itself.
	- Jorrit also fixed 'walkall' target and 'walktest_static' for new
	  renderer.
	- Jorrit fixed some bugs in the jamfiles related to the new renderer.
	- Jorrit fixed ball jamfile so it links with csgfx library now.
	- Jorrit fixed a problem in the generic renderstep plugin. It is
	  possible that when rendersteps are created the shader manager
	  was not yet loaded by the GL renderer. This happens in particular
	  when the engine creates the default render loops in its
	  Initialize() function. Solved this by testing if shaderManager
	  is not 0 in the RenderMeshes() call and querying it from the
	  object registry if 0.
	- Jorrit fixed a bug in the OpenGL renderer which was not clearing
	  the texture cache when g3d->ClearCache() is called. Unfortunatelly
	  this doesn't fix engine->ForceRelight() so more debugging is
	  needed.
	- Jorrit fixed a bug in the thing plugin. PrepareLighting() wasn't
	  updating the super lightmap data really. This fixes ForceRelight()
	  in the sense that something happens now but it appears to be too
	  bright.
	- Eric Sunshine added iSCF::GetInterfaceName() to complement the
	  existing iSCF::GetInterfaceID().
	- Eric Sunshine added missing 'const' qualifiers to csStringSet.
15-Dec-2003
	- Matze reworked some jam rules so that subdirs are more robust now.
	  This should also fix some msvcgen problems on jam.
	- Marten commited the merged branch NEW_SHADERSYS back into HEAD.
	- Anders Stenberg fixed some problems with Marten's branch merge.
	  (Ball & Genmesh wouldn't compile in OR.)
14-Dec-2003
	- Eric Sunshine added --with[out]-python and --with[out]-perl options
	  to configure.ac to allow users to disable these modules if desired.
	- Eric Sunshine fixed configure.ac so that the "Python SDK usable"
	  check is run only if the Python SDK is detected.  (Previously the
	  "SDK usable" check was run even if the SDK was not detected.)
	- Eric Sunshine enabled the "Perl SDK usable" check in configure.ac.
	- Eric Sunshine renamed configure.ac output variable
	  PERL5.SDK.AVAILABLE to PERL5.AVAILABLE to be consistent with
	  PYTHON.AVAILABLE.  (Also deprecated the old meaning of
	  PERL5.AVAILABLE which was "yes" when the perl program itself was
	  detected, but which was not used by either build system.)
	- Eric Sunshine eliminated ugly quadrigraphs in configure.ac by
	  properly quoting arguments in which they were used.  For instance,
	  [[#include <foo.h>]] rather than [@%:@include <foo.h>].
	- Eric Sunshine added #include <sys/ioctl.h> to Linux Joystick test in
	  configure.ac and to csjoylin.cpp.  Reported as necessary for Linux
	  2.2 by Dariusz Dawidowski <chfsoft@interia.pl>.
	- Luca fixed a bug in awsTextBox class: in fact it was not possible to
	  delete with the 'Del' key the first character contained in the text
	  box.
	- Luca added a 'friend' declaration to make the physics ode plugin
	  compile properly on VisualC++ 6.
	- Eric Sunshine fixed bug in cspython.mak where platform-specific
	  Python libraries were not being used when building cspython, thus
	  resulting in unresolved _CreateSolidBrush@4 symbol (which exists in
	  gdi.lib).
	- Eric Sunshine fixed bug in csLoadLibrary() on Windows.  When looking
	  up "plugin_compiler" symbol in DLL, it was calling GetProcAddress()
	  rather than csGetLibrarySymbol().  This caused lookup of
	  "plugin_compiler" to fail with Borland since GetProcAddress() is not
	  smart enough to try both "plugin_compiler" and "_plugin_compiler",
	  whereas csGetLibrarySymbol() is.
	- Wouter Wijngaards fixed an off-by-one bug in csconin, where if
	  you pressed the up arrow you would get the line before the previous
	  line instead of the previous line.
	- Marten removed String shadervariabletype.
	- Marten added accessors to shadervariable system. Currently they
	  are only implemented for genmesh buffers, but they should be
	  implemented in all meshtypes.
13-Dec-2003
	- Eric Sunshine applied patch from Randall Foreman
          <eidpers@comcast.net>.  csModelConverterASE was accidentally
          inheriting iModelConverter privately, rather than publicly.
12-Dec-2003
	- res added a 'console control handler' for Win32.  It handles proper
          shutdown of the app in case the 'Close' button on the console window
          is pressed, the user logs off or the system shuts down.
        - James Thompson extended swig wraper to provide overloaded
          iAws::SetupCanvas (iGraphics2D *g2d=0, iGraphics3D *g3d=0) The
          default C++ usage of SetupCanvas expects a NULL pointer to an
          iAwsCanvas.  The swig wrappers won't allow a NULL/0 to be used.
	- Eric Sunshine changed configure.ac to check for a usable FreeType2
	  installation by testing for features actually required by Crystal
	  Space, rather than simply checking the library's version number since
	  the version number check was unreliable.  (For instance, one might
	  install FreeType 2.1.3, yet "freetype-config --version" will report
	  9.0.2 or some such.)
	- Eric Sunshine augmented configure.ac so that it prefers "ranlib -s"
	  on MacOS/X, since Panther emits a warning if the -s is omitted.
	- Eric Sunshine augmented configure.ac so that the Carbon.h check is
	  performed only by the compiler (and not by the preprocessor).  At
	  least one MacOS/X user switches between gcc 2.95 and gcc 3.3 via a
	  script which toggles the values of CC, CXX, and CPP in the
	  environment, but the script uses "cpp" for CPP, rather than "gcc -E".
	  This causes the Carbon.h check to fail when performed by the
	  preprocessor since __APPLE__ and __GNUC__ are not defined.  By only
	  performing the check via the compiler, we side-step this issue.
	- Eric Sunshine applied a very ugly hack to the existing very ugly hack
	  in csperl5.mak to prevent it from trying to link the non-existent
	  cspace-rsrc.o into the generated cspace.dll Perl extension module.
	  (The correct solution, which we should apply in the future, is to use
	  Perl's own extension building facility to build this extension,
	  instead of trying to coerce the CS makefile system into doing so;
	  just as cspython utilizes Python's distutils to build the Python
	  extension module.)
	- res updated the terrain-related shaders.
	- res fixed the distorted 2D with the GL NR.
	- res fixed csLight::SetInfluenceRadius() to work as expected.
	- res fixed an uninitialized member of csKDTree.
	- res fixed the uninitialized dynDomain in the ball plugin.
	- res made the XML shader compiler more verbose in case of errors.
	- res updated the stencil makefile/Jamfile to link against csgfx.
11-Dec-2003
	- Philipp Aumayr fixed a bug in AWS where a masked textbox raised an
	  assert if the input was reactivated by clicking on the far right of
	  the string.
	- Eric Sunshine augmented configure.ac to check if the compiler/linker
	  recognize the -shared flag.  Consequently, this flag is no longer
	  hard-coded in unix.mak, unix.jam, and win32.jam.
	- Eric Sunshine augmented configure.ac to check if the linker
	  recognizes the -soname flag.  Consequently, this flag is no longer
	  hard-coded in unix.mak and unix.jam.  This change also fixes bug
	  #748023 ("-soname not recognized on Solaris").
	- Eric Sunshine augmented compiler.m4, which is used by external
	  projects, to also check for -shared and -soname.
	- Eric Sunshine fixed the CS_PROG_CC, CS_PROG_CXX, CS_PROG_LINK checks
	  in compiler.m4, which is used by external projects, so that they
	  append results to the existing values of COMPILER.CFLAGS,
	  COMPILER.C++FLAGS, and COMPILER.LFLAGS, respectively, rather than
	  setting the values exclusively.
	- Eric Sunshine agumented CS_BUILD_IFELSE() and CS_CHECK_BUILD() in
	  checkbuild.m4 to accept an optional INHIBIT-OTHER-FLAGS argument.
	  This argument, if provided, inhibits the normal behavior of appending
	  OTHER-CFLAGS, OTHER-LFLAGS, and OTHER-LIBS to the values of the
	  output variables (though the "other" flags are still used for the
	  check itself).
	- Eric Sunshine augmented CS_CHECK_BUILD_FLAGS() in checkbuild.m4 to
	  accept optional OTHER-CFLAGS, OTHER-LFLAGS, and OTHER-LIBS arguments.
	  These may be useful in special cases where the check for one build
	  flag might depend upon the presence of other build flags, yet the
	  output variable should reflect only the build flag under actual
	  scrutiny, and not the additional supporting flags.  As a practical
	  example, some build flags cause the compiler to emit a warning
	  message because it does not like the flag, yet the compiler still
	  exits with a "success" result, which makes it difficult to determine
	  that the compiler complained about the test flag.  To work around
	  this problem, -Werror can be sent in via OTHER-CFLAGS to cause the
	  compiler to treat the warning as an error and exit with a proper and
	  detectable "failure" result.
	- Eric Sunshine simplified the -Werror and CS_CHECK_LOCAL_INCLUDE tests
	  in configure.ac by using the (relatively) new CS_CHECK_BUILD_FLAGS()
	  macro, rather than the lower-level CS_BUILD_IFELSE() macro.
	- Eric Sunshine fixed an #include in cstool/proctex.h in order to
	  support the Borland compiler which can't deal with csRef<iFoo> when
	  iFoo is only a forward declaration.  This was supposed to have been
	  fixed on 25-Nov-2003, but a typographical error resulted in inclusion
	  of iutil/event.h rather than the needed iutil/eventh.h.
	- Eric Sunshine fixed bug in cpsace.i.  It failed to export iReporter,
	  iReporterIterator, and iReporterListener.
	- Eric Sunshine fixed csperl5.mak so that it adds `swigperl5gen' and
	  `swigperl5inst' targets to the output of "make help".
	- Eric Sunshine fixed failure of `-shared' check in compiler.m4, which
	  is used by external projects.  Problem was that in replacement for
	  AC_TRY_EVAL(), "$1" was incorrectly being evaluated in the context of
	  CS_PROG_LINK, rather than in the context of AC_TRY_EVAL().  Also
	  upgraded `-soname' check to mirror the one from CS/configure.ac which
	  emits a more aesthetically pleasing answer.
	- Duhprey commited a patch from Leandro Motta Barros to expose some
	  ode specific parameters for joints (Done via iODEJointState)
	- Duhprey commited a patch from Troy Chard for motor and bounce
	  parameters on joints.
	- Eric Sunshine committed a new custom cursor plugin from Neil Mosafi
	  <nmosafi@totalise.co.uk> which allows use of arbitary iImages as
	  mouse cursors.  If the platform-specific driver does not support
	  iImage as a cursor, then the plugin emulates the cursor by rendering
	  it manually via iGraphics2D.  He also added iImage cursor support to
	  the software X-windows canvas (however, it presently converts colored
	  cursors to black and white).
	- Eric Sunshine eliminated compilation warnings in some canvases.
	- Eric Sunshine fixed bugs in csTerrFuncLoader::Parse().  Was returning
	  boolean values even though function is declared as returning
	  csPtr<iBase>.
10-Dec-2003
	- Eric Sunshine fixed bug in unix.mak where it was incorrectly
	  exporting the hard-coded "-ldl -lm" to cs-config's --libs option even
	  if the target platform did not supply those libraries.  Furthermore,
	  it was adding these flags to the normal CS build as an accidental and
	  incorrect side-effect (even when the target did not supply those
	  libraries).
09-Dec-2003
	- Marten fixed stencil shadow renderloop plugin.
	- Marten fixed so CLOD and ballmesh compiles, not tested yet though.
	- Marten made isoengine compile.
8-Dec-2003
	- Jorrit added a disabled optimization in the OpenGL canvas to Blit().
	  It is disabled because it makes procedural textures upside down.
	  So I need to find a way to either change the coordinate system
	  or else specify a negative stride. Who can help me with this?
	- Jorrit managed to enable the optimization in Blit() by disabling
	  a correction in the GL renderer for this clumsy way Blit() works.
	  It turns out that the GL renderer was specifically inverting
	  texture space for procedural textures ONLY because Blit() was also
	  inverting it. This optimization gives a 10% speedup approximatelly.
	  It is possible that other procedural textures will now be inverted
	  though.
7-Dec-2003
	- Eric Sunshine changed configure.ac's "mkdir -p" check so that it uses
	  the more conservative "rmdir", rather than "rm -rf", to remove the
	  potentially bogus directory named "-p" which older versions of
	  "mkdir" create.
	- jamest changed swig wrapper to better support csBox* objects
	- Keith updated sprcal3d and sprcal3dldr to use VFS and vfs paths.
	  CVS of cal3d as of *today* is required to use this.
	- Luca fixed 2 compilation errors in the joystick plugin for windows.
6-Dec-2003
	- Eric Sunshine augmented checks for cslibs-config, nasm, and
	  sdl-config to use AC_CHECK_TOOLS() rather than AC_CHECK_PROGS() in
	  order to better support cross-building.
	- Eric Sunshine augmented crystal.m4 (which is used by external
	  projects) to locate cs-config using AC_CHECK_TOOLS() rather than
	  AC_CHECK_PROGS() in order to better support cross-building.
	- Eric Sunshine added `ranlib' check to jamtemplate/configure.template
	  (which is used by external projects) since some platforms require
	  ranlib when installing libraries.
5-Dec-2003
	- res fixed the iEvent::Find() renaming in cspace.i after his recent
	  constness changes.
	- Eric sunshine changed configure.ac so that it no longer invokes
	  AC_PREFIX_DEFAULT(["/usr/local/crystal"]).  This fixes problem where
	  'jam install' was installing into /usr/local/crystal/share/crystal,
	  etc., by default rather than /usr/local/share/crystal, etc., if user
	  did not specify --prefix.  ('make install' still correctly installs
	  into /usr/local/crystal, by default.)
	- Eric Sunshine augmented installdir.m4 so that it now keeps its
	  Jam-specific modifications to "prefix" and "exec_prefix" local to
	  itself, rather than polluting the global $prefix and $exec_prefix
	  variables, which might be needed unmolested elsewhere.
	- Eric Sunshine augmented crystal.m4 so that it also exports
	  CRYSTAL_INCLUDE_DIR (make) and CRYSTAL.INCLUDE_DIR (jam).  This is
	  the value returned by cs-config's --includedir option.
	- Eric Sunshine disabled warning C4248 for MSVC6 in win32/csosdefs.h
	  since MSVC6 emits bogus warning about "protected constructor" when
	  csHash instantiates Iterator and GlobalIterator even though csHash is
	  a friend of Iterator and GlobalIterator.
	- Luca fixed a MSVC6 'for(int i=)' scope bug.
	- res fixed more stuff in the shadersystem. r3dtest works now, tho no
	  stencil shadows yet.
4-Dec-2003
        - Steven Geens added a odedynam function for mesh<->plane collisions.
3-Dec-2003
	- res changed the csKeyEventHelper to accept 'const iEvent*' arguments.
	  Also changed the iEvent->Find() methods to be 'const'.
	- jamest Modifed swig wrapper to support iSector::HitBeamPortals(),
	  also added csBox* to the swig wrapper.
	- jamest commented out the setScale() function in sprcal3d
	  so plugin would build until setScale() makes it into cal3d
	  cvs
	- res did a bunch of changes and fixes to shadersys. He attempted to
	  get the r3dtest map functional, but hadn't too much success.
2-Dec-2003
	- res enabled VC the warning "class has virtual functions, but
	  destructor is not virtual". It was enabled in the past, but somehow
	  got lost on the way.
	- Eric Sunshine changed configure.ac so that a few (very few) detected
          compiler flags are now deemed "mandatory".  Mandatory flags are
          required even for external projects which utilize Crystal Space.  For
          example, an external project on MacOS/X must use the
          -force_cpusubtype_ALL flag if the project calls qsqrt().  cs-config's
          --cflags and --cxxflags options now emit only mandatory flags, rather
          than emitting all of the compiler flags with which Crystal Space
          itself was built.  This prevents cs-config from polluting external
          project builds with flags (such as -fno-exceptions) which are mere
          preferences of the Crystal Space developers.
1-Dec-2003
	- Jorrit fixed a serious bug in csString::FormatV. A comment in that
	  routine incorrectly stated the following:
	    // Some vsnprintf()s return -1 on failure, others return
	    // desired capacity.
	  However, on MSYS neither happens. Instead the size of the input
	  buffer is returned in case of failure.
        - John Harger changed iRenderBuffer to use a "CopyToBuffer" method as
          an alternative (and preferred) method to copy data to a buffer,
          rather than Locking the buffer.  This should be especially beneficial
          to sprite3d's, where it updates the buffer quite frequently, when VBO
          is enabled because you cannot render from a locked VBO buffer.
	- res augmented csInitializer::DestroyApplication() documentation with
          the information that it unloads all plugins (and what this can
          cause.)
	- res changed csSimplePixmap to store the texture handle in a csRef<>.
30-Nov-2003
	- Eric Sunshine clarified and corrected comments in crystal.m4.  Also
	  cleaned up m4 mis-quoting issues and generally improved formatting.
	- Eric Sunshine fixed bug in cs-config/Jamfile where it neglected to
	  export COMPILER.CFLAGS and COMPILER.C++FLAGS to generated cs-config
	  script, with the result that cs-config's --cflags and -cxxflags
	  options always returned the empty string.
	- Eric Sunshine applied a patch to csjoywin plugin from Dariusz
	  Dawidowski <truman@go2.pl> which allows it to build with Mingw.  The
	  patch also sets the DX cooperative level to DISCL_BACKGROUND when
	  CS_DEBUG is defined, rather than to DISCL_FOREGROUND.
	- Eric Sunshine added device/joystick/windows to msvc/required.mak.
	- res changed the buffer anf texture mapping specification in shader
	  files for consistency to be like:
	    <buffer name="vertices" destination="position" />
	    <texture name="tex diffuse" destination="unit 0" />
	- res made the 'type' attribute for <fp> and <vp> optional. Defaults
	  to 'fp' resp 'vp' now.
	- res updated the Thing plugin.
	- res made shader pass mixmode and alpha mode working again.
28-Nov-2003
	- Daniel Fryer found a bug in the thing mesh plugin when adding
	  polygon vertices one at a time. The vertex count was not correctly
	  updated in all cases.
	- Jorrit fixed a bug in the software renderer. GetOriginalDimensions()
	  would not return the original dimensions for a texture that was
	  scaled to fit po2 sizes.
	- Jorrit fixed a bug in the loader. It wouldn't parse <keepimage/>
	  correctly.
	- Jorrit fixed the software renderer so that it now scales the image
	  to power of two dimension at Prepare time and not at register time.
	  That way it works more like the OpenGL renderer.
	- Jorrit fixed an initialization bug in the kdtree code where the
	  'parent' of the root node was not set to 0. This could cause crashes
	  in viewmesh (and in other apps too if there were moving objects).
	- Wouter fixed an uninit variable in terrfunc.
	- James Thompson added iAws to swig wrapper, added missing cursor.h to
	  swig wrapper so that iGraphics2D.SetMouseCursor would not error out
	- Keith Fulton added GetAttributeValueAsBool( ) function to
	  iDocumentNode and related classes.
	- Keith Fulton added flags options for rotating cal3d sprites to appear
	  correctly and to auto-flip the UV coordinates.  See example .cal3d
	  file for how to use.
	- res added some NR VC7 projects to csall.
	- res made lots of changes. Waterdemo now works again.
	- res fixed missing shader program deactivation.
25-Nov-2003
	- Eric Sunshine removed the ugly, semi-private, legacy name_VERSION and
	  name_scfGetID() API which SCF_VERSION() created for each declared
	  interface.  This functionality has been entirely subsumed by the
	  newer scfInterface<> template.  Also, supporting both the old and new
	  APIs in parallel made it impossible for projects using namespaces to
	  invoke SCF_VERSION() (it would generate compilation errors both
	  inside and outside the namespace).  With the legacy API removed,
	  SCF_VERSION() can once again be used by projects using namespaces
	  (though the macro must be invoked outside the namespace).
	- Eric Sunshine patched cspace.i and the custom-code for each of the
	  Swig-supported languages (Python, Perl5, and Java) to work with
	  scfInterface<> rather than accessing the obsolete name_VERSION global
	  constant when requesting an interface's version number.
	- Eric Sunshine eliminated Swig complaints about redeclaration of
	  CS_CRYSTAL_PROTOCOL, CS_MUSCLE_PROTOCOL, and CS_XML_PROTOCOL in
	  javapre.i for csjava.
	- Eric Sunshine fixed the following problems in csperl5.mak:
	    - Fixed bug: Was placing the generated pure-Perl5 module
	      (.pm/.so/.dll) into the source directory (CS/scripts/csperl5).
	      This is incorrect because the source directory might be read-only
	      or shared.  Now instead places the generated module into
	      $(OUTPROC)/perl5.  This mirrors the behavior of the pythmod
	      target which places the pure-Python module in $(OUTPROC)/python.
	    - Fixed bug: Failed to respect $(SRCDIR) when trying to locate the
	      perl5.cin input file, thus causing the csperl5 target to fail
	      when building outside the source directory.
	    - Fixed bug: Added several missing dependency rules for generated
	      files.
	    - Fixed bug: csperl5clean target failed to remove many of the
	      generated resources, such as the .cex file, and the .pm and .inc
	      derived files.
	    - Fixed bug: Swig would be run every single time the csperl5 target
	      was invoked even if the Swig-generated file was up-to-date.
	      This, in turn, would cause the Swig-generated file to be
	      recompiled each time (a 25-minute undertaking on Eric's
	      computer).
	    - Now places derived source files in a subdirectory of
	      $(OUTDERIVED) rather than directly into $(OUTDERIVED) in order to
	      avoid potential collisions.
	- Eric Sunshine made the following changes to cspython.mak:
	    - Fixed bug: pythmod target failed to utilize the factory-supplied
	      cspace.py from CS/scripts/python if Swig was not installed, thus
	      causing build failure.
	    - Fixed bug: cspythonclean and pythmodclean targets failed to
	      remove all of the generated resources, such as the .py file.
	    - Changed some makefile variable names in order to avoid global
	      namespace pollution.  For instance, SWIG.OUTDIR becomes
	      SWIG.CSPYTHON.OUTDIR, and SWIG.INTERFACE becomes
	      SWIG.CSPYTHON.INTERFACE.
	    - Now places derived source files in a subdirectory of
	      $(OUTDERIVED) rather than directly into $(OUTDERIVED) in order to
	      avoid potential collisions.
	- Eric Sunshine re-enabled csperl5 in user.mak since the Swig-generated
	  files are now kept up to date by a daily cron job, and because Eric
	  fixed all other build problems (at least on Unix) which plagued the
	  module.
	- Eric Sunshine eliminated a number of compilation warnings and errors
	  from the CS libraries reported by Borland C++Builder.  It seems that
	  even the most recent version of C++Builder still fails to implement
	  some of the newer extensions to the C++ specification.  For instance,
	  csRef<iFoo> is illegal if iFoo has been seen only as a forward
	  declaration (this problem impacts all older C++ compilers).  The
	  compiler also seems to have trouble parsing normal, valid C++ in a
	  number of cases.  Issues reported by Randall Foreman
	  <rrforeman@comcast.net>.
	- Luca fixed a compilation error in cssys/win32.cpp: the error was
	  a bad casting.
	- Marten Svanfeldt branched CS with the new branch NEW_SHADERSYS.
	  The purpose of this branch is to develop the new shadersystem
	  without disturbing all other development. Goal is to merge it back
	  within three weeks. Initial changes to this branch is:
	    - Move shadermgr into plugins\video\render3d\shader\shadermgr
	    - Moved the shaderplugins to
	      plugins\video\render3d\shader\shaderplugins
	    - Added an initial implementation of csXMLShader and
	      csXMLShaderCompiler in
	      plugin\video\render3d\shader\shadercompiler\
	      xmlshader. It have all methods but lacks testing.
	    - Rewrote ivideo/shader/shader.h We should move this file to
	      ivideo.
	- res re-added VC7 project files.
	- res added VC7 project files for the xmlshader plugins.
	- res fixed xmlshader.mak.
	- res made various compile and semantic fixes.
24-Nov-2003
	- Eric Sunshine performed minor clean up of the new cslibs test in
	  configure.ac.  Now wraps cslibs-config invocations in AC_RUN_LOG().
	  Added documentation.  Minor whitespace cleanup.  Re-generated
	  configure script with Autoconf 2.57 on Unix to fix formatting of
	  --help, which Windows Autoconf messes up.
	- Jorrit added csStrKey which can be used as a simple key type for
	  usage with csHash and csConstCharHashKeyHandler. csStrKey makes
	  a copy of the key so it is safer to use then just using
	  const char* as the key.
	- Jorrit fixed a bug in the OpenGL renderer. DrawPolygonMesh was
	  not correctly restoring the z-buffer mode after drawing lightmaps.
	  In some cases this could cause objects to use the wrong z-buf
	  mode later.
	- res fixed some compile errors on gcc3.3.
	- res disabled the use of SetDllDirectory() in Win32. Doesn't seem
	  to do what it was intended for.
23-Nov-2003
        - Matze fixed jam clean target for libraries.
        - Matze fixed a bug when SubInclude rule was placed in the middle of a
          jam file.
22-Nov-2003
	- res made the following changes to configure:
	    - Now checks for a 'cslibs-config' script, which provide
	      additional CFLAGS and LDFLAGS. This script will be included in
	      the upcoming unified Win32 libs package.
	    - Some library checks now utilize the new aliases feature for the
	      lib names in the Win32 libs package.
21-Nov-2003
	- Eric Sunshine augmented CS_CHECK_LIBS_WITH() in checklib.m4 so that
	  it now accepts an optional list of alias names of the library for
	  which it is checking.  For example, the zlib check which normally
	  checks for "z" can be given aliases "zlib" and "libz" which are names
	  common on Windows.
20-Nov-2003
	- Eric Sunshine once again disabled /nodefaultlib:"MSVCRT" in the
	  freefnt2 MSVC project files since a user reports that it results in
	  many unresolved references at link time.
	- Eric Sunshine re-configured msvcgen/required.mak so that the sprcal3d
	  and sprcal3dldr project files actually get generated (as was
	  intention).
19-Nov-2003
	- Eric Sunshine added new static method scfInterface<>::GetName() which
	  returns an interface's name as a string.  This allows templates to
	  retrieve an interface's name as a string even if the template knows
	  the interface only by the opaque name `T'. For example:
	  char const* n = scfInterface<T>::GetName();
	- Jorrit added a short-hand notation for specifying addons in a
	  map file. Instead of:
	      <addon>
	        <plugin>pluginname...</plugin>
		<params>
		   ...
	        </params>
	      </addon>
	  you can now also say:
	      <addon plugin="pluginname...">
	        ...
	      </addon>
	- Jorrit added processing of the <file> keyword for mesh objects in
	  map files. If you use <file> it will try to open the given file
	  and parse it. There are three possibilities:
	    - The file starts with <params>: in this case it is equivalent
	      to using the old <paramsfile> keyword.
	    - The file starts with <meshobj>: in this case it will load
	      the mesh object parameters from that file. After processing
	      <file> it will continue with the meshobject statements in the
	      parent node.
	    - The file starts with <meshfact>: in this case it will load
	      the factory (if not already loaded with that name) and do
	      nothing else. After that you can use <params> like usual.
	- Jorrit fixed a bug so that <file> in combination with <meshfact>
	  actually works.
	- Jorrit added error reporting in case the <file> is not a meshfact,
	  meshobj, or params.
18-Nov-2003
	- Keith committed a new version of the Max level export scripts.
	  This version supports ThingFactories and instances now.  Also
	  the doc is slightly updated.
	- Eric Sunshine re-added /nodefaultlib:"MSVCRT" to the freefnt2 MSVC
	  project file since MSVC complained that this flag was needed.
17-Nov-2003
	- Jorrit removed obsolete bits64.h from Dynavis.
	- Jorrit performed additional micro-optimizations in the coverage
	  routines of Dynavis.
	- Jorrit optimized the kdtree considerably by using a block allocator.
	- Jorrit fixed a bug in Dynavis by moving history culling AFTER
	  frustum culling. Otherwise Dynavis would sometimes cull wrong because
	  objects outside of frustum kept contributing to culling. This
	  could happen if you have sudden changes in camera position.
	- Jorrit changed Dynavis to also use the block allocator inside
	  Dynavis.
	- Eric Sunshine fixed bug in CS_CHECK_BUILD_FLAGS() in checkbuild.m4
	  where it could invoke the `test' program with too many arguments
	  because it failed to quote the result of the build check, and the
	  build result might consist of multiple tokens.  An example which
	  triggered the error: `test -multiply_defined suppress != no'.  Now,
	  it correctly quotes the build result ("-multiply_defined suppress").
	- Eric Sunshine added assignment operators for csHash::Iterator and
	  GlobalIterator to pacify MSVC which complained that it could not
	  generate default assignment operators.
	- jamest added spritecal3d support to swig wrapper
16-Nov-2003
	- Eric Sunshine fixed bug in make and Jam `install' targets where they
	  neglected to install the generated volatile.h if the build directory
	  differed from the source directory.  Problem pointed out by Allister
	  MacLeod <amacleod@mv3d.com>.
	- Wouter fixed two 'jumps on uninitialised values' errors in aws:
	  in awsmenu the mouse_captured was uninited (inited to false),
	  in awscomponent the redraw_tag was uninited (inited to 0).
	  Another bad initialisation in the console buffer of std.output.
	  Seems that SetPageSize() was called too early in the constructor.
	  Also in conbuff some delete instead of delete[] usage fixed.
	- Wouter also fixed a buffer over-read problem in writechr.inc.
	  The alpha byte was pre-fetched at the end of the writeloop,
	  but also prefetched for the last iteration (i.e. reading a value
	  outside bounds which wasn't used).
	  Additionally, the freefnt2 plugin sometimes did a new[0], which
	  is bad as well, changed it to allocate at least 1 byte.
15-Nov-2003
	- Jorrit fixed various significant bugs in Dynavis related to the
	  depth buffer. The bugs had to do with the fact that a tile is now
	  64 wide while all coverage buffer routines assumed it was only
	  32 wide. This caused the depth buffer to be wrongly updated
	  which in turn could cause culling errors (very rare) but more
	  also reduced culling efficiency a lot. With this bug fixed framerate
	  goes up one or two fps again.
	- Jorrit removed the ability in Dynavis to use tiles of 64 high.
	  This only complicates matters and it wasn't working well anyway.
14-Nov-2003
	- Jorrit did the following Dynavis changes:
	    - Removed the write queue optimization for kdtree nodes again as
	      it doesn't seem to do anything at all.
	    - Removed the object bounding box for the kdtrees. This saves
	      about 28 bytes per node and also makes building/updating
	      the kdtree slightly faster. This also affects frustvis.
	    - Replaced history culling and avoiding write queue flushes
	      with a real fast random function instead of a counter.
	- Jorrit did an optimization in Dynavis by caching the state
	  of movable->IsFullTransformIdentity().
	- Jorrit fixed a slight bug in one of the coverage tile flush routines
	  of Dynavis. This bug would not cause errors but it could cause
	  slight performance degradation in some cases.
	- Jorrit optimized FlushForFull() in Dynavis by decreasing the depth
	  wherever a 8x8 block is fully covered. This improves culling
	  efficiency at the slight cost of some more work. This optimization
	  could be done in some of the other flush routines as well.
	- Jorrit started work on an optimization in Dynavis which detects
	  if an object actually modifies the coverage buffer. This is
	  not finished yet though.
	- Jorrit optimized Dynavis routine FlushNoDepthConstFValue() to also
	  test for full coverage of blocks.
	- Jorrit additionally optimized FlushGeneralConstFValue() to also
	  test for full coverage of blocks.
13-Nov-2003
	- Keith Fulton committed updated versions of the scripts for 3ds Max
 	  exporting.  I've had these for two months and forgot to commit them
 	  (I thought it was done already.)  See Luca Pancallo (Talad on irc),
 	  director of PlaneShift project with any questions about these -- he
 	  wrote them.
	- res improved support for transparency in NR. An 'alphamode' has been
	  added, for selection of what kind of transparency to use: none,
	  binary(ie alpha test), smooth blending. It's another member in
	  csRenderMesh. On the shader side, it can be set per pass. There's
	  also an 'auto' mode, where the shader pass selects the alpha mode
	  based on a specified texture (i.e. 'binary' mode for keycolored
	  textures.)
	- res fixed a problem in csRenderMeshList::CompareMeshListInfo(),
 	  where the arguments weren't casted correctly.
	- res fixed a 'double to float conversion' MSVC warning in dynavis.
	- res fixed a compile error in docconv.
	- res fixed misinterpretion of the 'flags' TGA header field.
	- res removed some leftover comments from
	  plugins/video/render3d/opengl/gl_txtmgr.cpp.
	- res fixed some visual glitches with 2D graphics on NR GL by adding
	  some code to choose the default texture unit and turning off alpha
	  test when entering 2D mode.
	- Eric Sunshine continued working around SourceForge CVS server
	  brokenness with regards to jobber.pl.  Specifically, the SourceForge
	  CVS server is so mis-configured that it drops the connection any time
	  the large Swig-generated CS/scripts/perl5/cswigpl5.inc is committed
	  to the repository even though this script is running on a local
	  SourceForge machine.  To work around the problem, we enable
	  compression in order send less information to the CVS server, under
	  the assumption that the huge file size is what is triggering the
	  server to drop the connection.  Using -z6 resulted in some success,
	  but it still dropped the connection at times, so now it is being
	  bumped up to -z9.
12-Nov-2003
	- Eric Sunshine removed redundant SubDir invocation from
	  cspython/Jamfile.
	- Jorrit added another optimization to Dynavis.  Dynavis now attempts
 	  to check if adding items from the write queue will help make the
 	  object invisible.  If not it will not flush the write queue.
	- Jorrit optimized Dynavis so that nodes also use the write queue now.
 	  Not sure if this really is an optimization.  Have to do further
 	  tests.
	- Wouter fixed a bug in the input console, csconin, where if it would
 	  hang when truncating the command history.  It was using Delete (0)
 	  instead of DeleteIndex (0).  Additionally, the history position could
 	  be invalid after truncation.
	- Wouter fixed glcommon2d to invoke glClear() after resizing.
 	  Apparently some drivers (like ati radeon 7500 on win XP) corrupt the
 	  video memory if you don't.  Fix from Robin Stanton.
	- Wouter added SetDefaultFont() to AwsPrefsManager.
11-Nov-2003
	- Eric Sunshine fixed MacOS/X application menu malfunction introduced
	  on August 1, 2003 when configuration was changed so that OSXDelegate
	  would no longer be registered as the application's delegate.  This
	  caused problems with the Quit and Pause menu items because those
	  items were still targeting the delegate, thus they became
	  dysfunctional.
	- Luca fixed a compilation error in plugins/mesh/bcterr/object/bcterr.h
	  due to recent changes to the iTerrFuncState interface.
	- Eric Sunshine worked around problem where CVS `Header' keyword in sed
	  expression in swig.jam was accidentally being expanded in swig.jam
	  itself.  This keyword needs to appear verbatim in the sed expression;
	  not in expanded form.
	- res added a new tool app, docconv, to convert documents between
	  different document systems.
	- res tweaked the bindoc plugin a bit so it takes up a bit less memory
	  when writing a document.
10-Nov-2003
	- Jorrit removed the blend2cs script from CS.  It is made obsolete by
 	  the blend2cs project http://projects.blender.org/projects/blend2cs/
	- Wouter fixed up the terrain texture caching to use the
	  CacheManager. Instead of a cachedir, put cache="yes" to
	  use caching.
	- Jorrit did another optimization to Dynavis. This time the target was
	  TestRectangle() in the coverage buffer. Optimized this routine by
	  splitting the coverage buffer test and the depth test. Both tests
	  can then be written a lot more efficient.
	- Wouter changed the texture generation <heightmap> and <slope>
	  statements, as well as the terrfunc <heightmap> statement to
	  accept a <flipx>yesno</flipx> and/or a <flipy> attribute.
	  iTerrFuncState::SetHeightMap also has arguments to flipx or flipy.
	  By default, no flipping occurs, keeping the API compatible.
	- Jorrit added a function to return an estimate of the amount of
	  objects that are in a kdtree node and its children. Currently
	  unused.
	- Eric Sunshine corrected typographical errors in build/msvc6.txi and
	  msvc7.txi.
	- res tweaked the doxygen files to include paths relative to the
	  CS/include resp. CS directory. Also updated the layout of the
	  generated HTML files a bit.
	- Chris Matuszewski fixed a bug in csIntersect3::IntersectTriangle that
	  was causing it to fail in certain cases.  The new implementation
	  returns a successful intersection for both frontface and backface
	  triangles.  This fixes a previous problem with HitBeam not working
	  correctly for genmesh objects.
	- Chris Matuszewski updated some code that was using
	  csIntersect3::IntersectTriangle twice: once for frontface, once for
	  backface.  This is no longer necessary due to the updated
	  implementation of csIntersect3::IntersectTriangle, which works for
	  both frontface and backface now.  The affected files are
	  terrfunc.cpp and spr3d.cpp.
9-Nov-2003
	- Rhad added functions to handle reversing some operations with
	  particle emitters.  These take care of some simple situations where
	  previously the entire emitter or emitgen3d had to be recreated to
	  alter certain settings.
	    - iEmitState::RemoveAge reverses iEmitState::AddAge
	    - iEmitMix::RemoveEmitter reverses iEmitMix::AddEmitter
	    - iEmitMix::AdjustEmitterWeight allows for adjusting the weight
	      of an existing emitter beneath a mix without recreating the
	      entire mix, or removing and re-adding the sub emitter.
	- Wouter added csgfx library to linking of thing.so, now needed
	  under NR. Both to .mak and Jamfile.
	- Eric Sunshine added SCF_DESTRUCT_IBASE() invocations for each of the
	  corresponding SCF_CONSTRUCT_IBASE() invocations in methods in
	  CS/plugins/video.  The only remaining directories which need to be
	  converted are the CS/plugins/mesh tree.
	- Wouter created new option for terrain (terrfunc, old renderer)
	  texture generation. You can specify a cache directory, for the
	  generated terrain textures, and if you do so, the textures are
	  cached there. If present, the files are also read from the cache,
	  speeding up loading. Note that changes cannot be detected,
	  a recalc must be forced by deleting the pictures.
8-Nov-2003
	- Andreas Busch added missing awstut.cfg
	- Wouter fixed a typo in csfxscr fullscreen header file, and
	  added a new function that can do a dpfx for part of the screen.
	- res made the following (mostly NR-related) changes:
	    - Rendermeshes now contain a shader var context.
	    - Can now support up to 8 texture coordinate sets.
	    - Added very basic support for lightmaps.
	- res slightly cleaned up after the LM-related changes.
	- res removed bit field use in the TGA image loader.
	- res fixed a few double-to-float warnings in the chunklod plugin.
	- res added missing SCF_IMPLEMENT_IBASE_REMOVE_REF_OWNERS invocations
	  to bindoc.
	- Eric Sunshine fixed some Texinfo mark-up problems and typographical
	  errors in apimod98.txi.
	- Eric Sunshine fixed bugs in awstut.mak where it was referencing
	  CSWS makefile variables.
	- Eric Sunshine fixed awstut.mak and awstut/Jamfile so that they
	  mention the new awstut.cfg file which Andreas Busch added.
	- res fixed a bug in genmesh where it wasn't lit correctly when an
	  object was used without localshadows and -relight.
	- Eric Sunshine added missing SCF_IMPLEMENT_IBASE_REMOVE_REF_OWNERS()
	  invocations to render3d/software and render3d/opengl.
	- Chris Matuszewski changed the AWS component transitions to use
	  real time clicks instead of virtual ones.
7-Nov-2003
	- res reverted the behaviour of setting the alpha of keycolored pixels
	  of textures in GL: just drop the alpha of KCed pixels to 0, but don't
	  raise the alpha of non-KCed pixels to 255, which gave problems with
	  alpha transparency in AWS (which sets a keycolor on all images.)
	- Chris Matuszewski changed AWS component transitions to use a delay
	  parameter specified in csTicks instead of using a step_size
	  parameter.  This approach has the benefit of making the transitions
	  take the same amount of time on computers with different processor
	  speeds.
	- Jorrit implemented the silhouette splatting optimization in Dynavis.
	  With this optimization, outlines that are partially behind the view
	  plane are now splatted to the view plane instead of simply discarded.
	  At some spots this optimization can really help a lot.
	- Jorrit added a 'toggle_splatting' command to Dynavis. Assigned the
	  ctrl-d 8 key to that command.
	- Jorrit enhanced the Dynavis debug mode so that it now shows which of
	  the optimizations are enabled and which are disabled.
	- res updated a comment in ogl_txtmgr.cpp. Just dropping the alpha of
	  keycolored pixels to 0 and leaving other pixels as is is indeed the
	  desired behaviour.
	- res added a paragraph about iGraphics2D::WriteBaseline() to
	  apimod98.txi.
	- res fixed a crash in the fixed function shader programs. A shader
	  variable wasn't properly set up.
	- res added a fix from Marten to
	  csShaderVariableContextHelper::FillVariableList().  Previously, not
	  all provided variables were actually filled.
	- Jorrit removed the first technique from ambient.xml. The second
	  technique is more compatible and works fast enough everywhere.
	- Wouter added a new technique to the NR terrain shader splatting_bump,
	  that avoid bumpmapping and lighting to make it work on 2 texture
	  units graphics cards.
	- Eric Sunshine added SCF_DESTRUCT_IBASE() invocations for each of the
	  corresponding SCF_CONSTRUCT_IBASE() invocations in methods in the
	  following locations:
	    CS/plugins/aws
	    CS/plugins/bugplug
	    CS/plugins/collide
	    CS/plugins/console
	    CS/plugins/cscript
	    CS/plugins/csparser
	    CS/plugins/cssaver
	    CS/plugins/culling
	    CS/plugins/device
	    CS/plugins/documentsystem
	    CS/plugins/engine
	    CS/plugins/engseq
	    CS/plugins/filesys
	    CS/plugins/font
	    CS/plugins/isoldr
	    CS/plugins/motion
	    CS/plugins/movierecorder
	    CS/plugins/net
	    CS/plugins/perfstat
	    CS/plugins/physics
	    CS/plugins/picogui
	    CS/plugins/proctex
	    CS/plugins/reporter
	    CS/plugins/sequence
	    CS/plugins/sound
	    CS/plugins/stdrep
	  The only remaining directories which need to be converted are
	  CS/plugins/mesh and CS/plugins/video.
	- Eric Sunshine eliminated numerous ambiguous operator overload errors
	  from partedit.
	- Eric Sunshine worked around bizarre preprocessor error on CompileFarm
	  Linux 2.2 (Alpha) installations where it fails to search
	  CS/plugins/aws for headers #included by aws/skinpars.cpp (at least
	  when building outside the source tree).  Work-around in aws.mak and
	  Jamfile involves explicitly adding -I$(SRCDIR)/plugins/aws to CFLAGS
	  for skinpars.cpp.
	- Jorrit fixed engseq plugin after Eric added an additional destructor
	  to some of the classes. C++ only accepts one destructor.
	- Eric Sunshine added missing SCF_IMPLEMENT_IBASE_REMOVE_REF_OWNERS()
	  invocations to csReporterListener and csXmlReadNode.
	- Wouter added new extensions to the csconout (standard output
	  console) plugin. This enables shadowing of the letters. Default
	  is off, the same behaviour as before. Extensions are:
	  EnableShadow, DisableShadow, SetShadowColor, GetShadowColor.
	- Wouter fixed some more SCF_DESTRUCT_IBASE typos in the sndmod
	  loader, linux joystick and iff loader. Also unbalanced ()'s
	  in cssaver.
	- Luca fixed some compilation errors for VC6 in the method
	  void csSequenceManager::Clear ().
        - John Harger fixed the Cg plugin so it works with the newer
          iShaderProgram interface
	- Chris Matuszewski documented recent changes made to iAWS interface
	  concerning the new way to create window transitions in apimod98.txi.
6-Nov-2003
	- res bumped the version of the iGraphics2D interface and updated some
	  Doxygen comments in include/graph2d.h (basically, the differences
	  between res's local copy he forgot to commit yesterday and Eric
	  Sunshine's patch to graph2d.h to work around res's commit amnesia :-)
	- res made the csShadowIterator destructor virtual.
	- Eric Sunshine added an ugly hack to jobber.pl to work around
	  SourceForge CVS server brokenness.  Specifically, the SourceForge CVS
	  server is so mis-configured that it drops the connection any time the
	  (admittedly) large Swig-generated CS/scripts/perl5/cswigpl5.inc is
	  committed to the repository even though this script is running on a
	  local SourceForge machine.  To work around the problem, we enable
	  compression in order send less information to the CVS server, under
	  the assumption that the huge file size is what is triggering the
	  server to drop the connection.  Enabling compression seems to
	  side-step the problem.
        - Andreas Busch changed pgtest and pgserver to use new keyboard event
	  handling.
	- Eric Sunshine removed an unportable #include <memory.h> from
	  bitarray.h.  This header is not present on all platforms.
	- Eric Sunshine augmented the Swig rules in the makefiles and in Jam
	  so that they filter out $Header: keywords from the generated files.
	  This will prevent the files from appearing modified to jobber.pl
	  simply because an element of the header, such as date, is different.
	  Also added SED variable to makefiles.
5-Nov-2003
	- Jorrit optimized the kdtree a bit so that it now does 20 attempts
	  instead of 10 to find the best split location. Also the cost is
	  now calculated based on a measure that looks more at number of
	  cut objects as opposed to balanced tree.
	- res changed the fire proctex to set an alpha of 255 on the output
	  image, instead of 0.
	- res removed the superfluous 'texture' parameter from
	  csGLStateCache::GetTexture().
	- res fixed the GL renderer to properly deal with keycolored procedural
	  textures.
	- Eric Sunshine added SCF_DESTRUCT_IBASE() invocations for each of the
	  corresponding SCF_CONSTRUCT_IBASE() invocations in methods in
	  CS/include and CS/libs.
	- Eric Sunshine split Class::scfRemoveRefOwners() implementation in
	  scf.h out into its own SCF_IMPLEMENT_IBASE_REMOVE_REF_OWNERS() macro
	  rather than having it bundled into SCF_IMPLEMENT_IBASE_DECREF().
        - acraig fixed up some calls to SCF_DESTRUCT_IBASE() that had a 0 as
          a param.
	- res added a 'flags' parameter to iGraphics2D::Write(). At the moment
	  you can specify flags to write on a baseline and disable font glyph
	  antialiasing. As the functionality of WriteBaseline() is now
	  provided by Write(), so it has been marked as deprecated.
	- res added SCF_DESTRUCT macros to the common and glwin32 canvas code.
	- res updated a comment in ogl_txtmgr.cpp.
	- res added a SCF_IMPLEMENT_IBASE_REMOVE_REF_OWNERS invocation missing
	  for csTinyXmlNode.
	- Eric Sunshine fixed bugs: swigpythinst and swigperl5inst makefile
	  targets failed to ensure that the appropriate `out' directories
	  existed before instructing Swig to emit files into those directories.
	- Eric Sunshine updated ivideo/graph2d.h to hopefully reflect res's
	  changes (above), since res forgot to commit all the files he had
	  changed, causing compilation to fail.
	- Eric Sunshine augmented jobber.pl to now automatically update
	  out-dated Swig-generated Python and Perl5 files.
	- Eric Sunshine performed project-wide spelling corrections:
	    invokate   --> invocate
	    invokation --> invocation
4-Nov-2003
	- Jorrit fixed a bug in Dynavis history culling. In some cases objects
	  could remain visible for longer then expected because the history
	  counter was only decremented if the object visibility test was
	  called. So if the node itself is not visible then it would not
	  get decremented. Solved this by comparing with the global history
	  frame counter instead.
	- Jorrit did an optimization to the usage of the write queue in
	  Dynavis. The write queue is the module in Dynavis that is responsible
	  for delaying writes to the coverage buffer. This is good for two
	  reasons:
	    - A write to the coverage buffer is an expensive operation. So
	      delaying that until really needed is good because sometimes it
	      is not needed at all.
	    - A write to the coverage buffer disrupts the depth buffer because
	      the depth buffer in Dynavis is always updated to highest values
	      (in contrast with a usual Z buffer). So by delaying writes to
	      the coverage/depth buffer we can often improve culling
	      efficiency.
	  The current optimizations reflects the fact that an object that
	  was calculated to be visible the previous frame (after testing the
	  write queue) will most likely not benefit from the write queue the
	  next frame either. So we don't flush the write queue. To make sure
	  we sometimes recheck the write queue for a given object we sometimes
	  flush anyway.
	- Eric Sunshine repaired outdated and incorrect Doxygen comments in
	  scf.h.  For example, documentation for SCF_DESTRUCT_EMBEDDED_IBASE
	  was 100% incorrect.
	- Jorrit changed the way that the coverage buffer outline drawing
	  works in preparation for outline clamping.
	- Jorrit removed all usages of SCF_SET_REF, SCF_DEC_REF, and
	  SCF_INC_REF and then removed those macros. You should now use
	  csRef instead.
	- Eric Sunshine fixed bug in csHash<>::Iterator copy constructor where
	  it neglected to initialize its `key' member.
	- Eric Sunshine augmented win32.jam so that it can optionally use
	  dllwrap during plugin creation instead of "gcc -shared" when invoked
	  with "jam -sUSE_DLLWRAP=yes myplugin".  Perhaps this change will
	  allow Jorrit to debug plugin modules in gdb with Mingw.
	- Eric Sunshine fixed the following errors reported by Swig when
	  processing cspace.i (some of which were emitted many, many times):
	    - scf.h: Syntax error in input.
	    - scf.h: Warning(503): Can't wrap class scfInterface<iFoo> unless
	      renamed to a valid identifier.
	    - evdefs.h: Warning(305): Bad constant value (ignored).
	    - string.h: Warning(503): Can't wrap 'operator char const*' unless
	      renamed to a valid identifier.
	- Eric Sunshine made the following changes to cspython.mak:
	    - Added top-level swigpythclean and cspythonmaintainerclean
	      targets, the latter of which is hooked into the top-level
	      maintainerclean target.
	    - Set up some additional variables instead of repeatedly using
	      constants for pathnames in rules section.
	    - Fixed bug: Secondary-level swigpythclean target was not marked
	      `phony'.
	    - Eliminated some special-case code which prevented dependency
	      loops when SWIGBIN was not set.  Cleaner logic obviated the need
	      for this confusing special-case.
	    - Fixed bug: swigpythclean failed to clean generated cspace.py.
	    - cspythonclean now also cleans Swig-generated files.
	- Eric Sunshine made the following changes to csperl5.mak:
	    - Added top-level swigperl5clean target.
	    - Eliminated convolution of swigperl5gen and swigperl5inst targets.
	      New logic is clearer, more obvious, and less bug-ridden.
	    - swigperl5gen and swigperl5inst targets are now available only if
	      SWIGBIN is set.  (Having the targets available with Swig absent
	      was not sensible.)
	    - Fixed bug: Secondary-level swigperl5clean target was not marked
	      `phony'.
	    - Fixed poor design: Would refuse to build csperl5 module if user
	      did not have Swig installed; even though the Swig-generated files
	      are present already in the source tree.  Instead, now simply
	      falls back to the files from the source tree (after all, that is
	      why they are in CVS).
	    - Fixed bug: swigperl5gen (and swigperl5inst) failed when invoked
	      outside of source tree.
	    - Fixed bug: swigperl5inst target was moving generated files from
	      build directory to source directory rather than copying them.
	      This caused subsequent invocations of these targets to think that
	      additional work was required.
	    - Fixed bug: swigperl5gen target failed to ensure that `out' build
	      tree existed before Swig emitted files there.
	    - Fixed bug: swigperl5clean was removing the wrong files.  It was
	      removing the files from the source tree rather than the files
	      emitted by Swig into the `out' build directory.
	    - Fixed bug: csperl5maintainerclean was not removing the Swig files
	      from the source tree (which, after all, is the purpose of a
	      "maintainerclean" target).
	    - csperl5clean now also cleans Swig-generated files.
	- Wouter fixed unused int i in awsmgr, and a printf format error
	  in a dynavis debug statement.
3-Nov-2003
	- Chris Matuszewski added some explicit type casts to stop msvc6 from
	  emitting warning messages in csgfx/rgbpixel.h and shadervar.h.
	- Chris Matuszewski added ComponentIsInTransition() to iAws interface.
	  Cleaned up the implementation of ComponentIsInTransition within
	  awsmgr.cpp to do only what its name implies.  Removed spurious error
	  message that would display after a transition completed.
	- Chris Matuszewski fixed a bug in csObject::GetChild(const char* Name)
	  where it would crash when an object didn't have a name.
	- Chris Matuszewski brought cspace.i and swig generated python wrappers
	  up to date.
	- Eric Sunshine fixed bug which was recently introduced into
	  csObject::GetChild(char const*).  It was incorrectly aborting the
	  search when it found an unnamed child.  Instead, it should simply
	  ignore that child and continue examining the others.  Problem noted
	  by Frank Richter.
	- Eric Sunshine fixed SCF bug: SCF_DESTRUCT_EMBEDDED_IBASE() macro did
	  not accept any arguments, which made it impossible to specify
	  exactly which embedded object was being destroyed.
	- Eric Sunshine documented SCF_DESTRUCT_IBASE() and
	  SCF_DESTRUCT_EMBEDDED_IBASE() in scf.txi, plugin.txi, and
	  apimod98.txi.
	- Jorrit added csBox3::ProjectBoxAndOutline() which combines
	  ProjectBox() and ProjectOutline() is one function.
	- Jorrit fixed the exact visibility culler in Dynavis so that it works
	  again. The exact visibility culler is a debug tool which allows you
	  to calculate the maximum possible FPS possible at some point
	  assuming a culler that does a perfect cull AND needs zero
	  CPU time to does this perfect culling. Basically it uses a very
	  slow system to calculate perfect visibility and then stores that
	  information so that it is used every frame. You can also use this
	  feature to see how culling performs. After enabling this you can
	  walk around and see which objects are visible and which objects
	  are not.
	- Jorrit fixed the exact visibility culler in Dynavis again so that
	  you can now also freeze the Dynavis culling result instead
	  of the exact culling result.
	- Eric Sunshine added SCF_DESTRUCT_IBASE() invocations for each of the
	  corresponding SCF_CONSTRUCT_IBASE() invocations in CS/apps.
	- Marten Svanfeldt fixed a bug with shadervars in material which didn't
	  get loaded as they should.
	- Duhprey did the following:
	  - Implemented scattering in the chunklod and shaders
	  - Added splatting lod and other optimizations
	  - Modified terrain level to use scattering by default
	  - Added larger heightmap file (not default) to terrain level
	  - Added collision detection to walktest
	  - Added a general scattering shader for object that aren't terrain
	    (light_scattering replaces light_bumpmap for outdoor lighting)
2-Nov-2003
	- Eric Sunshine performed project-wide spelling corrections:
	    seperate    --> separate
	    seperated   --> separated
	    seperately  --> separately
	    seperatelly --> separately
	    seperation  --> separation
1-Nov-2003
	- Jorrit fixed a problem in Dynavis where history culling would
	  invalidate the frustum mask that is used for hierarchical frustum
	  culling. This is now fixed by remembering the last frustum mask
	  and using that in combination with the mask we have so far.
	- Chris Matuszewski fixed an incomplete SCF interface in iPath.
	  Added a virtual destructor to csCatmullRomSpline.
31-Oct-2003
	- Eric Sunshine performed additional cleanup of the various "Release
	  Notes" sections of the user manual.  Repaired some Texinfo mark-up
	  problems.  Converted tabs to spaces in apimod*.txi in order to fix
	  formatting problems in generated output for @example blocks.  Minor
	  formatting changes and typographical corrections.  Added a section to
	  apimod96.txi mentioning the introduction of csRef<> and csPtr<> and
	  related API changes (which, amazingly, had not been mentioned in that
	  document even though it was a significant change).
30-Oct-2003
	- Jorrit performed some additional minor optimizations to Dynavis
	  TestObjectVisibility.
	- res fixed a lock-up in the OpenAL plugin: a Delete() was errorneously
	  used instead of DeleteRange() in a loop, causing it to go round and
	  round infinitely.
	- Marten Svanfeldt fixed a few bugs in csShaderVariableContextHelper::
	  FillVariableList(). A more complete rewrite of shadersys is about any
	  day.
29-Oct-2003
	- Eric Sunshine added a test to configure.ac which checks if the C++
	  compiler recognizes the new explicit template specialization syntax
	  `template<> class Foo<Bar>', rather than the older implicit syntax
	  `class Foo<Bar>'.  csdef.h now defines the new macro
	  CS_SPECIALIZE_TEMPLATE as `template<>' if the compiler recognizes the
	  new syntax.
	- Eric Sunshine augmented scf.h to employ CS_SPECIALIZE_TEMPLATE when
	  declaring the scfInterface<> specialization for each SCF interface.
	  This change eliminates many warnings emitted by some compilers
	  (30,000 warnings, according to one report).
	- Eric Sunshine fixed ambiguous overload compilation error in
	  cfgmgr.cpp reported by some versions of gcc.
	- Eric Sunshine added copy constructor and assignment operator to
	  csArray<>::Iterator in order to make it legal to utilize the iterator
	  returned by csArray<>::GetIterator().  This change should eliminate a
	  lot of MSVC compilation warnings when building PlaneShift, the
	  project files of which use a higher warning level than the CS project
	  files.
	- Jorrit cleaned up the main routine in Dynavis that tests object
	  visibility and also optimized it slightly.
28-Oct-2003
	- Jorrit did various optimizations to the tiled coverage buffer
	  in Dynavis. Added several new special cases to Flush() and
	  considerably optimized the bit-logic in it. This gains us a few
	  fps in general. More optimizations to Dynavis will hopefully
	  follow soon...
	- Eric Sunshine upgraded csConfigManager to use csRef<> instead of
	  managing reference counts manually.  Also upgraded and clarified
	  Doxygen comments.
	- Eric Sunshine fixed some minor problems in csbaseeventh.h.
27-Oct-2003
	- res fixed a few warnings occuring with GCC.
	- res fixed cssaver plugin so it compiles with NR.
	- res fixed some error messages in csparser where parameters were
	  mixed up.
        - Old_Belge fixed libs/csws/csstddlg.cpp to use
          CaseInsensitiveCompareSort so the conversion of char to void wouldn't
          bother the compiler.
        - Old_Belge added CaseInsensitiveCompare to stringarray.h; it seemed to
          be missing.
	- Eric Sunshine removed the last couple references to luaswig and
          cslua.
	- Eric Sunshine augmented csGetLibrarySymbol() for Unix so that it
	  looks for both `sym' and `_sym', rather than only `sym'.  This allows
	  it to work correctly on OpenBSD which still uses b.out format for
	  object files.
	- Eric Sunshine once again disabled warning C4291 (no matching operator
	  delete found) for MSVC6 builds since MSVC6 emits nearly a thousand
	  warning messages when this warning is enabled.
	- Eric Sunshine removed the obsolete CS/include/ivaria/cs.i.
        - Old_Belge added support for the newest cvs of CAL3D.
        - Old_Belge added a menu to viewmesh for using the morph animations
          of CAL3D.
        - Old_Belge changed configure.ac and configure to detect if a
          sufficiently recent version of CAL3D is used.
26-Oct-2003
	- Eric Sunshine updated `simple1' tutorial in the user manual to
	  reflect recent changes to keyboard-related event handling.
	- res changed the VFS cache to read files not null terminated.
        - Philip Wyett eliminated warnings by bad casting to float right
          before initialization of an integer.
	- Marten Svanfeldt changed the ways shader variables work in new
          renderer.  The current way works, but is somewhat messy code and
          unclean design.  It should be fixed in the following week(s).
	- Rhad added a call to broadcast signalTextBoxFocused when a textbox
	  gains focus by any means - not just when it's set programatically.
25-Oct-2003
	- Rhad moved emitter list initialization into the
	  RecreateParticleSystem() member function of partedit.  This fixes the
	  crash when switching graphics since the last commit (oops!).
	- Rhad fixed partedit to shut down cleanly when the window is closed.
	- Rhad added functionality to partedit to dump xml readable (mostly) by
	  emitloader.  This output is dumped to the console at the moment.
	  Placeholder windows have been added to the Aging Moments and
	  Load/Save screens indicating they are not yet complete.
	    - At this point I am going to work on revising the UI layout so
	      that it hopefully ends up less complicated (in code at least) and
	      more functional (from a user perspective).
	    - The emitloader plugin does not appear to be able to handle mix
	      emitters with more than one child emitter.  The whole point of
	      mix emitters is to use multiple child emitters, so this makes mix
	      emitters unusable with the loader.
	- Jorrit added the ability to Dynavis to change the tile size at
	  compile time.  Four sizes are possible: 64x32 (old default), 32x64,
	  32x32, and 64x64.  32x64 appears to work a tiny bit faster then the
	  others so it is now set as default.
	- res fixed compilation of ddraw2d and glwin32 on older SDKs after
	  removing a #define.
	- Luca replaced some "for(int i=" with "int i; for(i =..." in genmesh
	  plugin.
	- Rhad added a check to awsManager::HandleEvent so that focus events
	  related to windows which are deleted after the event is generated but
	  prior to it being handled no longer cause a crash with a NULL pointer
	  dereference.  Also formatted awsManager::HandleEvent for readability.
	- Rhad fixed reference counting in awsWindow for the title member.  The
	  pointer was copied from the preference manager without an incref.  If
	  the title was changed, the shared copy was decref'd and destroyed.
	  If the title was changed from the default then all other current
	  instances of the window and all future instances will crash when
	  drawn.
	- Rhad made AWS scrollbars behave a little nicer with tiny ranges by
	  removing the aritifical +1 to the max value.  This doesn't appear to
	  be needed anymore.  All the listboxes and scrolling things I could
	  find to test work fine without it.
24-Oct-2003
	- res re-enabled a couple of MSVC warnings and fixed some occurences of
	  VC warnings in the source.
	- Jorrit changed walktest perftest so that it prints to standard output
	  and it will also call FinishFrame() now for a more realistic result.
	  Also fixed a bug with perftest if a number of iterations != 100 was
	  used.
	- Jorrit fixed stats in Dynavis so that it now reports the number of
	  visible objects and nodes instead of the time it takes to calculate
	  Dynavis.  This is more useful.
	- Jorrit added csBox3::ProjectOutline() which works similarly to
	  ProjectBox() except that it projects the outline to a 2D polygon.
	- Jorrit fixed csBox3::ProjectBox() so that the calculated min_z/max_z
	  actually accounts for all 8 vertices and not only the vertices of the
	  outline.
	- Jorrit changed the kdtree so that it sets the bounding boxes of the
	  nodes maximum to -100000/100000.  This avoids bugs in Dynavis which
	  cannot easily handle these big bounding boxes.  Unfortunately that
	  restricts worlds that use Dynavis to be within that range.  We'll
	  have to see about better solutions in the future.
	- Jorrit changed the write queue operation in Dynavis to test every
	  rectangle again after fetching an item from the write queue instead
	  of only testing after fetching all items.  This seems to improve
	  performance slightly.
	- Jorrit added code to test for polygons instead of just rectangles.
	  This allows a test that better matches the shape of the node box.
	  Using that does not help improve performance though.  Perhaps we need
	  to do this test only if the node is complex enough (i.e.  has
	  sufficient objects in it).
	- Jorrit optimized Dynavis TestRectangle() a bit by splitting it in two
	  routines which allows for early exit in case of write queue and also
	  allows for faster second-time calls of TestRectangle().
	- Jorrit added early exit code in Dynavis TestFullRect() to avoid
	  comparing all 32 depths.
	- Jorrit fixed a bug in Dynavis TestRect() which was initializing one
	  row wrongly.  The chance of this bug manifesting in real culling
	  errors is very small though.
	- res fixed csGetKeyDesc() to properly deal with keys that are
	  modifiers.
	- Eric Sunshine applied a patch from Fritz Elfert <felfert@to.com>
	  which makes the following changes:
	    - Fixed bug: csStringArray failed to override InsertSorted(), which
	      caused inserted strings to be compared by pointer rather than
	      content, thus the array was not sorted in a meaningful way at
	      all.  As a side effect, this fixes a bug in VFS where its
	      `deleted files' array had essentially random order, causing
	      csArchive:IsDeleted() to fail, which in turn caused zip
	      corruption. (Bug# 827467)
	    - Fixed bug in his recent VFS patch: "Fake" directory entries in
	      `dir' array were being written to "central directory" in zip file
	      even though the fake entries were not themselves represented in
	      the data portion of the archive.  This caused the central
	      directory to get out of sync with the stored entries, thus
	      resulting in corruption. (Bug# 827467)
	    - csArchive::NewFile() now checks if the desired file is already in
	      the `lazy' array. If so, it reuses this entry instead of creating
	      a new one.  This change removes the limitation that adding the
	      same file more than once without a Flush() could lead to
	      unpredicted results. It now resembles behavior of a real
	      filesystem more closely: Creating/Writing a file more than once
	      simply overwrites the previous version in cache.
	- Rhad fixed a typo that caused a lot of havok with components that
	  implemented signals.  If AWS was crashing today, update.  The
	  SetOwner() member of awsSource was incorrectly ignoring the passed
	  parameter, and setting the owner class member to itself.
23-Oct-2003
	- Jorrit reduced the 'yellow-message-time' in the standard reporter
	  from 10 to 5 seconds.
	- Jorrit fixed a bug in dynavis where it would sometimes incorrectly
	  update the depth buffer. The chance of this bug manifesting itself
	  was not very big though.
	- Jorrit optimized the coverage buffer in Dynavis a bit by adding
	  handling for a special case in a tile. If a tile is empty then a
	  more optimal routine is selected for flushing the operations.
	- Jorrit cleaned up the coverage buffer Flush() routine by splitting
	  it up in all different cases.
	- Matze fixed win32.jam so that the resource and supporting file names
	  incorporate the target's name.  This allows "variants" to work
	  correctly on Windows.
	- Jorrit reenabled the dynavis_debug target in the Dynavis jamfile
	  after Matze applied some fixes to the metadata embedding code
	  on windows.
	- Jorrit added VPT (visible point tracking) to Dynavis. Enabled
	  by default but you can disable it with the toggle_vpt bugplug
	  command (assigned to bugplug key '5'). Doesn't seem to give
	  a big performance increase though.
	- Jorrit fixed another bad bug in Dynavis. It was mistakenly assuming
	  that all objects are suitable for outline filling even if the
	  object was not closed.
	- Jorrit performed some minor optimizations in Dynavis.
	- Eric Sunshine made some corrections to the keystroke classification
	  (cooked versus raw) which is performed by OSXDelegate.  Most
	  importantly, it now correctly cooks Return and Enter to CSKEY_ENTER;
	  whereas previously it was incorrectly setting the raw code.  Updated
	  full-screen toggle in OSXDriver2D to reflect the corrected raw/cooked
	  classification performed by OSXDelegate.
	- Jorrit fixed a bug in the frozen OBB creation (csOBBFrozen class).
	  It could crash if z happened to be 0. In addition to fixing that bug
	  it will now also create a conservative projection of the OBB
	  if one or more of the points are behind the view plane (z < 0).
	  In the past it would simply create a huge screensize box.
	- Jorrit moved the VPT test in Dynavis so that it now works on 3D
	  coordinates instead of 2D.
	- Jorrit attempted to change VPT tracking so it would find a real
	  visible point. This doensn't work very well yet so it is still
	  disabled. Currently the center of the object is still used.
	- Jorrit did some additional small optimizations to Dynavis. Including
	  increasing the time a visible object remains visible.
	- Jorrit fixed csBox3::ProjectBox() in a similar way as csOBBFrozen
	  so that points behind the view plane (z < 0) are clipped in a
	  conservative manner.
	- Eric Sunshine fixed a bug in assembler.jam where the pathnames used
	  with the -I directives lacked a trailing slash.  The slash is
	  required by NASM.  (Bug #827028)
	- Jorrit added the ability to csBox3 and csBox2 to use CS_BOX_CENTER3
	  and CS_BOX_CENTER2 for GetCorner(). This will return the center.
	  Yes I know. The center of a box is not a corner. Just leave me alone
	  will you? :-)
	- Jorrit notes that the previous trick now also works for csOBB.
	- Jorrit added a default constructor to csOBBFrozen which does
	  nothing.
	- Jorrit changed VPT tracking so that it tries the 8 corners of the
	  object box to see which point is visible. This seems to work a
	  lot better now.
22-Oct-2003
	- Jorrit fixed a bug in csMovableSectorList which did all the needed
	  SCF stuff EXCEPT inherit from iBase. This is an old bug but for
	  some reason this only causes crashes on linux with a static build
	  and new renderer enabled and while using profile mode???
	- Jorrit modified csMovableSectorList so it no longer uses
	  embedding to implement iSectorList.
	- Jorrit reverted the Jamfile modification for dynavis to add a new
	  dynavis_debug target. It conflicts somehow with the standard
	  dynavis target.
	- Jorrit did a slight optimization in the stencil renderloop plugin.
	  Using memcpy instead of manual copy.
	- Eric Sunshine added a new templated scfInterface<> class to scf.h.
	  This class can be used to perform queries for static information
	  relating to SCF interfaces.  The following information is supplied
	  by this class:
	    - GetVersion(): Retrieves an interface's current version number.
	      This is the same as the value of the global constant
	      name_VERSION, where `name' is the interface's name (such as
	      iVFS_VERSION).
	    - GetID(): Retrieves an interface's unique identifier as an
	      scfInterfaceID.  This is the same as the value returned by the
	      global function name_scfGetID(), where `name' is the interface's
	      name (such as iVFS_scfGetID()).
	  As an example of use, to retrieve the version number of the iFooBar
	  interface, the following code can be used:
	      int ver = scfInterface<iFooBar>::GetVersion();
	  An important benefit of scfInterface<> is that it allows template
	  authors to retrieve static information about an interface even though
	  the template might know an interface only by the opaque tag `T'.  For
	  instance scfInterface<T>::GetVersion() will work as expected from
	  within a template class.
	- Eric Sunshine eliminated bogus metaball reference from features.txi.
	- res made the following changes:
	    - Genmesh can now properly receive shadows, i.e. if the half of
	      an object is blocked from a light source, that half won't get
	      lit.
	    - Fixed a bug in csGetKeyDesc() causing bogus key strings to be
	      returned for character keys.
	- Rhad added float support to aws for scrollbars.  This involved some
	  additions to the various aws interfaces.  It also involved expanding
	  the parser a bit to handle numeric values with a decimal point.  I
	  think everything worked out OK, but I'm not really proficient with
	  flex or yacc, so if something doesn't appear to work, please let me
	  know (or fix it!).
	- Rhad fixed a bounds issue in partedit.
	- Rhad added a minimum scrollbar knob width to aws scrollbars of 5
	  pixels.  Without this, when the range of the scrollbar was big
	  enough, the knob would disappear.
	- Eric Sunshine disabled the MSVC warning C4099 ("type first seen as
	  'struct' now seen as 'class'") in order to avoid complaint from
	  SCF_VERSION() in those very rare cases when SCF_VERSION() is applied
	  to a class rather than a pure SCF interface (struct).  The C++
	  language specification states that classes and structures are 100%
	  identical (except for default access mode), therefore, it makes more
	  sense to simply disable this warning than to try to arrive at some
	  ugly work-around in the code for avoiding it.
	- Rhad added Field Speed and Field Acceleration interface windows
	  to partedit.
	- Rhad changed partedit so the particle system is only recreated when
	  it must be due to parameter changes that cannot be incorporated into
	  the running system.  This allows for smooth adjustment of most values
	  on a running system.
21-Oct-2003
	- Rhad added UI for Initial Speed and Initial Acceleration to partedit.
	- Eric Sunshine made the following configuration-related changes:
	    - Added CS_CHECK_BUILD_FLAGS() to checkbuild.m4.  This is similar
	      to CS_CHECK_BUILD(), except that it checks only if the build
	      tools recognize particular options, rather than checking if a
	      test program can be built.
	    - Rewrote CS_EMIT_BUILD_FLAGS() in configure.ac to utilize the new
	      CS_CHECK_BUILD_FLAGS().  Also dropped the somewhat hacky
	      CACHE-VALUE argument from CS_EMIT_BUILD_FLAGS().  This type of
	      functionality can now be accomplished more cleanly by calling
	      CS_CHECK_BUILD_FLAGS() directly.  Callers which were using the
	      CACHE-VALUE hack have been rewritten to use
	      CS_CHECK_BUILD_FLAGS() instead.
	    - Added a check for -force_cpusubtype_ALL to configure.ac.  This
	      flag is needed on MacOS/X when building the PowerPC version of
	      qsqrt() which uses the `frsqrte' instruction.
	    - Fixed the qsqrt() check in configure.ac so that it employs
	      -force_cpusubtype_ALL when applicable.  This allows the qsqrt()
	      check to succeed on MacOS/X.
	    - Added a check for -fno-common to configure.ac for MacOS/X.
	    - Fixed bug: Jam build on MacOS/X failed to utilize
	      -force_cpusubtype_ALL and -fno-common.
	- Eric Sunshine fixed bug in qsqrt() check in configure.ac where it
	  would always fail if configuring outside the source directory because
	  it failed to locate CS/include/qsqrt.h.
	- Jorrit added data/shader/std_rloop_ambient.xml.
	- Jorrit modified engine.cfg so that the ambient renderloop is now
	  default.
	- Jorrit fixed changing of an alternative renderloop in the engine.
	- Jorrit fixed various places in CS where the result of a
	  GetContentsValue() (for XML parsing) was stored but not copied.  This
	  is not valid since the string is not guaranteed to exist for a long
	  time.  The places I fixed are:
	    - Parsing of 'priority' in main loader.
	    - Parsing of 'cullerp' in main loader.
	    - Parsing of 'type' for textures.
	    - Parsing of cubemaps.
	    - Parsing of renderloops.
	- Jorrit fixed the cloth plugin so it no longer includes the removed
	  tesselator class. It wasn't using the class anyway.
	- Jorrit changed a few calls to Warn() in the engine with calls to
	  Error(). It is an error if a renderloop cannot load.
	- Eric Sunshine fixed bugs in macosx.mak where it was prefixing one
	  extra $(SRCDIR)/ to each of the paths mentioned by $(SRC.SYS_CSSYS)
	  and $(INC.SYS_CSSYS).
	- Eric Sunshine fixed bug in CS_CHECK_BUILD_FLAGS() in checkbuild.m4
	  where it gave different results between cached and uncached
	  configuration runs.
	- Eric Sunshine fixed bug in glrender.mak. `gl3dclean' was not declared
	  "phony" in `roottargets'.
	- Eric Sunshine made the following changes to cocoa2d.mak:
	    - Removed MACOSX.SOURCE_COCOA2D_PATHS and
	      MACOSX.HEADER_COCOA2D_PATHS variables.  These were a necessary
	      complication from back when the plugin had to build for MacOS/X,
	      Rhapsody, OpenStep, and NextStep; but are no longer needed since
	      the older ports were dropped.  Also, MACOSX.HEADER_COCOA2D_PATHS
	      was not dealing correctly with $(SRCDIR); it was simply being
	      ignored.
	    - Added support for .mm Objective-C++ file extension.
	    - Converted over to new build style where generated resources are
	      placed in a cocoa2d-specific build directory, rather than
	      directly in $(OUT).
	- Eric Sunshine fixed bugs in cgdriver2d.mak and glosx2d.mak where they
	  were prefixing one extra $(SRCDIR)/ to several of the computed path
	  containers.
	- Eric Sunshine worked around compilation error on MacOS/X 10.1 in
	  ogl_polybuf.cpp where it failed to resolve ?: conditional operator
	  when given a csRef and a zero.  Changed it to instead use a simple
	  `if' expression.
	- Eric Sunshine eliminated compilation warning in cspthrd.cpp; failed
	  to return a value from bool function.
	- Eric Sunshine fixed MacOS/X defaultsconfig.{mm|h} so that it can be
	  built on pre-10.2 machines where -[NSUserDefaults
	  objectIsForcedForKey:inDomain:] is not present.
	- Eric Sunshine eliminated signed versus unsigned compilation warning
	  in cskeyacc.cpp.
	- Eric Sunshine eliminated compilation warning in thing/polytext.cpp
	  about unused variable in non-debug mode.
	- Eric Sunshine fixed compilation error in csparser/prstex.cpp where a
	  `goto' jumped over the initialization of a variable used by the block
	  of code which was the target of the goto.
	- Eric Sunshine eliminated signed versus unsigned compilation warning
	  from aws/awsmled.cpp.
	- Eric Sunshine made the following changes to the build system with
	  regards to AWS:
	    - Fixed bug in aws/Jamfile where it failed to correctly apply
	      -Wno-unused when compiling skinlex.cpp.
	    - Updated aws/Jamfile to also apply -Wno-unused to skinpars.cpp.
	    - Worked around bizarre preprocessor error on older MacOS/X
	      installations where it fails to search CS/plugins/aws for headers
	      #included by aws/skinpars.cpp (at least when building outside the
	      source tree).  Work-around in aws.mak and Jamfile involves
	      explicitly adding -I$(SRCDIR)/plugins/aws to CFLAGS for
	      skinpars.cpp.
	    - Updated aws.mak to apply -Wno-unused when building skinlex.cpp
	      and skinpars.cpp in order to avoid compilation warnings over
	      which we have no control in these auto-generated files.
	    - Converted aws.mak to new build style where generated resources
	      are placed in a aws-specific build directory, rather than
	      directly in $(OUT).
	- Rhad fixed a bug in the particle emitter plugin.  Attractors were
	  adjusting acceleration instead of speed of particles.  This alters
	  the effects of any particle system using the emitter plugin with
	  an attractor noticably.
	- Rhad fixed some bugs in partedit including position values carrying
	  over into speed/accel/attractor.  Initial speed/accel weren't being
	  properly updated in UI.
	- Rhad fixed a bug in partedit where conical emitters where initialized
	  incorrectly.
	- Rhad fixed a bug in partedit that caused regular particles to be
	  unavailsble after some changes last night, and another bug that
	  caused negative forces on attractors (repulsors) to fail to function.
	- Philip Wyett fixed typo in aws makefile, fixing make depend.
	- Rhad made some changes to partedit so it doesn't need to recreate the
	  mesh associated with the particle system for every change.
	- Rhad re-activated the code to set the Value (position) of an AWS
	  scrollbar with a SetProperty call.  Documentation be damned, this
	  property will be writable!
	- Rhad commented awsScrollBar::KnobTick and fixed this and other
	  functions to correctly handle a minimum scroll value other than 0.
	  Note that "proportional scrollbar" functionality is probably still
	  broken since I don't know how that's supposed to work.
	- Rhad changed the SetProperty() calls to awsScrollBar to expect floats
	  instead of ints.  PLEASE NOTE THAT THIS MAY BREAK EXISTING FUNCTIONAL
	  PROGRAMS WITHOUT COMPILER WARNINGS. (Thanks to void * cast calling
	  convention) However, I have doubts that anyone is using this since the
	  internal values in the scrollbar have been floats for some time and
	  the GetProperty() call has always presumed it was filling in a
	  float * .
	- Rhad added some "experimental" UI to partedit.  Rather than adding a
	  scrollbar for each element, there is currently one scroll bar in a
	  separate window.  Any text box containing a float or int value that
	  gains focus will be controlled by the global scroll bar (and extra
	  text box) until another float or int textbox component gains is
	  selected.  This allows you to adjust a single value with minimal
	  interface clogging up the screen.  The ranges still need work
	  and the handling of value changing for emitters needs to be smoothed
	  out so the system doesnt reset with every change if possible.
20-Oct-2003
        - Philip Wyett added 'joytest' to CS/ root .cvsignore file.
	- Jorrit added thing.cfg.
	- Eric Sunshine augmented "thing" makefile and Jamfile to ensure that
	  the new thing.cfg gets installed.
	- Eric Sunshine fixed numerous Texinfo errors and other mark-up
	  problems recently introduced into the user manual.  Also rewrote some
	  of the discussion in apimod98.txi.
	- Jorrit removed csTesselator class since it is the marching cubes
	  algorithm and that is patented :-(
	- Jorrit also removed metaball and metagen since both use
	  csTesselator. They can be revived if someone can provide an
	  alternative algorithm to do tesselation.
	- Eric Sunshine eliminated signed versus unsigned compilation warning
	  from impnames.cpp.
	- Eric Sunshine applied a patch to csArchive and csVFS from Fritz
	  Elfert <felfert@to.com> which fixes methods, such as FileExists(), so
	  that they work correctly for directory names even if an explicit
	  directory entry does not exist in the zip file.  This means that if a
	  zip files contains the single entry "foo/bar/cow.txt", FileExists()
	  will now correctly return true for "foo" and "foo/bar".  Previously,
	  it would return false.  Eric also applied a bit of cleanup to the
	  patch to reduce coupling and increase safety.
	- res fixed problems in the handling of the Pad+, Pad-, Pad* and
	  PadDecimal keys on Win32, as pointed out by Fritz Elfert
	  <felfert@to.com>.
        - Philip Wyett corrected DIR.WATERDEMO path in apps makefile and
          eliminated make depend failure when --enable-new-renderer is used.
	- Jorrit marked the old metaball and metagen plugins with the
	  PRE_REMOVE_METABALL tag so that they can be revived more easily.
	- Eric Sunshine added a makefile for `partedit'.
	- Eric Sunshine fixed the `make help' formatting for a number of
	  targets.
	- Eric Sunshine worked around MSVC6 crasher reported by Fritz Elfert
	  <felfert@to.com> in sequence.cpp where compiler couldn't deal with
	  `if ((*seq) != 0)' where `seq' is a `csWeakRef<csSequence>*'.
	- jamest changed the swig wrapper to support the new polygon creation
	  and manipulation API (AddInsideBox).  The python samples have been
	  updated to reflect the new API.  added iShaderBranch to the wrapper
	  to eliminate a warning/ignore during swigpythgen.
	- jamest removed css.h references to the recently removed metaball,
	  metagen, and csTesselator.
	- Rhad did some more work on partedit.  Initial position UI and
	  attractor UI are now complete.  Some pretty nice effects can be seen
	  with just these two sections.
19-Oct-2003
	- res fixed a bug in the OR polygon buffers: when two polygons
	  subsequently passed into AddPolygon() would have different lightmaps,
	  they would later not be drawn together, even if they could. But as
	  distinct polys always have distinct lightmaps, this basically caused
	  the polybuffers to be ineffective. Now, not the polygon's lightmap,
	  but the super lightmap it is on is considered, and polys on the
	  same SLM will be drawn together.
	- res updated the OS/X CG2D for the latest keyboard event changes.
	- Rhad fixed a typo in the aws group frame documentation.
	- jamest updated cspace.i for latest keyboard event changes.
          updated the the python module samples to reflect latest
          keyboard event changes.
	- res added an updated version of csParseKeyDef().
	- res changed the logic when a key state is set; now it is set after
	  the event is emitted for Down resp. before the event for Up events.
	- Rhad changed signals for button presses on radio buttons
	  (signalRadButtonClicked) and checkboxes (signalCheckBoxClicked)
	  in AWS to occur AFTER the state change associated with them.
	  This makes these signals actually useful in a consistant manner.
	- Rhad commited a partial rework of the partedit tool.  Still a lot
	  of UI work and cleanup to do.
18-Oct-2003
	- DeSigna made the following changes:
	    - Considerable cleanups to the csShaderExpression optimizer pass.
	    - Added support for zero-arg and fixed arg operations to optimizer.
	    - Added support for zero-arg ops to the compiler.  Fixed arg ops
	      require special handling in the compiler, not done yet.
	    - Added various sanity checks in the optimizer.
	    - Fixed a severe optimizer bug, where it didn't check if the
	      reverse CDR was a cons cell, and tried to feed it through
	      argument reduction as an atom.
	- Jorrit fixed the python plugin to compile again. Unfortunatelly this
	  was done by simply removing support for getting key event
	  information. We need to fix cspace.i so we can get this
	  functionality again but I'm not sure how to do that.
	- Jorrit also fixed the perl5 plugin to compile again by removing
	  CSMASK_KeyUp and CSMASK_KeyDown and replacing with CSMASK_Keyboard.
	- Jorrit fixed the shader manager. The following construct is illegal:
		static bla;
	  Please use:
		static int bla;
	- res fixed a cut'n'paste error in the xwindow plugin.
	- DeSigna made the following changes:
	  - Added support for MAKE-VECTOR to csShaderExpression.
	  - Fixed a bug in the compiler, which wouldn't generate opcodes
	    for single argument ops if the arg wasn't an atom.
	  - Fixed a bug in the single-arg op dispatcher, to resolve accum
	    references.
	- res updated apimod98.txi with paragraphs on the new i18n stuff and
	  the keyboard event changes.
	- Rhad fixed a documentation error regarding awsListBox. The
	  "selectable" property applies to the entire row and not each column.
	- res enhanced csSubRectangles2 with the ability to enlarge the
	  region.
	- res augmented the Thing lightmap layouter with the ability to enlarge
	  an existing super lightmap. This is done if the lightmaps to be
	  distributed would fit onto the enlarged super lightmap and less than
	  a specified area of the SLM would be unused.
	- Rhad added code to call existing signalListBoxScrolled.  Added
	  signalListBoxStateChanged called when the state of a stateful
	  column is changed.  Added documentation for both signals as well
	  as the existing implemented signalListBoxFocused.
	- DeSigna implemented dot, cross, norm and vec-len ops for
	  csShaderExpression.
17-Oct-2003
	- res added some files he forgot with his recent commit.
	- Jorrit fixed the engine sequence manager a better way. With
	  yesterday's fix it was essentially possible for the sequence
	  manager to grow in memory forever since sequences that were once
	  the target of an operation would be registered and never released
	  (except at shutdown of the sequence manager).
	  The current fix works by making the operations use real references
	  instead of weak references again (as they should). But the sequence
	  manager now manages an array of weak references to all sequences.
	  Whenever a sequence is deleted then that weak ref will become 0
	  automatically and the sequence manager will later remove that entry
	  from the array. If after Clear() the weak ref is
	  still there then this means we have a circular reference. In that
	  case the sequence manager will call CleanupSequences() on all the
	  sequences to force breaking the circular references.
	  Note that this fix doesn't help clean up sequences that circularly
	  reference each other but are no longer used (i.e. they have no
	  scheduled operations). For those there is no other solution but
	  to clear the sequence manager manually.
	- Jorrit fixed fog in OpenGL (for DrawPolygonMesh). It would fail for
	  triangles that required clipping.
	- Jorrit replaced a DeleteAll() in portalcontainer with Empty().
	  DeleteAll() completely reinitializes the array but we want to keep
	  the internal array size the same to avoid reallocating all the time.
	- Jorrit fixed the bug with software renderer fog.
	- Jorrit changed iSequenceManager->NewSequence() so it returns a
	  csPtr<iSequence>.
	- Eric Sunshine removed a C++ construct and a type which is only
	  defined by the CS C++ headers from iutil/evdefs.h since this file
	  must not contain any C++ on account of the fact that it gets
	  included in Objective-C code.
	- Eric Sunshine upgraded the MacOS/X port to work with the updated key
	  event functionality.
	- res made a small cleanup in win32kbd.cpp.
	- res made the following changes:
	    - Moved csKeyEventHelper to from iutil/event.h to csutil/event.h.
	    - Made csKeyEventData a 'dumb' struct (no construction logic.)
	    - Some small documentation updates.
	    - Disabled the workaround for glTexSubImage problems with some
	      ATI drivers. Seems to work now.
	- Eric Sunshine fixed compilation error on MacOS/X in
	  csShaderExpression.  MacOS/X does not have strtof().
	- res fixed waterdemo for the recent keyboard handling changes.
	- Anders Stenberg made the buffer and texture activation in NR more
	  efficient. Also made sure render mesh lists are sorted on material
	  to minimize state switches.
	- DeSigna made the following changes:
	    - Fixed compilation error for VC6, the debug macro's use of
	      variable arguments isn't valid
	    - Macro now uses csPrintf (not a big issue, since it'll all be
	      removed once the shaderexps are complete).
	    - Fixed initializer problem in csShaderExpression::Parse(), MSVC6
	      doesn't accept the constant initializer for an oper_arg struct.
	    - Added some extra comments to csShaderExpression::eval_const() and
	      csShaderExpression::compile_cons().
16-Oct-2003
	- Jorrit fixed a big memory leak related to the engine sequence
	  manager. There are actually three fixes to solve this bug:
	    - Two callbacks for cleanup to sector and light used a csRef
	      to a sector and light respectively. However, this causes a
	      circular reference since those callbacks are added to the
	      sector and light. Fixed this by using weak references.
	    - Various objects in the engine sequence manager keep references
	      to engine stuff. However the engine also kept a reference to
	      the engine sequence manager. Changed the latter to use a weak
	      reference.
	    - Added iSequenceManager->RegisterRef(). This is a general routine
	      with which you can register a specific reference. The purpose of
	      this is to register references to sequences so that you can
	      use weak references in the operations itself. That way circular
	      references between operations and sequences are avoided and
	      the sequences are cleaned up properly on destruction of the
	      sequence manager and/or a manual call to Clear().
	- res added the Joystick plugin for Windows (utilizing DirectInput)
	  and the joytest app contributed by Turbo J <turboj@web.de>.
	- res augmented the DirectX configure check to include DirectInput.
	- Jorrit removed 'motion', 'csbmpimg', and 'fontplex' targets from
	  'jam walkall'. These are not required by walktest. Added 'spiral'
	  and 'spirldr' to the meshes target.
	- Jorrit made 'ieplex' optional in walktest and then removed the
	  target from 'jam walkall'.
	- Jorrit removed 'crossbld' from the 'meshes' target.
	- Jorrit fixed a bad and old clipping bug in the old OpenGL renderer.
	  This bug manifested itself if plane clipping (P) was selected as
	  the default clipping method AND if a clipped portal had five
	  vertices AND the previous portal had four vertices AND an object
	  was rendered that required plane clipping. In that specific case
	  the fifth plane was not calculated. This bug sounds rather
	  esoteric but it manifested very easily with the recent removal
	  of single polygon drawing.
	- Eric Sunshine removed 8-bit characters from numerous source and
	  header files throughout the project.
	- Eric Sunshine re-generated the configure script on Unix since the
	  previous generation was done with Windows (presumably Autoconf 2.56)
	  which borks the help message.
	- Jorrit fixed the copy constructor and the constructor with T*
	  from csWeakRef. Apparently they were completely broken.
	- Wouter fixed awstxtbox, changing a iString* to csRef<iString>,
	  which stops awstut from crashing when typing a password.
	  Still, it's fishy that iString::Clone and Slice return a csRef<>.
	- res made the following changes:
	    - Tagged everything with OLD_KEYBOARD_EVENTS.
	    - Overhauled keyboard events. The event data is now stored via
	      iEvent's property bag mechanism (a helper class can simplify
	      the access.) The idea of 'scan codes' and 'char codes' has been
	      replaced with 'raw codes' and 'cooked codes.' Also, there's only
	      one keyboard event now, and the information whether the key was
	      pressed or released is now part of the event data. A couple of
	      features have been added as well, for example, CS can now
	      distinguish between left/right modifiers or keypad and
	      non-keypad keys.
	- res fixed a few files to compile again after his latest changes.
	- res reverted an accidential change to md32spr.
	- DeSigna wrote the csShaderExpression class in csgfx for Dentoid's
	  csShaderVariables. It is not yet integrated into the XML parser's
	  syntxldr service or shader variables, and it is missing S-expression
	  support.
15-Oct-2003
	- Eric Sunshine fixed a bug in RemoveDups from helper.jam.  It was
	  trying to dereference a variable using an 8-bit character instead of
	  dollar sign ($).  The result was that the function was a complete
	  no-op; it did not remove duplicates at all.  As a consequence, when
	  building targets in static mode, many libraries were mentioned
	  hundreds of times in the link statement, with the result that the
	  command length was too long, causing Jam to abort.  Also reverted
	  Matze's attempted fix for this problem yesterday where he added a
	  hack to shorten the pathnames mentioned by the the link statement.
	  This hack did not fix the problem, and is not necessary now that the
	  real problem has been corrected.
	- Jorrit fixed a bug in thing which would sometimes reset the
	  cached movable to 0 at the wrong place.
	- Jorrit fixed a bug in thing and allocation of three-vertex
	  polygons. This bug would cause too many memory allocations and
	  memory leaks at exit.
	- Jorrit reverted the helper.jam fix from Eric by putting an invalid
	  character back instead of $(i). This will break static linking but
	  at least normal linking works. With $(i) many modules won't link
	  correctly.
	- Jorrit fixed a bad bug in the OpenGL renderer. DrawPolygonMesh()
	  didn't call FlushDrawPolygon() which could cause particle systems
	  not to be rendered.
	- res made the following changes:
	    - Made some updates to the map2cs tutorial.
	    - cssys/win32/wintools.h doesn't include <windows.h> any more.
	- res updated the Jam 'walkall' target to include rendstep_stencil as
	  well.
	- res made a small fix to the font plugins: GetLength() now doesn't
	  return the number of encoded characters, but instead the number of
	  encoding character (ex: A-umlaut is stored as two 8-bit values in
	  UTF-8. That's one encoded character, but two encoding characters.)
	- res made a cosmetic change in thingldr.cpp.
	- Jorrit fixed a bug in the rain particle system. It was using
	  vertex buffers but didn't register itself as a vertex buffer
	  client. This causes problems at destruction (and thus simpmap
	  crashes at exit).
	- Jorrit fixed visibility culling errors in mottest which were caused
	  by scaling objects through the movable (not allowed!). Fixed this
	  by using HardTransform instead.
	- Eric Sunshine reverted Jorrit's reversion of helper.jam.  Eric's
	  fix to RemoveDups was correct, but fixing RemoveDups allowed a bug in
	  LinkWith (flags.jam) to manifest.  Consequently, applied a patch from
	  Matze which fixes LinkWith.
14-Oct-2003
	- Eric Sunshine fixed typographical error in constant expression in
	  cssys/general/platformconfig.cpp: S_IWGRPS_IXGRP --> S_IWGRP|S_IXGRP.
	  Also made more robust in case any of the read-write-execute named
	  constants are missing at compile time.
	- Eric Sunshine fixed problem in cssys/general/platformconfig.cpp where
	  it was trying to pass a csString into fprintf() rather than passing
	  in the (char const*) equivalent.
	- Jorrit fixed a memory leak in thing polygons. They were not
	  releasing the vertex indices from the block allocators. This caused
	  simple1 to crash at exit due to an assert in csBlockAllocator.
	- Jorrit forgot to remove some instances of FASTMESH.
	- Jorrit removed an unused field from csPolygon3DStatic.
	- res fixed a few 'signed/unsigned mismatch' compiler warnings in
	  cssys/csuctransform.h.
	- res re-enabled 'signed/unsigned mismatch' compiler warnings for MSVC.
	- Eric Sunshine made the following changes to the user manual:
	    - Updated MacOS/X usage instructions to reflect that settings are
	      now stored via NSUserDefaults, rather than user.cfg.
	    - Generally upgraded MacOS/X build instructions.
	    - Eliminated some obsolete engine and lighting options from
	      documentation and configuration files.
	- Jorrit removed csPolyLightMapMapping and merged it with
	  csPolyTextureMapping. This saves some memory again.
	- Jorrit eliminated mean lightmap color. This saves another 20 bytes
	  per polygon.
	- Jorrit eliminated the iEngine->GetLightmapsRequirePO2() function.
	  None of the renderers require PO2 lightmaps so this functionality
	  can be removed entirely. Also removed the equivalent config option
	  from opengl.cfg.
	- Jorrit eliminated the po2 scaling option from lightmaps. This
	  saves another 8 bytes per polygon.
	- Jorrit eliminated the lmsize field in lightmaps, saving another
	  4 bytes per polygon.
	- Jorrit eliminated another 12 bytes per polygon and then another
	  12 bytes for every polygon and pseudo-dynamic light that affects
	  the polygon.
	- Jorrit fixed a new bug in the thing loader which incorrectly tests
	  for duplicate vertices.
	- Eric Sunshine rewrote almost completely the configuration section of
	  the user manual.  Expanded discussion of configuration domains and
	  how priority-based system works.  Added missing material.  Clarified
	  existing material.  Added section detailing MacOS/X-specific storgage
	  of user-specific settings via NSUserDefaults.
	- Eric Sunshine fixed some transpositional borkness in xmlfmt.txi, as
	  well as some other minor formatting issues.
13-Oct-2003
	- Eric Sunshine eliminated several compilation warnings from Walktest.
	- Jorrit fixed phystut for the latest polygon changes.
	- Jorrit fixed relighting of lightmaps for thing. It was broken since
	  my latest changes.
	- Eric Sunshine eliminated compilation warning in glshader_fvp.cpp.
	- Eric Sunshine fixed bug in csString::FindLast() prototype where the
	  incoming pos argument defaulted to 0 but should have defaulted to -1.
	- Jorrit added iThingFactoryState->SetPolygonVertexIndices() to set
	  all indices of a polygon at once.
	- Jorrit did an optimization to thing so that vertex indices are now
	  stored in a more optimal way. Used csBlockAllocator for this. This
	  also affects csPolygonRenderData which is used by new renderer.
	- Eric Sunshine eliminated numerous memory leaks in
	  libs/cssys/defaultsconfig.mm, the MacOS/X-specific iConfigFile
	  implementation which utilizes Cocoa's NSUserDefaults for storing
	  user-specific settings.  Also upgraded to CS formatting standards.
	- Eric Sunshine simplified overly complex code in
	  cssys/general/platformconfig.cpp and cssys/win32/filesysconfig.cpp.
	- Jorrit removed the world to texture transformation from
	  csPolyTexture. This makes some operations a small bit slower (like
	  static + dynamic lighting in case the object has moved) but it
	  saves a lot of memory again.
	- Eric Sunshine upgraded comment in configure.ac regarding filtering
	  out of Autoconf's default -O and -g flags.
	- Eric Sunshine made the following changes to apimod98.txi:
	    - Documented the path-related queries: csGetAppPath(),
	      csGetAppDir(), csGetResourceDir(), and the corresponding
	      iCommandLineParser methods.
	    - Documented new VFS variables $* and $^, and fact that VFS now
	      searches for vfs.cfg in the resource directory, then the
	      application directory, and finally the installation directory,
	      rather than only searching the installation directory.
	    - Moved the warning about libbfd's GPL license so that it appears
	      earlier in the discussion about meta-information embedding.
	    - Re-organized sections a bit so that sections logically related to
	      one another are now physically grouped, thus achieving a somewhat
	      less fragmented feel.
	- Eric Sunshine brought vfs.txi in the user manual up to date.  Also
	  added mention of new $@, $*, and $^ pseudo-variables.
	- res made the following changes:
	    - Added some functions to csUnicodeTransform helper class to
	      determine how many encoding characters a Unicode character from
	      an encoded string occupies.
	    - Fixed some cats from size_t to int in csUnicodeTransform.
	    - Added a version of Insert() to csString that accepts a const
	      char*.
	    - csReport(V) won't attempt to query a reporter from the registry
	      if the supplied pointer to the object registry is 0. Instead,
	      they print the error.
	    - Small tweak to fontplex.cfg; now contains standard Arial as well,
	      not just Arial Unicode.
	- res slightly changed a few doxygen comments for iPolygonMesh.
12-Oct-2003
	- Eric Sunshine clarified documentation for csGetResourceDir(),
	  iCommandLineParser::GetResourceDir(), and
	  csCommandLineParser::GetResourceDir() so that the Cocoa application
	  wrapper's "Resources" directory is mentioned explicitly.  Also
	  clarified documentation for csGetAppDir() so that Cocoa application
	  wrapper is mentioned explicitly.
	- Jorrit removed the iPolygonTexture interface. This eliminates
	  another SCF interface for every polygon.
	- Jorrit removed iLightMap. csCurveLightMap (for bezier curves) and
	  csLightMap (from polygons) no longer inherit from iLightMap. This
	  is another cases where the SCF interface is removed. Also removed
	  the virtual destructor from csShadowMap.
	- Jorrit removed the cache_data from csPolyTexture and csLightMap
	  (also for bezier). Also removed delayed_light_info structure
	  since this has been unused for a long time.
11-Oct-2003
	- Jorrit added csPolygonRenderData structure. This structure is now
	  used for communication between the thing mesh plugin and the
	  new renderer in case of the new renderer. This avoids the usage
	  of iPolygon3DStatic in all of CS.
	- Jorrit completely removed iPolygon3D and iPolygon3DStatic. This also
	  means that csPolygon3D and csPolygon3DStatic no longer use virtual
	  functions, no longer use ref counting and no longer implement
	  their respective iPolygon3D interfaces through embedding.
10-Oct-2003
	- Jorrit added iPolygonHandle. This is an SCF interface that can
	  be used to represent a thing polygon in situations where an SCF
	  interface is required. It is created by
	  iThingFactoryState->CreatePolygonHandle() or
	  iThingState->CreatePolygonHandle(). The handle is safe in the
	  sense that it will automatically return 0 pointers in case the
	  factory or instance is removed (uses weak references to do that).
	- Jorrit changed the engine sequence manager to use the new
	  iPolygonHandle instead of iPolygon3D.
	- Jorrit changed the engine sequence manager so that it now sets the
	  material on the instance polygon instead of the factory polygon.
	- Jorrit moved an error if a thing has no polygons after converting
	  everything to portals.  This error complained if a part had no
	  polygons but it should only complain if the entire thing has none.
	- Jorrit removed the unused csSector::IntersectSphere().
	- Jorrit removed a few additional declarations of iPolygon3D.
	- Eric Sunshine added new methods GetResourceDir() and GetAppPath() to
	  iCommandLineParser to complement the existing GetAppDir() method.
	  These methods correspond to the lower-level platform-specific
	  functions csGetResourceDir(), csGetAppDir(), and csGetAppPath().
	- Marten fixed a crash in stencil shadow plugin. Added test to see that
	  we don't try to create a shadow for a meshobject without polygons.
	- Eric Sunshine added %include "cstool/csfxscr.h" to cspace.i.  Problem
	  pointed out by James Thompson.
	- Eric Sunshine made the following changes to VFS which were very
	  loosely influenced by a patch submitted by Dariusz Dawidowski
	  <chfsoft@interia.pl>, but with additional functionality.
	    - Added vfs.cfg meta-variable $* which expands to the value of
	      csGetResourceDir().
	    - Added vfs.cfg meta-variable $^ which expands to the value of
	      csGetAppDir().
	    - VFS now attempts to load vfs.cfg from the following locations
	      (first one wins): resource directory, application directory,
	      installation directory.  In the past, it only attempted to load
	      vfs.cfg from the installation directory.
	  These modifications should be considered interim "helper" changes
	  until such time when a more complete VFS overhaul can be performed,
	  as proposed by Gregory Block wherein the monolithic and obnoxious
	  vfs.cfg is retired in favor of a more dynamic and automatic
	  configuration mechanism.
9-Oct-2003
	- Jorrit added the following new functions to iThingFactoryState:
	    - FindPolygonByName (const char*)
	    - AddEmptyPolygon ()
	    - AddTriangle (csVector3, csVector3, csVector3)
	    - AddQuad (csVector3, csVector3, csVector3, csVector3)
	    - AddPolygon (csVector3*, int)
	    - AddPolygon (int, ...)
	    - AddOutsideBox (csVector3, csVector3)
	    - AddInsideBox (csVector3, csVector3)
	    - SetPolygonName (csPolygonRange, const char*)
	    - GetPolygonName (int)
	    - SetPolygonMaterial (csPolygonRange, iMaterialWrapper*)
	    - GetPolygonMaterial (int)
	    - AddPolygonVertex (csPolygonRange, csVector3)
	    - AddPolygonVertex (csPolygonRange, int)
	    - GetPolygonVertexCount (int)
	    - GetPolygonVertex (int, int)
	    - SetPolygonTextureMapping (csPolygonRange, csMatrix3, csVector3)
	    - SetPolygonTextureMapping (csPolygonRange, csVector2, csVector2,
	    	csVector2)
	    - SetPolygonTextureMapping (csPolygonRange, csVector3, csVector2,
	    	csVector3, csVector2, csVector3, csVector2)
	    - SetPolygonTextureMapping (csPolygonRange, csVector3, csVector3,
	    	float)
	    - SetPolygonTextureMapping (csPolygonRange, csVector3, csVector3,
	    	float, csVector3, float)
	    - SetPolygonTextureMapping (csPolygonRange, float)
	    - GetPolygonTextureMapping (int, csMatrix3, csVector3)
	    - SetTextureMappingEnabled (csPolygonRange, bool)
	    - IsPolygonTextureMappingEnabled (int)
	    - SetPolygonFlags (csPolygonRange, uint32)
	    - ResetPolygonFlags (csPolygonRange, uint32)
	    - GetPolygonFlags (int)
	    - GetPolygonObjectPlane (int)
	    - IsPolygonTransparent (int)
	  and the following new functions to iThingState:
	    - GetPolygonWorldPlane (int)
	    - GetPolygonMaterial (int)
	    - SetPolygonMaterial (csPolygonRange, iMaterialWrapper*)
	  The idea is to eventually get rid of the iPolygon3DStatic and
	  iPolygon3D interfaces.  To do that we have to provide alternative
	  ways to create polygons.  We attempted to make an API that is as
	  flexible as the old one but a lot easier to use.  For example, in
	  simple1 we could replace about 44 lines with 3 using the new API.
	- Jorrit removed the bumptest app since this way to do bumpmapping is
	  obsolete when the new renderer is ready.
	- Jorrit converted all applications to use the new thing API.  As a
	  consequence none of the applications use the iPolygon3D or
	  iPolygon3DStatic interfaces now.
	- Jorrit fixed some parts of the documentation to reflect the latest
	  changes.
	- Jorrit renamed iThingFactoryState->SetTextureMappingEnabled() to
	  SetPolygonTextureMappingEnabled() to be more consistent.
	- Jorrit added a new version of iThingFactoryState->SetPolygonFlags()
	  that also accepts a mask.
	- Jorrit added iThingFactoryState->GetPolygonVertexIndices().
	- Jorrit added CS_POLYINDEX_LAST which can be used to get information
	  about the last created polygon in all functions that accept a single
	  polygon index.  In case of AddInsideBox() and AddOutsideBox() this
	  will actually return the index of the last polygon of that box.
	- Jorrit converted thing loader to the new API.
	- Eric Sunshine fixed Texinfo syntax error in apimod98.txi.  Also
	  re-wrapped to fit within 79 column.
	- Eric Sunshine added warning about libbfd's GPL license to
	  apimod98.txi.
	- Eric Sunshine corrected several mark-up and formatting problems in
	  apimod98.txi.
	- Eric Sunshine eliminated TeX `underfull hbox' warnings from
	  apimod98.txi and simple.txi.
	- Jorrit removed usage of iPolygon3D from a few plugins.
8-Oct-2003
	- Jorrit fixed keycolor rendering in the old OpenGL renderer in case
	  DrawPolygonMesh was used (fastmesh).
	- Jorrit added support for setting global mixmode on a thing (only for
	  objects).  Extended iThingState with SetMixMode() and GetMixMode().
	  Also extended the thingloader with a new <mixmode> keyword.
	- Jorrit removed support for setting mixmode and alpha for individual
	  polygons.  It is now only possible to set this on the entire mesh.
	  So if you need a transparent polygon then you have to make it a
	  separate mesh.
	- Jorrit fixed alpha support with DrawPolygonMesh by doing the above
	  change.  However, the alpha is still to dark in combination with a
	  lightmap.  The old OpenGL renderer still needs fixing for that.
	- Jorrit removed support for individual polygon drawing in thing.  This
	  greatly cleans up thing.  The fastmesh thresshold flag has been
	  removed too as this no longer makes sense: all thing meshes are
	  fastmesh now.
	- Jorrit removed csPolygon2D in thing mesh plugin completely.  This
	  class is no longer needed.
	- Jorrit removed support for getting camera vertices from iThingState
	  and iPolygon3D (GetVertexC() function).
	- Eric Sunshine fixed a bug in configure.ac reported by Matze where it
	  was emitting -L/usr/local/include rather than -L/usr/local/lib.
7-Oct-2003
	- Jorrit changed the main loader for portals:
	    - New <portals> statement that can group several portals and also
	      allows the keywords 'lodlevel', 'move', 'hardmove', ...
	    - The ability to specify <portals> or <portal> as a child of
	      another mesh.
	    - Some notes: if you have a standalone <portal> then the optional
	      name of that portal will be used for both the portal container
	      and the portal.  In that case portals sharing the same name will
	      be grouped on the same portal container.  If you use a manually
	      specified <portals> statement then the names of the individual
	      portals will no longer be used for the portal container (only for
	      the portals).
	- Jorrit marked everything with the PRE_THING_PORTALREMOVE tag.
	- Jorrit removed portal support from thing.  There are still some
	  issues:
	    - 'portal' command in walktest is now temporarily broken.
	    - Infinite maze is now temporarily broken.
	- Jorrit removed iThingState and iThingFactoryState,
	  IntersectSegment().  This function is now obsolete (same as
	  iMeshObject->HitBeamObject()).
	- Jorrit removed the temporary function iRenderView->GetLastPortalP().
	- Jorrit added iMeshWrapper->GetPortalContainer() as an easy and
	  efficient way to get to the portal container of a mesh.
	- Jorrit removed iMeshObject->GetPortalCount() and GetPortal().
	- Jorrit changed api documentation to reflect new portal changes.
	- res changed the GL extensions manager to set function pointers to 0
	  only at initialization time, not when retrieving the ext fails.  This
	  should fix the crashes on GL implementations that support
	  ARB_vertex_program, but not ARB_fragment_program.  Also added
	  GL_ARB_texture_non_power_of_two and GL_ARB_point_sprite extensions.
	- Eric Sunshine upgraded the snap15 and snap16 images in the MSVC6
	  HOWTO in the user manual so that they no longer mention the obsolete
	  cssys library.
6-Oct-2003
        - Philip Wyett added 'waterdemo' to CS root .cvsignore file.
	- Jorrit fixed waterdemo so it no longer uses '/this/data'.  It is best
	  to avoid /this.
5-Oct-2003
	- Marten Svanfeldt added the posibility to automatically generate
	  texturecoordinates for reflective cubemaping.
	- Marten Svanfeldt added a demo using a reflective cubemap and a simple
	  liquid surface simulation
	- Marten added a missing check of the ARB_texture_cube_map extension to
	  the reflective cubemapping code.
	- res fixed a few flaws in the waterdemo Jamfile: some superflous
	  CompileGroup statements and the wrong Help.
	- Marten applied a fix to csSet::GetIterator and the
	  csSet::GlobalIterator
	- res fixed borked recursive directory scan logic in the cssys/general
	  .csplugin plugin scanner.
	- Eric Sunshine removed some unneccessary change-log entries which were
	  recently added to the source and header files of the MacOS/X port.
	  We already have CVS and history.txt for this purpose.  Also made
	  minor formatting and whitespace corrections.
	- Luca fixed an error in a math formula in the documentation section
	  "7.6.6.4 Bringing it All Together" for doing texture mapping.
	- Rhad fixed csString's use of isalpha, isspace, toupper, tolower.
	  These functions must be passed a value in the range of an unsigned
	  char or EOF.
3-Oct-2003
	- Jorrit changed syntax services->ParsePortal() into
	  HandlePortalParameter().  This is a more general function which can
	  parse portal parameters but doesn't return an error if it doesn't
	  recognize the token.  That way the standard loader will be able to
	  use this and also add additional tokens to parse.
	- Jorrit changed the warp vector notation for portals in the loader
	  from 'v' to 'wv' and 'w' to 'ww' to avoid collision with using 'v'
	  for specifying the vertices of a portal.
	- Jorrit changed the main loader so that it also calls syntax services
	  HandlePortalParameter().  This means that you can now specify all
	  portal stuff in the <portal> statement.
	- res added a patch from Fritz Elfert <felfert@to.com> to fix thread
	  problems after change to _beginthreadex().  Apparently, the last
	  parameter needs to be a valid pointer.
2-Oct-2003
	- Jorrit extended the two versions of iEngine->CreatePortal() with a
	  'name' parameter.  That name will be used for the portal container
	  mesh.  If there is already a portal container with that name then
	  that portal container will be reused (possibly allowing to create
	  multiple portals in the same portal container).
	- Jorrit changed the main loader to use the name of the <portal> for
	  the created portal container.
	- Jorrit changed the disabled part of thing loader (which creates
	  portal containers instead of portals in the thing itself) to use
	  "__portals__" as the name of the portal container where all portals
	  are created.
	- Jorrit additionally added a return 'portal' parameter to both
	  versions of iEngine->CreatePortal() so that the caller can more
	  easily find out the portal that was created without having to revert
	  to getting the last created portal in the portal container.
	- res fixed the missing of the csappframe library directory from
	  cs-config output under certain circumstances, as reported by Bjorn
	  Hansen <holomorph@users.sourceforge.net>.
	- Jorrit fixed a bug in the portal implementation of portal containers.
	  The csPortal->IntersectSegment() routine didn't work properly if a
	  portal container contains more then one portal.
	- Jorrit added a new 'portal' render priority.  If that render priority
	  is present then it will be used automatically for portals created by
	  the thing loader.
	- Jorrit fixed some bugs related to render priorities in case some
	  render priorities are not specified by the map file.
	- Jorrit changed the way the rotating door works in flarge.  The
	  overlay texture of the portal is now a separate child mesh in a
	  higher render priority.  This works a lot better with the new portal
	  container approach.  Also added a 'portal' render priority to flarge.
	- Jorrit temporarily removed the <float> from the door portal in flarge
	  since it appears to be broken a bit with the new portal containers.
	  Need to investigate.
	- Jorrit added SetName/GetName() to iPortal.
	- Jorrit attempted to fix the 'wavy portal' stuff in flarge for the new
	  portal containers but failed.
	- Jorrit implemented HardTransform() for portal containers.
	- Jorrit enabled portal compatibility mode in the thing loader now!
	  This means that all portals that you create in map files using the
	  <portal> keyword inside a polygon will now become portals in a portal
	  container that is linked to the mesh of the polygon.  Note that
	  portals in things are still supported (but not through the map file).
	  These will be removed later if this turns out to work well.  So this
	  is basically an experimental stage.  There are still a few issues
	  though:
	    - In OpenGL mode the keycolor of the hole in the large room of
	      flarge no longer works.  With software renderer it is fine.
	      Strangely enough the keycolor works fine if you look at the hole
	      from underneath.  That's a different portal though.
	    - In Software mode the rotating door no longer has correct
	      reflection.  In OpenGL it is fine.
	    - The <float/> keyword for the rotating door had to be removed so
	      there may be some issues there.  This needs to be investigated.
	    - Wavy sector doesn't work yet.
	- Jorrit fixed a bug in the HardTransform() implementation of the
	  portal container.  This fixes the partsys level.
1-Oct-2003
	- Jorrit fixed a bug reported by valgrind in the portal container.  It
	  was using an uninitialized variable.
	- Jorrit made frustvis and dynavis totally independent of things.
	- Jorrit changed the default value of accurate for the second
	  iVisibilityCuller->IntersectSegment() function (the one that returns
	  polygon indices) from false to true.  This means that by default the
	  most accurate version is used.
	- Jorrit added an optional movable parameter to
	  iPortal->GetWorldPlane().  This can be used by the portal container
	  to update the world plane if that is needed.
	- Jorrit added iPortal->PointOnPolygon() which tests if a worldspace
	  point is in the portal polygon.
	- Jorrit implemented iMeshWrapper->PlaceMesh() so that it works with
	  the new portal containers.  In addition it now also works on portals
	  that move.  This wasn't the case in the past.
	- Jorrit updated the apimod documentation for all recent beam
	  intersection related changes.
	- Jorrit fixed a bug in iSector->FollowSegment().  If a polygon was hit
	  but that polygon was not a portal then the intersection point was not
	  correctly set.  This bug could cause the explosion in walktest to not
	  appear from time to time.
	- Jorrit changed portal container so that it implements
	  iShadowReceiver.  This fixes lighting for the new portals.
	- Jorrit fixed a bug with thing and polygon meshes.  If a polygon mesh
	  didn't have any polygons in it then the polygon mesh would be setup
	  and cleaned all the time causing performance degradation.
	- Jorrit added a random value to the pause between setup of polygon
	  mesh and cleanup (in thing plugin).  That way the load of cleaning up
	  all polygon meshes will be spread in time.
	- Eric Sunshine fixed a bug in cs-config where the value of
	  $(LIB.EXE.PLATFORM) was not emitted by cs-config's --libs option.
	  This caused linking problems on Windows since gdi32.lib was not
	  getting mentioned in the link statement.  This broke recently when
	  LIBS.EXE was changed so that it is distinct from LIBS.EXE.PLATFORM,
	  rather than incorporating LIBS.EXE.PLATFORM.  Problem was reported by
	  Dariusz Dawidowski <chfsoft@interia.pl>.
	- Reed Hedges added cscmdCanvasHidden/Exposed events to MacOSX (cssys
	  lib), and made some small documentation changes for the Blender
	  scripts and for the System.RunWhenNotFocused config option.
30-Sep-2003
	- Jorrit fixed a bug in thing polygon mesh helper where it would not
	  clean up old data if the thing changes and at the same time the
	  polygon mesh helper is locked.
	- Eric Sunshine eliminated gobs and gobs of compilation warnings from
	  throughout the project which were emitted with the new renderer
	  enabled.
	- Eric Sunshine upgraded ODE check in configure.ac to require 0.039
	  rather than 0.035 since `odedynam' now requires 0.039.
	- Eric Sunshine fixed compilation problem: csRGBVector::CompareKey()
	  was using static_cast<> where reinterpret_cast<> was required.
	- res made the following changes:
	    - Added an In() method to csHash<>.
	    - Changed cstool/tokenlist.h so the name of the token table init
	      function can be user-defined.
	    - Removed unused glwin32 wglext.h.
	    - Changed glwin32 plugin to use less UTF8/WCHAR conversions.
	    - Fixed mode switching when exiting/terminating app on glwin32.
	    - Removed a prototype for a non-existing function from
	      win32/wintools.h.
	- Jorrit made the parsing of the 'start' keyword safer by allocating
	  the string from the node.
	- Jorrit fixed a bug in hierarchical meshes. If you had more then
	  two levels (i.e. a child of a child) then it was possible that in
	  certain conditions the leaf wouldn't be correctly added to the
	  culler.
	- Jorrit changed the way child meshes are treated for render
	  priorities. A child mesh is now put as a separate entity in a
	  render priority. That way it is now possible to put child meshes
	  in different render priorities (different compared to the parent
	  mesh).
	- Jorrit fixed the way static lod works. The child is now responsible
	  for asking the parent if it should be rendered (this also works
	  for hierarchical meshes in general). This is perhaps not the ideal
	  solution but for now it will do.
	- Jorrit fixed a bug in portal loading and collision detection. This
	  bug caused the camera to jump up and down in the reflecting room.
	- res fixed another problem with mode switching back on app exit.
	- res did some small cleanups in graph2d.cpp (removed some commented
	  out statements, removed a printf.)
	- Keith added fix for missing GetTriangles() in sprcal3d.  Still is
	  not 100% correct but will work well enough for viewmesh.
	- Duhprey added a todolist for the terrain plugin
29-Sep-2003
	- Jorrit moved ParseTextureMapping() and ParsePoly3d() from syntax
	  services to thing loader. It doesn't make much sense to make those
	  parsing functions public. Especially since iPolygon3DStatic is
	  going to be removed in the future.
	- Eric Sunshine added csMD5::Encode(csString const&) to complement the
	  existing Encode(char const*) method.
	- Eric Sunshine added csMD5::Digest::HexString() and HEXString().
	  These methods return a hexadecimal string representation of the
	  digest in lower- and uppercase, respectively.
	- Eric Sunshine added a lot of missing `const' qualifiers to iString
	  and csString.
	- Eric Sunshine removed a bunch of inline methods from iString.  This
	  is supposed to be a pure, abstract interface for communication
	  between modules.  It is not supposed to contain implementation.
	- Eric Sunshine fixed several problems in iString where it failed to
	  return csRef<> in appropriate circumstances.
	- Eric Sunshine repaired the butchered "char* GetData() const"
	  abomination in iString and csString by replacing it with two methods:
	  one entirely const, and one entirely non-const.
	- Eric Sunshine added missing const version operator[] to iString.
	- Eric Sunshine added Slice() method to iString and csString.  This is
	  just like SubString() but returns the substring by value rather than
	  stuffing it into a passed-in buffer.
	- Eric Sunshine added iString::Downcase() and Upcase() methods.
	- Eric Sunshine renamed csString::strlwr() to Downcase().  Also added a
	  complementary Upcase() method.
	- Eric Sunshine fixed bugs in csString and scfString where some
	  operations were incorrectly aborting at the first null character,
	  rather than processing all characters in the string.  It is
	  acceptable (presently) for csString to contain arbitrary binary data,
	  thus embedded null characters may be present.
	- Eric Sunshine fixed bogus logic in scfString::SubString().
	- Eric Sunshine replaced a bunch of long, ugly copy/paste sprintf()
	  invocations throughout the project with csMD5::Digest:HexString().
	- Eric Sunshine removed the unused iShaderProgram::GetProgramID().
	- Jorrit fixed a missing strlwr() in win32/loadlib.cpp.
	- Jorrit removed the poly3d parameter from syntax
	  services, ParsePortal() routine. Instead added a sector return
	  parameter. By doing this, ParsePortal() is now independent of
	  polygons and also no longer creates the portal itself.
	- Eric Sunshine applied a few small patches from Dariusz Dawidowski
	  <truman@go2.pl> protecting some printf()'s in CS_DEBUG and changing
	  others to use iReporter.
	- Eric Sunshine eliminated a slew of compilation warnings in cstool
	  which were present when the new-renderer was enabled.
	- Eric Sunshine eliminated scads of compilation warnings from the new
	  renderer plugins.
	- Eric Sunshine eliminated compilation warning from
	  portalcontainer.cpp.
	- Jorrit changed the standard loader so that it now gives the mesh
	  wrapper as the context data for a mesh plugin (i.e. inside params).
	- Added code in thing loader to create portals using the new
	  portal container stuff instead of using portals in the thing plugin.
	  This seems to work mostly but not completely. That's why this new
	  code is still disabled for now.
	- Andrew Mann made a small optimization in csEventTimer::HandleEvent()
	  This is far from the best way to do things, but it's faster than
	  the previous method in the apparent current common use.
28-Sep-2003
	- Eric Sunshine corrected erroneous comments in
	  CS/mk/autoconf/compiler.m4.
	- Eric Sunshine performed clean-up of
	  CS/scripts/jamtemplate/configure.template.
	- Eric Sunshine fixed a number of problems in
	  CS/scripts/jamtemplate/cs_check_host.m4:
	    - Comments were all wrong; they had been copy/pasted from
	      configure.ac but not edited to suit the new context.
	    - Was using an old, unreliable scheme for differentiating between
	      MacOS/X and Darwin.
	    - Was incorrectly emitting OS_MACOSX when building for Darwin.
	    - Neglected to emit OS_UNIX when building for MacOX/X (in addition
	      to OS_MACOSX which it was correctly emitting).
	- Eric Sunshine augumented configure.ac so that plugin meta-information
	  embedding is disabled by default for platforms on which libbfd
	  accesses the embedded information, since libbfd uses a GPL license
	  which is incompatible with Crystal Space's LGPL license.  People who
	  do not mind having their project infected by the GPL libbfd library
	  must enable embedding explicitly.
	- Eric Sunshine augmented configure.ac so that it no longer performs
	  the libbfd check if plugin meta-information embedding is disabled.
	  Previously it performed the check regardless, which could result in
	  -lbfd appearing in the link statement even when embedding was
	  disabled.
	- Wouter added csgeom/polymesh to include/css.h.
	- Jorrit implemented csEngine::CreatePortal() which makes a portal
	  container as a child of another mesh.
27-Sep-2003
	- Eric Sunshine made minor clarifications to the "SCF Changes" section
	  of the "Release Notes 0.96 to 0.98" appendix in the user manual.
	- Jorrit implemented csPortal::ComputeCameraPlane().
	- Eric Sunshine worked around a GNU make bug on MacOS/X which caused
	  compilation of `gl3d' to fail.  In particular, under certain "random"
	  circumstances, GNU make incorrectly resolves implicit rules.  In this
	  case, when building the gl3d source files, it neglected to use the
	  gl3d implicit rule, thus GL.CFLAGS was not consulted and the build
	  failed.  Worked around the problem magically by changing cs.mak so
	  that the module makefiles define their own implicit rules before
	  cs.mak defines the fallback implicit rules.  Previously, cs.mak
	  defined implicit rules first.
26-Sep-2003
	- Jorrit fixed the static lod documentation which forgot to mention
	  that you had to add the children to the parent too.
	- Jorrit added an optional polygon_idx parameter to
	  iMeshObject->HitBeamObject(). Currently only thing supports this.
	  The intention is that you can get the index of the polygon that is
	  hit.
	- Eric Sunshine protected the new terrain item in user.mak inside
	  USE_NEW_RENDERER conditional.
	- Eric Sunshine changed mkdir.m4 so that _AS_MKDIR_P_PREPARE() removes
	  the bogus "-p" directory using rmdir rather than "rm -rf" since rmdir
	  is a bit safer in case someone actually has an existing directory
	  named "-p" (unlikely though that is).
	- Eric Sunshine wrapped CS_TEXT_CACHE_OUTPUT's AS_MKDIR_P invocation
	  inside AS_ESCAPE in order to ensure that AS_MKDIR_P works correctly
	  even in cases when AS_MKDIR_P has to fall back to the non-"mkdir -p"
	  case.  When it is not wrapped in AS_ESCAPE, the AS_MKDIR_P variables
	  and subshell invocations ($ac_dir, $ac_dirs, `dirname`) are
	  incorrectly evaluated in the context of configure, even though they
	  are supposed to be evaluated in the context of config.status.
	- Eric Sunshine updated commentary in mkdir.m4 and textcache.m4 to
	  reflect the fact that he finally managed, with additional prompting,
	  to get the Autoconf maintainers to fix the bugs which he had reported
	  nearly a year ago.
	- Jorrit completed the implementation of csSector::IntersectSegment()
	  for portal containers.
	- Jorrit implemented HitBeamObject() for portal containers. Also
	  supports the polygon index.
	- Jorrit made the first portal in flarge (the one from the first
	  room to the second small room) use the new portal container feature.
	  Seems to work ok so far. Note that this change requires a relight
	  since the geometry in the first room changed.
	- Jorrit changed the spider in bugplug to use a weak reference to the
	  camera to ensure the camera pointer is cleaned up if the camera
	  is deleted. This fixes a crash bug in bugplug when trying to
	  select some objects through portals.
	- Jorrit implemented HitBeamOutline() of portal container. This is
	  a faster version of HitBeamObject() which stops at the first hit
	  it finds. Also did a small optimization on thing HitBeamOutline().
25-Sep-2003
	- Jorrit removed iCamera->GetHit(). This function is only a very
	  thin wrapper on top of iSector->HitBeamPortals() so it is not
	  very useful to keep it and to clutter the API with it.
	     camera->GetHit(csVector3& v, int* pidx)
	  becomes:
	     camera->GetSector ()->HitBeamPortals (
	     	camera->GetTransform ().GetOrigin (), v, isect, pidx)
	- Duhprey added a new terrain plugin and demo for the NR
	- res made the following changes:
	    - Fixed walktest for recent iCamera->GetHit() removal.
	    - Added Jamfiles for duhprey's CLOD plugin.
	    - Added a patch from John Harger <john_h@selectpath.com> which
	      enhances the glshader_arb plugin with fragment program support.
	    - Added "polygon buffers" to the NR. You can compare it to the
	      polygon buffers of the OR; you feed in some polygons, and get out
	      a render buffer source you have specify in the csRenderMesh
	      structure. The 'mesh type' has to be 'POLYGON'.
	    - In the csRenderMesh structure, the 'transform' member was
	      renamed to the more speaking 'object2camera'.
	    - Brought the NR SW renderer up-to-date.
	    - Added polygon drawing to NR SW. Still veeery crude.
	    - Some GL extensions are now inited in the plugins which actually
	      use them.
	    - Fixed the problem that the shader manager only accepted
	      technique priorities > 0.
	- Norman Kraemer extended pythmod_setup.py to handle "-l" prefixed
	  additional libraries between the two "--".
	- Norman Kraemer augmented PYTHMOD.LIBS.PLATFORM flags to include
	  LIBBFD.LFLAGS. He thinks this should probably go into configure.ac.
	- res removed the 'privateGetVariable()' stuff from shader manager.
	- DeSigna removed incorrect information about iEventQueue's name in
	  the object registry from ievq's doxygen comments.
	- Keith Fulton added functions to set the spr3d action by index instead
	  of having to use action name strings.
24-Sep-2003
	- Jorrit finished implemented basic drawing of portals in
	  csPortalContainer. Still some optimizations and testing to do.
	- Jorrit extended iEngine->CreatePortal() so that you can give the
	  3D coordinates of the portal.
	- Jorrit added the first basic support for the <portal> keyword in
	  a sector (loader).
	- Jorrit changed GetNearbyObjects() and GetNearbyMeshes() to support
	  the new portal objects. This still leaves functions like
	  FollowSegment() and IntersectSegment().
	- Jorrit added a test standalone portal to flarge (in comments for now).
	- Jorrit fixed a bug in csSector::HitBeam(). It wasn't correctly
	  using GetFullTransform().
	- Eric Sunshine upgraded a bunch of outdated information in the
	  reference-counting HOWTO in the user manual, and added lot of
	  important information which was missing.
	- Eric Sunshine heavily revised the SCF chapter of the user manual.  It
	  was extremely outdated.  Also documented all of the features of the
	  revised SCF implementation, such as .csplugin meta-files and
	  automatic plugin discovery.
	- Eric Sunshine update apimod98.txi to reflect all of the major SCF
	  changes for version 0.98.
	- Eric Sunshine finished updating the user manual to reflect all of the
	  recent SCF changes.
	- Eric Sunshine fixed formatting problems in msvc7proj.txi, and
	  eliminated TeX warnings.
	- Eric Sunshine repaired some mark-up problems in sequence.txi.
	- Jorrit changed the api of the following functions:
	    - iThingState->IntersectSegment() and
	      iThingFactoryState->IntersectSegment() now return polygon index
	      instead of polygon pointer.
	    - The version of iSector->HitBeam() that doesn't support portals
	      now returns polygon index instead of pointer.
	    - The version of iSector->HitBeam() that supports portals is
	      now renamed to iSector->HitBeamPortals(). It now returns
	      the mesh that is hit and also a polygon index.
	    - iCamera->GetHit() now returns the mesh that was hit and
	      a polygon index.
	    - iVisibilityCuller->IntersectSegment() now returns a polygon index
	      instead of a pointer.
	    - iPortal->HitBeam() is renamed to HitBeamPortals() and now
	      returns a mesh and polygon index.
	- Eric Sunshine eliminated a slew of compilation warnings from
	  rgbpixel.h reported by MSVC regarding implicit conversion from int to
	  unsigned char.  Also eliminated extremely dangerous code which
	  assumed 32-bit architecture.
	- Eric Sunshine fixed some invalid URLs in sysreq.txi pointed out by
	  Roland Schulz <mail@r2s2.de>.
	- Eric Sunshine re-created all of the EPS images in
	  CS/docs/texinfo/tutorial/howto/msvc7proj because the existing ones
	  had corrupt bounding boxes.  Also converted the JPEGS from
	  progressive to normal mode.
	- Eric Sunshine re-created all of the EPS images in
	  CS/docs/texinfo/tutorial/howto/msvc6proj because the existing ones
	  had corrupt bounding boxes.
23-Sep-2003
	- Jorrit changed the default display depth in video.cfg from 16
	  to 32. On 3D cards, CS performs awfully bad with 16-bit displays
	  because stencils are not hardware accelerated. So 32-bit is a better
	  default.
	- Jorrit implemented csPortalContainer::DrawTest(). This still leaves
	  Draw() unimplemented.
	- Jorrit started implementation of csPortalContainer::Draw().
	- res added constructors to csSet<>::Iterator and
	  csSet<>::GlobalIterator to shut up MSVC7 warnings about failure to
	  create default constructors.
22-Sep-2003
	- Eric Sunshine converted csengine.mak and thingmsh.mak over to the new
	  style where built objects and resources are placed in their own
	  directory, rather than polluting and possibly colliding with other
	  resources in $(OUT).
	- Jorrit fixed a bug in syntax services where it was parsing a
	  string shader variable as float.
	- Jorrit moved code to compress vertices from csThing to
	  csVector3Array::CompressVertices(). There are two versions: one
	  for csArray<csVector3> and one for csVector3*.
	- Jorrit worked more on the portal container stuff. Added csPortal
	  implementation. Also extended iPortalContainer with functions
	  to create and manage portals. csPortalContainer now does
	  the following:
	      - Compress vertices automatically.
	      - Calculate bounding box for object model.
	      - Support for polygon mesh.
	- Jorrit fixed a bug in polygon meshes of thing. The base polygon
	  mesh was also being restricted to the CS_POLY_COLLDET flag. But
	  that's wrong. It should have all polygons.
	- Jorrit renamed csPortal in thing to csPortalObsolete. This to avoid
	  a clash with csPortal in engine.
	- Jorrit added GetObjectPlane(), GetWorldPlane() and
	  ComputeCameraPlane() to iPortal and the two current implementations.
	- Jorrit added iRenderView->SetLastPortal() and GetLastError().
	  This function replaces GetPortalPolygon() and SetPortalPolygon().
	  Temporarily the function still accepts an iPolygon3D but that
	  is going to change as soon as portal support is removed in thing.
	- Jorrit added CS_PORTAL_CLIPSTRADDLING to indicate a portal has to
	  cut geometry that goes through the portal itself. This is only needed
	  if the portal surface is transparent.
	- Jorrit added CS_PORTAL_VISCULL and CS_PORTAL_COLLDET.
	- Jorrit added support for the three new portal flags in syntax
	  services (<clipstraddling />, <viscull />, and <portal />).
	- Eric Sunshine added adjustments for TeX parameters in cs.txi in order
	  to reduce the likelihood of over- and underfull hbox warnings.
	- DeSigna patched in jsquare's changes to the msvc7 external
	  project howto, and added jpeg images for the HTML version.
	- res added EPS versions of the new images for the VC7 external
	  project HOWTO.
	- res changed the EPS images from the Cygwin setup guide to be wrapped
	  versions of the JPEG images and reduced their size in the document a
	  bit.
	- Norman Kraemer changed qsqrt to silence gcc-3.3.1, which started to
	  complain about deprecated use of memory input without lvalue in asm
	  argument. The resulting code is the same as generated with the
	  deprecated version (hopefully this is true for other gcc versions
	  too).
21-Sep-2003
	- Jorrit added iEngine->CreatePortalContainer() and CreatePortal().
	  With these functions it is possible to create portal container
	  meshes.
	- Jorrit fixed wrong header protector in cstool/meshobjtmpl.h.
	- Anders Stenberg implemented operator/= for csDVector3, since it
	  wasn't implemented by some reason, just declared in the header.
	- Eric Sunshine changed the `objcopy' check in configure.ac to employ
	  AC_CHECK_TOOL() rather AC_CHECK_PROGS() in order to support
	  cross-builds.
	- Marten Svanfeldt made these changes
	    - Added GetCurrentFrameNumber() to [cs/i]Engine. It will return a
	      number which is incremented on each Engine::Draw.
	    - Added Empty () to csRenderMeshList. It will empty all meshlists,
	      but keep the renderpriority structs.
	    - Added Sector::GetVisibleMeshes(iRenderView*). It will return
	      all visible meshes for a given sector and rview. These will
	      be cached, and only updated once each frame. This is to avoid
	      doing culling so many times when using multipass rendering.
	      Also made the generic renderstep to use it.
	    - Fixed a nasty bug in csGLRender3D where CS_ASSERT() was set
	      around an important statement in the VBO renderbuffer
	      implementation.  This had the sideeffect that VBO didn't work in
	      releasemode.
	- res added a missing #include to portalcontainer.cpp (older GCC
	  didn't like the (void)t where t's type was only forward declared.)
20-Sep-2003
	- Jorrit reverted nearly all his changes of yesterday. The only two
	  changes that remain are the iPortalContainer object (but now
	  totally empty and unimplemented) and the multiple inheritance
	  used in csMeshWrapper. But csSectorObject is now gone. The reason
	  is that this system turned out much too complex. Instead portals
	  will be implemented by a special mesh object that is managed
	  by the engine itself.
	- Jorrit changed csPortalContainer so that now implements iMeshObject
	  (through csMeshObject).
	- Jorrit fixed a bug in csMeshObject->GetRenderMeshes(). It didn't
	  set 'num' to 0.
19-Sep-2003
	- Eric Sunshine added the new CS_MSG_ERROR() Autoconf macro.  This is A
	  convenience wrapper for AC_MSG_ERROR() which invokes AC_CACHE_SAVE()
	  before aborting the script.  Saving the cache should make subsequent
	  re-invocations of the configure script faster once the user has
	  corrected the problem(s) which caused the failure.  All invocations
	  of AC_MSG_ERROR() in configure.ac have been converted to instead
	  invoke CS_MSG_ERROR().
	- Jorrit started a fundamental change in the way portals work. The
	  plan is to move portals away from thing and let the engine manage
	  them:
	      - Created csSectorObject. csSectorObject is now the superclass
	        of csMeshWrapper and takes care of the movable, render
		priority and so on.
	      - csSectorObject now inherits from iVisibilityObject.
	      - Added csPortalContainer which will be the object implementing
	        portals. Currently this does nothing.
	      - Added iPortalContainer.
	- Jorrit changed all PrepareItem/FreeItem calls in the engine
	  with clearer names (i.e. PrepareMesh, PrepareSector, PrepareLight,
	  and PrepareFactory). That makes it easier to grep for them and
	  also makes it easier to read code that uses those functions.
	- Jorrit changed pubapi target so that it no longer includes
	  csengine documentation.
	- Jorrit moved csRGBVector from csutil to csgfx. Firstly it belongs
	  there, and secondly this avoids a circular dependency between
	  csgfx and csutil.
	- Jorrit added iPortalContainerList.
	- res made the following changes to the stencil shadow render step:
	    - When a shadow mesh is auto-closed, the created polymesh is
	      reused the next time the shadow mesh has to be closed.
	    - Don't draw shadow volumes when the shadow shader doesn't offer
	      a suitable technique.
18-Sep-2003
	- res reverted Paul's change made to libs/cssys/win32/shellstuff.h
	  yesterday which caused SHGetFolderPathW() to be used when present.
	  The way this function was employed was borked: as the W in the name
	  indicates, it returns it's data as a wide(i.e. wchar_t*) string.
	  However, it was stored in a standard char* string - thus the data
	  returned would've been useless.
	- Eric Sunshine updated the API documentation for csGetPluginMetadata()
	  so that it clearly states how the function returns status
	  information, and exactly how it signals normal and abnormal retrieval
	  results.
	- Eric Sunshine fixed all of the implementations of
	  csGetPluginMetadata() so that they operate as documented.  In
	  particular, they now return a valid csRef<iDocument> if and only if
	  they successfully retrieve metadata for the plugin.  In the past, the
	  implementations often incorrectly returned empty iDocuments which
	  confused SCF since SCF was expecting an iDocument only if metadata
	  had been retrieved.  This fixes the problem in which SCF would crash
	  as a result of receiving an empty iDocument from the various
	  platform-specific csGetPluginMetadata() implementations for non-CS
	  shared libraries (.so, .dll, etc.) if they happened to reside in the
	  same directories as CS plugins.
	- Eric Sunshine applied a patch to csList<> from Bjorn Hansen
	  <holomorph@users.sourceforge.net> which added methods
	  csList::Iterator::Prev(), InsertBefore() and InsertAfter(), as
	  well as a little bit of additional Doxygen documentation.  Eric
	  also fixed several other problems, such as numerous missing
	  inline keywords, and performed additional documentation cleanup.
	- Jorrit applied the same fixes he did to glextmanager.h to the
	  Python scripts that generate that file. That way his fix will not
	  be overwritten.
17-Sep-2003
	- Eric Sunshine documented cssys+csutil merge in apimod98.txi.
	- Eric Sunshine documented csHash<> and csSet<> in apimod98.txi.
	- Eric Sunshine repaired a lot of Texinfo mark-up errors in
	  apimod98.txi.
	- Eric Sunshine renamed Appendix C and all of its subsections from "API
	  Changes" to "Release Notes" since these sections cover more than just
	  API changes.
	- Eric Sunshine eliminated numerous `hbox' warnings reported by TeX.
	- Jorrit used valgrind in combination with the new renderer and
	  discovered that the csGLExtensionManager didn't initialize the
	  function pointers if some extension is not available. Since
	  glrender3d (and other modules) sometimes test on the value of
	  such a function pointer this could obviously give very bad
	  results. Now csGLExtensionManager will initialize everything
	  even if the extension is not present.
	- Eric Sunshine added dlltool, dllwrap, and windres checks to
	  configure.ac.  These checks respect the --host configure option,
	  which makes it possible to cross-build CS for Mingw from Linux.
	  http://www.libsdl.org/extras/win32/cross/README.txt
	- Eric Sunshine changed the Mingw build to once again use "gcc -shared"
	  when creating plugin modules instead of dllwrap.  Jorrit reports that
	  he has trouble debugging plugins (missing debug symbols) built with
	  both "gcc -shared" and dllwrap, so we might as well use the more
	  well-supported option (gcc -shared) rather than the deprecated one
	  (dllwrap).  It has also been reported that this change might work
	  around a crash when loading some DLLs (such as glwin32) which are
	  created with very recent Mingw/Msys tools.
	- Eric Sunshine fixed a typographical error in configure.ac:
	  CS_GL_PATH --> CS_GLU_PATH
	- Eric Sunshine fixed render3d/opengl/gl_txtcache.cpp so that, when
	  including glu.h, it respects the CS_GLU_PATH which is emitted by the
	  CS configure script.
	- Eric Sunshine fixed problem on MacOS/X following the cssys+csutil
	  merge where .m and .mm source files were making their way into the
	  OBJ.CSUTIL makefile variable, thus causing make-based builds to fail.
	- Eric Sunshine fixed bugs in libs/cssys/cssys.mak where it failed to
	  respect $(SRCDIR) in all cases.
	- Eric Sunshine eliminated hundreds of "macro redifinition" warnings
	  from renderer/opengl/csglext.h.
        - Paul Garceau performed a Mingw/Msys build/maintenance update for
	  Windows OS versions < 5.0:
	    - Added exception processing to allow SHGetFolderPathW to be
	      properly loaded for Unicode Processing as needed or requested by
	      Windows OS for those Windows OS versions < 5.0
	      (NT4/Win98/Win98SE/Win95).
	    - Impact: Reduce time and overhead required to open Canvas and
	      start Renderer for Windows OS versions < 5.0.
16-Sep-2003
	- Jorrit fixed the thing plugin so that it now actually registers
	  leaving portals to the sector.
	- Jorrit cleaned up a few portal things in thing mesh.
	- Jorrit changed the leaving portals in iSector so that
	  it is now a set of meshes that have portals instead of just portals.
	- Jorrit removed the arriving portal stuff. It is currently not
	  possible to correctly maintain this list and it is probably also
	  not needed.
	- Jorrit changed the movable code so that it now correctly updates
	  the list of leaving portal meshes when an object changes sector.
	- Eric Sunshine merged the object files from cssys and csutil into a
	  single library: csutil.  (The cssys sources are still separate.)
	  This change solves a host of problems resulting from the severe
	  circular dependencies between these two modules, and should help pave
	  the way for creation of proper shared libraries in the future.
	- Eric Sunshine augmented cs-config so that it has knowledge of the
	  csappframe library.
	- res made the following changes:
	    - Moved the const char* and csRef<> hash key handlers from
	      engine/renderloop.h to csutil/hashhandlers.h, as they're general
	      purpose.
	    - Changed the renderloop file loader: instead of <renderloop>, the
	      top level node must be named <params>, for compatibility with
	      the "paramsfile" option from csloader.
	    - Added a GetIterator() method to csSet<>.
15-Sep-2003
	- Eric Sunshine added a check for the C++ `typename' keyword to
	  configure.ac.  If not recognized by the compiler, the
	  CS_USE_FAKE_TYPENAME_KEYWORD macro is emitted to volatile.h, which
	  csdef.h recognizes in order to fake up a `typename' keyword.
	- Eric Sunshine removed a couple useless #defines from csdef.h.
	- Jorrit added a templated csSet<T> which is to csHash<T> what
	  csHashSet is to csHashMap (i.e. csSet<T> is a templated version
	  of csHashSet).
	- Jorrit added a set of arriving portals and a set of leaving
	  portals to every sector. This list is maintained by the entities
	  that create portals (i.e. thing mesh only at this moment) and
	  also by the movable when objects that contain portals move.
	  Note that this is not done yet!
	- Eric Sunshine performed project-wide spelling corrections:
	    basicly     --> basically
	    conveniance --> convenience
	    conveniant  --> convenient
	    occurance   --> occurrence
	    occurrance  --> occurrence
	- Jorrit added weak reference support to all SCF objects. This adds
	  four bytes of overhead per SCF object but that should not hurt
	  too much. On the other hand you can now use csWeakRef<T> on every
	  iBase instance. There is a new SCF_DESTRUCT_IBASE() macro (and
	  SCF_DESTRUCT_EMBEDDED_IBASE()) which should now be used in
	  all implementations of iBase (but currently is not used in anyone).
	- Jorrit changed the portal implementation in thing to use a weak
	  reference to the sector instead of using the old iReference based
	  approach. This means that when a sector is removed the portals
	  pointing to that sector will automatically get cleared. As
	  a consequence of this iPortal no longer inherits from iReference.
	- Jorrit removed iReference and iReferencedObject. These interfaces
	  are no longer needed.
	- Eric Sunshine added `scf' prefix to new internal-detail iBase
	  instance variables and methods to avoid namespace pollution.
	- Eric Sunshine added --accept and --reject options to msvcgen.pl which
	  allow filtering of the input filename list in case the client is
	  unable to do the filtering itself.
	- Marten Svanfeldt fixed the bug with stencil-shadows in r3dtest.
	- Eric Sunshine fixed a problem introduced on 12-Sep-2003 which
	  resulted in platform-specific libraries not being linked into plugin
	  modules.  The problem was triggered when the LIBS.EXE definition in
	  the platform-specific makefiles was changed to the more correct
	  LIBS.EXE.PLATFORM.
14-Sep-2003
	- DeSigna made the following changes:
	    - Fixed the SCF_CREATE_INSTANCE macro to return a csPtr<>, in
	      accordance to the other SCF macros.
	    - Fixed all usage of SCF_CREATE_INSTANCE in CS to work correctly.
	    - Fixed nettut to use csRef<> tracking instead of raw pointers.
	- Eric Sunshine added an RTLD_NOW check to configure.ac since this
	  constant is missing from some platforms, such as OpenBSD.
	- Eric Sunshine added a check to configure.ac for the Cg shader
	  toolkit.  The glshader_cg plugin is now built only if the Cg toolkit
	  is detected.
	- Eric Sunshine added a check to configure.ac to see if the compiler
	  recognizes the -pipe option.
	- Eric Sunshine fixed several bugs in various shader plugins where
	  their ProgramID() methods were casting the first character of
	  a string to a pointer, rather than taking the address of the string
	  as intended.  Also eliminated several compilation warnings in
	  glrender_cg plugin.
	- Eric Sunshine eliminated use of magic constants in favor of sizeof()
	  in numerous locations throughout the project.
	- Eric Sunshine worked around a problem where X11-related plugins
	  failed to link when built with Jam.  This problem arose on
	  12-Sep-2003 when configure was "fixed" to not emit empty properties
	  to the generated Jamconfig file.  Jam performs variable expansion in
	  the odd and usually annoying "product-wise" manner in which
	  "$(X) $(Y)" with X set to "x" and Y undefined will expand to ""
	  rather than "x " which would be the case with every other tool on the
	  planet.  The Jam expansion method broke the build because X11.LFLAGS
	  referenced other X11-related variables by name, and one or more of
	  those variables were undefined because configure omitted them from
	  Jamconfig since their values were empty.
13-Sep-2003
	- Philipp Aumayr removed changed a delete data; to delete[] data; in
	  plugins/video/openglcommon/glfontcache.h. mentioned by unaek in
	  #crystalspace
	- Jorrit cleaned up the shadermanager. Also fixed a small bug in the
	  registration of the event handler where it would use || to combine
	  two masks instead of |. Additionally removed some warnings.
	- Jorrit cleaned up the shader plugins.
	- Duhprey fixed an error in shadow caps.  Fixes one of the glitches
	  behind the wall in r3dtest.
12-Sep-2003
	- Jorrit moved the progressive LOD calculation classes from sprite3d
	  to csgeom.
	- res changed r3dtest so the twisted torii aren't bump mapped for now.
	  genmesh currently doesn't provide all the informations required for
	  dot3 at the moment, causing visual glitches on some hardware.
	- Eric Sunshine added an --enable-meta-info-embedding option to the
	  configure script.  When enabled, plugin meta-information is embedded
	  directly in the plugin module (if supported by the platform).  When
	  disabled, the meta information is placed alongside the plugin module
	  in a separate .csplugin file.  Embedding is enabled by default.
	- Eric Sunshine augmented CS_BUILD_PROPERTY() in configure.ac so that
	  it no longer emits properties for which the value is empty.  Not only
	  does this eliminate empty assignments in the generated configuration
	  files, but it also simplifies numerous callers of
	  CS_BUILD_PROPERTY().
	- Eric Sunshine relocated cleanup of autom4te.cache from the
	  "maintainerclean" target to the "distclean" target.
	- Eric Sunshine removed the last remnant (DO_DINPUT_KEYBOARD) of
	  DirecInput support; the bulk of which was removed some time ago.
        - Philip Wyett corrected #include's for Cg and eliminated make
          depend warnings.
	- Eric Sunshine fixed a number of problems where the output of
	  "cs-config --makevars" was lacking on some platforms (missing
	  definitions, etc.) for both make and jam generations of cs-config.
	  (bug #759768)
	- Eric Sunshine fixed csconf.mak so that it also extracts <cs-config>
	  blocks from CS/mk/*.mak, rather than only from the platform-specific
	  makefile.
	- Eric Sunshine changed cs-config so that it also now recognizes
	  --long-version in addition to --longversion.
	- Eric Sunshine added --makevars to cs-config --help output.
11-Sep-2003
	- Jorrit cleaned up some sources in the stencil renderloop.
	- Jorrit did the following optimizations with regards to
	  iPolygonMesh::CloseMesh() and the stencil renderloop:
	    - CloseMesh() now returns a table of indices so it doesn't do an
	      alloc for every single polygon.
	    - The copy of the polygon mesh maintained by the stencil renderloop
	      also avoids the per-polygon alloc now.
	    - CloseMesh() now uses a more optimal way to close the mesh if it
	      knows the base mesh prefers triangles.
	- Jorrit fixed a bug in csRenderMeshList with front2back and back2front
	  sorting.  The sorting functions were casting the pointers wrong.
	- Jorrit did some cleanups to glrender3d.
	- Jorrit removed the assembly mmx routines for the Dynavis coverage
	  buffer.  They didn't appear to be working correctly anymore (at least
	  with gcc 3.2) and the gain was minimal while complexity is a lot
	  more.
	- Eric Sunshine increased the minimum FreeType2 version number checked
	  by the CS configure script from 2.0 to 2.1.3 since the CS FreeType
	  plugin is using features introduced in 2.1.3.  (Better yet, in the
	  future, the configure script should be updated to check for the
	  actual FeeType features CS requires, rather than checking for
	  specific version numbers.)
	- Eric Sunshine renamed csHash<>::Iterator::Return() and
	  csHash<>::GlobalIterator::Return() to Reset() for consistency with
	  other iterators and because Reset() is a more sensible name.
10-Sep-2003
	- Philip Wyett made struct ShadowDrawVisCallback a friend to class
	  csStencilShadowStep.  This works round C2248 MSVC 6 compiler error
	  and known compiler bug Q243351.
	- res fixed the totally bogus OR csLight::GetDistanceForBrightness ().
	- Philip Wyett added CSTOOL dependency to rlsstd.mak (rendstep_std).
	- Anders Stenberg fixed some drawing problems in pgserver.
	- Jorrit copied data/shader/light.xml to data/shader/light_bumpmap.xml.
	  Then he created a new data/shader/light.xml which doesn't do the
	  bumpmapping techniques. r3dtest now uses light_bumpmap.xml while
	  stenciltest uses light.xml.
	- Jorrit extended the engine sequence manager with the ability to
	  move lights. This could be done without modifying the engine
	  sequencer API as the AddOperationMoveDuration() function can be
	  reused. In the parser Jorrit added the <movelight> operation.
	- Jorrit added a few sequences to r3dtest so that the light now moves.
	  This demonstrates how the shadows and bumpmaps are modified
	  dynamically.
	- Jorrit fixed a crash in old renderer related to light attenuation.
	- Jorrit fixed a strange construction in syntax services which
	  prevented flarge from loading since there was a conflict with
	  the 'float' keyword being used for shader variables and for
	  portals.
	- Eric Sunshine removed 8-bit characters from rendermeshlist.h and
	  rendermeshlist.cpp.
	- Eric Sunshine fixed bug in bfdplugins.cpp where it assumed the
	  `errmsg' variable would be null, but was in fact unassigned.
	- Jorrit added three torus objects from stenciltest to r3dtest.
	- Eric Sunshine fixed errors in glshader_fixed.mak where the SRC and
	  INC variables were not respecting SRCDIR.
	- Eric Sunshine fixed problem in rendermeshlist.h where it mentioned
	  iObjectRegistry in a prototype even though it wasn't declared.
	- Anders Stenberg did some color correction in picogui to get
	  red/blue right.
	- Jorrit did some code cleanup in the engine renderloop code. Also
	  removed a few warnings.
	- Jorrit performed the following small optimizations in relation
	  to the renderloop stuff:
	    - Avoided a memory allocation of a transformation for every single
	      technique.
	    - Avoided a memory allocation of the callback structure every
	      frame.
	    - Changed csRenderMeshList::GetSortedMeshList() so that it now
	      updates a csArray<csRenderMesh*> instead of returning a table
	      that has to be deleted every time.  This avoids a lot of memory
	      allocation overhead.  In the generic render step code we now
	      maintain a permanent array (permanent for that step) to keep
	      these meshes in.  This avoids having to construct/grow the array
	      all the time.
9-Sep-2003
	- res added a simple calculation of binormals and tangents to thing.
	- res reformatted light.xml a bit.
	- res added some cheesy new textures to stdtex.zip: normalmaps for the
	  textures used in r3dtest and a new texture for the donut in flarge.
	  Also moved it a bit so it's only half shadowed.
	- Jorrit added 'cstool' library to rendstep_std plugin.
	- Jorrit fixed an accidental cvs conflict stuff that got into
	  plugins/video/render3d/opengl/gl_txtcache.cpp.
	- Jorrit fixed an accidental commit in thing.cpp.
	- Jorrit fixed a bug in rendermeshlist.cpp which would sometimes try to
	  use a 0 render priority.
	- Keith updated the example .cal3d file in
	  /plugins/mesh/sprcal3d/persist.
	- Jorrit fixed a compile error in thing.cpp for old renderer.
	- Jorrit added the notion of weak references to CS (experimental
	  feature, untested).  First there is a csWeakRef<T> which takes an
	  object of type T that implements at least AddRefOwner() and
	  RemoveRefOwner().  The weak reference doesn't call IncRef() on the
	  object but it will call AddRefOwner().  As soon as the object is
	  destroyed the pointer in the weak reference will be set to 0.
	- Jorrit added several macros in scf.h to assist the creation of
	  objects that support weak references (all untested).  Basically you
	  can now do in the class definition:
	      SCF_DECLARE_IBASE_WEAK (csMyClass)
	  and then in the source file:
	      SCF_IMPLEMENT_IBASE_WEAK (csMyClass)
	         SCF_IMPLEMENTS_INTERFACE ...
	      SCF_IMPLEMENT_IBASE_WEAK_END
	- Jorrit added a new csTimerEvent class (untested).  This class can
	  schedule operations to be performed later.  It is a very low overhead
	  scheduler since it will actually only check all events if needed.
	- Jorrit added csEventTimer::GetStandardTimer() convenience function.
	  This gets (or creates) the standard timer with id
	  'crystalspace.timer.standard' from the object registry.
	- Jorrit fixed SCF_IMPLEMENT_IBASE_WEAK_DECREF so that it now also adds
	  a RemoveRefOwners() function that you can use in the destructor of
	  some object to clean all ref owners.
	- Jorrit fixed some bugs in csTimerEvent so that it actually works.
	- Jorrit removed iPolygonMesh->Cleanup() and added iPolygonMesh->Lock()
	  and iPolygonMesh->Unlock() instead.  The reasoning is that cleanup
	  should not be called by the modules using iPolygonMesh because they
	  don't know if another module isn't going to need the data later.
	  Instead the new timer is used to register events that will clean up
	  the polygon mesh data later provided none of the modules is locking
	  it.
	- Jorrit reports: The thing mesh object now implements this way of
	  cleanup. Still need to do this for the other mesh objects.
	- Jorrit added the CS_POLYMESH_TRIANGLEMESH flag for iPolygonMesh which
	  indicates that the polygon mesh prefers to give a triangle mesh.
	  Added this flag to all iPolygonMesh implementations that need this.
	- Anders Stenberg added a ParseShaderParam to syntax services, and made
	  material use this to load parameters.  Other parts of the shader
	  system should also use this, but don't right now.
	- Anders Stenberg added a bumpmapping shader, and fixed tangent and
	  binormal calculations in thing.
        - res made the following changes:
            - Simplified tangent/binormal calculation in thing a bit. Also
              'flipped' the binormal, seems to look more correct.
            - Changed stencil plugin to use either an iPolygonMesh's poly or
              triangle mesh, depending what's 'native' to the object.
	- Eric Sunshine renamed csArray<T>::Iterator::Return() to Reset() to
	  match the name Marten specified in his CVS log message when he added
	  the method (also because Reset is a more sensible name than Return).
        - res made the following changes:
            - glshader_fixed now reports the number of available texture
              units.
            - Added some helper #defines to deal with CS_VATTRIB ids.
            - Added a technique to do dot3 lighting in a single pass.
            - Added a new 'srcalphaadd' blending mode, needed for single pass
              dot3.
        - res & groton fixed csLight::GetDistanceForBrightness () to properly
          work on non-CLQ attenuations for OR. Apparently, the fact that this
          function returned 'false' caused some trouble (e.g. weird floating
          point exceptions with VC6.)
8-Sep-2003
	- Jorrit added csgfx to the stdsteps renderloop plugin (for Jam).
	- Jorrit did the following changes to bring new and old renderer
	  branches closer together:
	    - Added back the CalculateFog stuff in iRenderView.  This is not
	      relevant for new renderer but it doesn't hurt to have it back.
	    - Some light changes.
	    - Removed several unused NR specific variables from csSector.
	    - csAnonRenderBufferManager is now part of OR build too.
	    - Added NR specific genmesh API to OR build.
	    - Re-added Dump(g3d) to iDebugHelper.
	    - Iso engine change and fix.
	    - iVertexBufferManager added to NR build.
	    - Added csShaderBranch to OR build.
	- Jorrit improved error reporting in the renderloop loader plugin.
	- Jorrit removed un unneeded dependency on iEngine from glshader_ffp.
	- Jorrit removed lots of #ifdef CS_USE_NEW_RENDERER in the plugins
	  directory.
	- Jorrit fixed aws compile with old renderer.
	- Jorrit moved the entire renderloop stuff from
	  plugins/video/render3d/renderloop to plugins/engine/renderloop where
	  it belongs.
	- Jorrit added csPolygonMeshTools::Triangulate() and
	  csPolygonMeshTools::Polygonize().
	- Jorrit added the notion of a triangle mesh to iPolygonMesh.  Many
	  modules prefer to hand over triangle meshes instead of the clumsy
	  polygon mesh.  Additionally many modules prefer to receive triangle
	  meshes too.  To solve that iPolygonMesh can now also support triangle
	  meshes but it is always required that the other type works too.  The
	  conversion should be transparent and is the responsibility of the
	  iPolygonMesh implementer (the new functions
	  csPolygonMeshTools::Triangulate() and
	  csPolygonMeshTools::Polygonize() can be used to assist with that).
	- Jorrit reports: Rapid collision detection plugin now uses
	  GetTriangles() to get the mesh information.
        - res removed plugins/engine/renderloop/stdsteps/lightiter.pp.  This
	  file was a leftover from some debugging times ago which must have
	  made it's way to CVS by accident.
	- Jorrit fixed the stencil shadow plugin to also use GetTriangles()
	  now.
	- Jorrit fixed mk/user.mak so that it no longer compiles glrender3d if
	  NR is not enabled.  Similarly for jam.
	- Oktal made the following changes to the perl5 plugin:
	    - Accumulation of many different updates to the Swig interface
	      files. Regenerated the Swig files.
	    - Fixed the makefile so it should now by reasonably easy to add
	      Swig code regeneration to jobber.pl. This involved moving
	      cswigpl5.inc to CS/scripts/perl5/.
	    - Commented out the Jamfile since I don't know how to make it do
	      what I want it to do.
	- Anders Stenberg added three pass PPL technique for cards with just
	  two texture units. Also inlined all FFPs.
	- Marten Svanfeldt made the following changes:
	    - Added a Reset() member to csArray<T>::Iterator to reset the
	      iterator.
	    - Added the class csRenderMeshList which is a utilityclass used by
	      the rendersteps to collect csRenderMeshes after culling and sort
	      those correctly according to renderpriority and z-order.
	    - Added correct usage of culling in the generic renderloopstep.
	      It is correct when just culling against a rview. Functions to
	      cull properly against lightvolumes and portals is still work
	      in progress.
	- Marten Svanfeldt changed GL_CLAMP into GL_CLAMP_TO_EDGE in glrender3ds
	  texturecache. They should be identical, but ATI does not work as
	  expected when using GL_CLAMP.
        - res hardcoded the texture format for cubemaps to RGB8 to fix visual
          glitches on ATI cards.
7-Sep-2003
	- Jorrit performed a lot of changes to unify the new and old
	  renderer branches:
  	    - iGraphics3D now has all functions from both new and old
	      renderer. Old renderers now implement the new functionality
	      (but empty) and new renderers now implement the old
	      functionality.
	    - iMaterial->GetShader()/SetShader() ported to new renderer.
	      Similarly for iMaterialHandle.
	    - Ported various enums and defines from new renderer to old
	      renderer.
	    - Enabled the new renderer stuff in the OpenGL statecache for the
	      old renderer too.
	    - iMaterial is now a shader branch in old renderer too.
	    - The end result of these changes is that all new renderer
	      specific plugins now compile with old renderer enabled. The
	      desired end result of my changes is that the CS_USE_NEW_RENDERER
	      flag will be removed and all plugins will automatically function
	      for both old and new renderer. We're not there yet though...
        - acraig fixed a problem in sprcal3d where it was using the old
          renderer iLight::GetSquaredRadius() function that no longer exists.
	- Anders Stenberg added attenuation shader for PPL
6-Sep-2003
	- Jorrit fixed a compile bug in perfstat.
	- Anders Stenberg did the following changes to the new renderer:
	    - Fixed various bugs regarding texture switch reduction
	    - Made sure cubemaps honor the NOFILTER flag
	    - Worked around a problem with textures being prepared multiple
	      times.
	    - Added a new standard texture ("standardtex normalization map")
	    - Added support for setting up GL lighting with gl_fixed_vp
	    - Updated lighting shaders to support per pixel lighting (no
	      attenuation) and vertex lighting without VP
	    - Moved lighting standard variables to lightiter renderstep
	    - Removed all calls connected to vertex lighting from iGraphics3D
	    - Made sure shadermanager grabbed texture handle instead of wrapper
	      since textures added by the renderer doesn't have wrappers
	    - Changed shadow shader mixmode from add to copy. No point in
	      blending since the output is masked anyway.
5-Sep-2003
	- Jorrit changed R3D_RENDERSTATEOPTION to G3D_RENDERSTATEOPTION for the
	  new renderer.
	- Jorrit renamed GetWVMatrix() to GetObjectToCamera().  This is more
	  logical (symetrical with SetObjectToCamera()) and also more
	  compatible with old renderer.
	- Jorrit completely merged render3d.h with graph3d.h so that only
	  graph3d.h remains.
	- Peter Amstutz added more comments to the AttachCollider* methods in
	  varia/dynamics.h and changed the default softness from .316 to .01
	- Duhprey fixed the default to stepfast and coding style in odedynam.
	- Duhprey made the following changes to stencil shadows:
	    - Improved memory management with csHash<> and csArray<>
	    - Fixed robustness on animated (deforming) meshes
	    - Fixed robustness on moving meshes
	- Eric Sunshine augmented configure.ac so that it recognizes and
	  attempts to work around anomalous installations with multiple
	  versions of libiberty (one from binutils and one from gcc), in which
	  the gcc version is missing the htab_create_alloc() function required
	  by libbfd.
	- Jorrit fixed a bug in the new renderer where it would fail to
	  set the top_clipper in StartDraw(). In fact new renderer fails to
	  do anything in StartDraw().
	- Jorrit replaced iPolygonMesh->IsDeformable() with the more general
	  iPolygonMesh->GetFlags(). The following flags are supported:
	  	- CS_POlYMESH_CLOSED: object is closed.
	  	- CS_POlYMESH_NOTCLOSED: object is not closed.
	  	- CS_POlYMESH_CONVEX: object is convex.
	  	- CS_POlYMESH_NOTCONVEX: object is not convex.
	  	- CS_POlYMESH_DEFORMABLE: object is deformable.
	  Modules inside CS (like the shadow manager for the new renderer
	  and the visibility culler) may use these flags to optimize
	  their behaviour with respect to the model. For example, the stencil
	  shadower wants to have closed objects so if an object is not closed
	  it will have to close it itself.
	- Jorrit added <closed />, <notclosed />, <convex />, and <notconvex />
	  keywords to <polymesh> parser so that you can set the hints to be used
	  for culler, CD, and shadow manager. Note that <box> is closed and
	  convex by default so there is no need to add the hints then.
	- Jorrit also added <default /> to <polymesh> parsing so that you can
	  change the closed/convex flags for the default polymesh of
	  some object.
	- Jorrit removed CS_ENTITY_CONVEX. This flag was not used and
	  is now made obsolete by the flags in iPolygonMesh.
	- Jorrit reports: the old <convex> and <closed> keywords that you
	  could use in a mesh will now also set the equivalent
	  CS_POlYMESH_... flags in all polygon meshes associated with that mesh.
	- Jorrit added support for <closed> and <convex> to factories too.
	- Jorrit changed api mod documentation for latest polymesh change.
	- Jorrit removed CS_CULLER_HINT_CONVEX and CS_CULLER_HINT_CLOSED.
	  These are now obsolete since they are replaced by CS_POLYMESH_...
	  flags.
	- res made the following changes wrt the stencil shadow render step:
	    - Loading the shadow shader now happens upon a 'system load' event,
	      not when a render step is created. The old way was problematic,
	      as it required certain shader plugins that don't work well with
	      unopened systems (e.g. the GL shaders need the extension manager.)
	    - The hashes used now take advantage of templated key types.
	    - There were circular references between csStencilShadowStep and
	      csStencilShadowCacheEntry. Now only csStencilShadowStep holds
	      csStencilShadowCacheEntry references.
	    - csStencilShadowStep::Perform() now uses a viscallback to
	      iterate over shadowing meshes.
	    - The CLOSED/NOTCLOSED flags of the shadow poly meshes are honored.
	- res made the following changes:
	    - Ditched loading of the shadow shader at system open time again.
	      It may happen that the renderstep is loaded after the open event,
	      and in this case the shader wasn't loaded. Instead, the shader
	      is now loaded when needed the first time.
	    - Added the ability to 'override' the engine's default render loop.
	      This can be done either with a config setting
	      "Engine.RenderLoop.Default" or a "-renderloop=X" command line
	      parameter. In both cases, the full VFS name must be specified.
	    - Removed "ALTERNATE_RENDERLOOP" #define from engine. Using
	      renderloops is default now.
	    - Added two renderloops in data/shader.
	    - Changed csHash<> so all 'key' parameters are now const refs.
	    - Added a 'csHashReversible<>' which is analogue to
	      csHashMapReversible. Still very primitive, tho.
4-Sep-2003
	- Peter Amstutz fixed the csPolyTexture destructor (part of
	  the thing plugin) to not try to deallocate the lightmap
	  (and thus crash) if the lightmap is actually NULL
	- Peter Amstutz added new API documentation for the
          parameters of about 75% of the methods defined in iEngine
	- Jorrit updated the collision detection howto and also clarified
	  a Doxygen comment about the need to call ResetCollisionPairs().
	- Jorrit reverted data/shader/vertexlight.avp because with revision
	  1.8 of that file the new renderer crashes because GetBestTechnique()
	  returns 0 for some shader.
	- Jorrit fixed iso engine for latest light and material changes.
	- Jorrit merged api of new renderer iLight with old renderer iLight.
	  This means that Set/GetRadius() is now Set/GetInfluenceRadius() and
	  GetSquaredRadius() is now GetInfluenceRadiusSq().
	- Jorrit and res2k fixed data/shader/vertexlight.avp so that it now
	  compiles on at least one additional OpenGL implementation.
	- Jorrit added some extra debug code (number of rendered meshes)
	  to glrender3d.
	- Jorrit added stenciltest level to CVS. This is for the new
	  renderer.
	- res added the ATI_separate_stencil and EXT_stencil_two_side
	  extensions to the GL extension manager and made some other small
	  tweaks in the ext manager.
	- res fixed a cut'n'paste error in metaglext.xml.
	- res removed his EXT_stencil_two_side definition - there already was
	  one in metaglext.xml.
	- res added some tools to deal with 'closedness' of polygon meshes
	  (csPolyMeshTools.)
	- res changed how the stencil plugin retrieves the shadow mesh.
	  First, the shadow polygon mesh is tried. If it's present, it's used.
	  No testing for closedness is done - the shadow mesh is "trusted" to
	  be closed. Next the viscull mesh is used. A check for the 'closed'
	  flag of the mesh object will be added later. If it's set, the mesh
	  will be treated as closed. If the viscull mesh isn't present, the
	  colldet resp. base meshes are tried. If, either due the missing flag
	  or a test, the mesh is found 'unclosed', it'll be naively closed
	  (by duplicating faces & flipping their normals.)
	- res modified the Thing static data to not set the shadow poly mesh.
	- res changed r3dtest so that the viewer doesn't stare at a wall at
	  startup.
	- Jorrit started merging iGraphics3D for new and old renderer a bit.
	- Jorrit reverted the shadow mesh change from res. This is totally
	  against the spirit of how iObjectModel works. The visibility culler
	  should ONLY use the viscull polygon mesh. If not present no
	  visibility culling will happen. Similarly the shadow manager should
	  ONLY use the shadow polygon mesh. If that is not present no
	  shadow casting should happen either.
	- Jorrit removed the usage of the collision detection mesh in case
	  there is no shadow mesh (from the stencil shadower).
	- Jorrit removed the new csPolyMeshTools which was badly placed (should
	  be in csgeom instead of cstool) and which also was already there
	  under the name csPolygonMeshTools :-)
	  So I just moved the two functions in csPolyMeshTools to the
	  already exsisting csPolygonMeshTools in csgeom.
	- res made the following changes:
	    - ARB VPs can now contain a <description> token. The content of it
	      is displayed in case of a program error (or warning).
	    - ARB VP spec says that a program error string may be available
	      even if no program error occured. The error string is displayed
	      as well in this case (but it's not fatal.)
	    - Several Load() functions in the shader manager errorneously
	      returned 'false' even if no problem occured.
	    - Changed the logic to determine the shadow mesh. Now, only the
	      shadow mesh is used; if not present, no shadow is casted.
	      However, the shadow mesh is tested for closedness.
	- Duhprey commited the ode.h he forgot to commit yesterday
	- Troy fixed broken strcmp calls in stringarray.h: Find() and
	  FindCaseInsensitive().
3-Sep-2003
	- Peter Amstutz changed nullmesh to properly initialize it's
	  bounding box to a legal (albeit extremely small) value.
	- Jorrit changed the engine to create the stringset object in the
	  object registry when this is not already done by the new renderer.
	  This is also done with old renderer.
	- Jorrit made the csStringID's in csMaterial static so that not
	  every csMaterial instance has them.
	- Jorrit added csStringID names for the four texture layers so that
	  we can use the same API for iMaterial/iMaterialWrapper as the
	  new renderer uses.
	- Jorrit Removed iMaterial->GetTextureWrapper() which takes an index as
	  a parameter. Instead we now use GetTextureWrapper() which takes
	  a name. Added four names ('tex layer1'... ) to refer to the four
	  texture layers.
	- Jorrit removed csMaterial::SetTexture() with a texture handle
	  as a parameter. Materials should NEVER refer to handles directly
	  but always go through iMaterialWrapper.
	- Jorrit consequently also removed support for iMaterialHandle
	  in the shader variables.
	- Jorrit migrated csMaterial::GetTexture() to old renderer.
	- Jorrit reverted the change that shader variables don't support
	  iTextureHandle. Apparently this is needed for fog.
	- Jorrit re-introduced the notion of attenunation type to the
	  new renderer. In addition to the four standard ones there is
	  now also CS_ATTN_CLQ which is how the new renderer prefers it.
	  Also made the api more similar between new renderer and old
	  renderer. The old renderer now also supports CS_ATTN_CLQ with
	  the attenuation vector. On the new renderer, when attenuation
	  values different from CS_ATTN_CLQ are used with the new renderer,
	  the engine will still calculate the attenuation vector from that
	  so you can be sure that on the new renderer GetAttenuationVector()
	  will always work.
	- res made the following changes:
	    - Fixed shadow volume generation. The problem was that the
	      "light position" shader var wasn't properly propagated to the
	      shadow volume shader.
	    - The shadow model is now queried from the mesh object, not the
	      factory.
	    - Fixed an unitialized member of csShader.
	    - Small optimization in glshader_arb: shader var 'type casting' is
	      done when a value on the SV is set, so no need for the client
	      code to do that itself.
	    - Updated NR todo.
        - Philip Wyett updated docs to reflect a new msvc_libs release.
	- Eric Sunshine fixed a memory leak in bfdplugins.cpp where it was
	  duplicating a string before passing it to iStringArray::Push() and
	  then leaking the clone.
	- Duhprey did the following to physics:
	    - Added a per-frame callback so the input can be checked after each
	      physics frame
	    - fixed a bug with somehow deleting the line that saves created
	      systems. (weird)
	- res made the following changes:
	    - In glrender3d, the "light attenuation" SV was overwritten with
	      the "fog texture" SV, with the result that light attenuation
	      couldn't be set.
	    - glrender3d did some unnecessary Vector3->Vector4 conversions
	      in SetLightParameter ().
	    - csLight::CalculateInfluenceRadius () called SetInfluenceRadius ()
	      to set it's calculated influence radius. However, this called
	      CalculateAttenuationVector(), which in turn called
	      SetAttenuationVector(), which clears the "influence radius valid"
	      flag, causing an unnecessary recalculations of the influence
	      radius. Worse, probably due to numerical precision, the
	      attenuation vector and influence radius wasn't the same between
	      two calls of GetInfluenceRadius (), causing very visible
	      flickering.
	    - Worked a bit on the vertex light VP. It is a bit more complete
	      now - not just diffuse, but also specular lighting (tho FP
	      support for this lacks), and also honors the attenuation vector
	      now.
2-Sep-2003
	- Philip Wyett re-applied Eric Sunshine's Cygwin __argc/__argv fix in
          win32.cpp, which was overwritten by the old version by another
          developer.
	- Philip Wyett added CreateThread() and ExitThread() for Cygwin port,
          as it does not have _beginthreadex() or _endthreadex().
	- Jorrit changed the new renderer iGraphics3D API as follows:
	  Removed ActivateBuffer, DeactivateBuffer, ActivateTexture, and
	  DeactivateTexture. Instead there is now SetBufferState() and
	  SetTextureState(). This has two advantages:
	    - Avoid the overhead of many virtual function calls when
	      external modules (shader manager) have to activate and
	      deactivate buffers and textures.
	    - Make it possible to do further optimizations in those
	      routines to avoid the work of deactivating if not needed.
	- Jorrit implemented the new API in the new renderer software and
	  OpenGL renderers.
	- Jorrit fixed a bug in the new renderer in relation to the
	  activation of vertex buffer. There was only one table used to
	  indicate if a vertex table was active or not but two tables
	  are needed to distinguish between conventional and extra
	  buffers (range 0 to 15 and 100+0 to 100+15).
	- Jorrit optimized the OpenGL version of SetBufferState() and
	  SetTextureState() by avoiding the deactivation of the buffers
	  if this is not needed.
	- Jorrit performed some further optimizations on
	  csShaderManager::SetupState().
	- Jorrit fixed some occurrences of Compare (changed with CompareKeys)
	  in csHash.
	- res fixed a bug in csHash<>::GetAll(). When you have a loop that
	  should iterate from n-1 to 0, it's better to decrement the loop
	  counter than to increment.
	- Eric Sunshine changed the NASM check in configure.ac so that it
	  checks for `nasmw' in addition to `nasm', since `nasmw' is the
	  program name on Windows.  Also fixed so that it no longer
	  unnecessarily and (potentially) incorrectly passes "-f elf" to nasm
	  during the test invocation.
	- Duhprey did the following to the physics loader:
	  Added softness parameter in a few places it wasn't (Thought this was
	  there already)
	  Changed behavior of mesh colliders attached to bodies so they won't
	  transform based on the mesh (the body is already transformed based on
	  the mesh so this would do the transform twice) mesh colliders
	  attached to a systme are unaffected.
	- Duhprey did the following to odedynam:
	  Added ODEDynamicsState (although tunneling prediction
	  "EnableFastObjects") not yet implemented
	  Fixed a bug where somehow the line to rotate the mesh mass correctly
	  was moved
	- res removed the <texturemapping> statement from the shadow debug
	  shader. Apparently, it caused crashes.
	- Oktal moved BFD reading and conflict checking in bfdplugins.cpp to
	  follow the standard of other implementations.
1-Sep-2003
	- Jorrit unreverted the changes from Old_Belge on the sprcal3d
	  mesh object. Unfortunatelly this means that this plugin now
	  requires the CVS version of cal3d. Version 0.9 is no longer
	  sufficient.
	- Jorrit added iTextureWrapper->IsVisitRequired() (and also
	  equivalent iMaterial->IsVisitRequired() and
	  iMaterialWrapper->IsVisitRequired()). This function will return
	  true if it is needed to call visit(). Basically this function
	  tests if the texture has a use callback. Mesh objects can use
	  this function to avoid the need to call Visit(). The Visit() function
	  comes up pretty high in profiling runs so this is not
	  insignificant.
	- Jorrit also fixed a bug in csMaterial. It was not calling Visit()
	  on the layered textures. This caused procedural textures not to
	  work if in a layer.
	- Jorrit modified the thing mesh so that it only calls Visit() on
	  materials that actually require this. This should have some
	  impact on performance since Visit() comes up pretty high in
	  profiling runs.
	- Jorrit also modified the genmesh mesh so that it only calls
	  Visit() when needed.
        - Philip Wyett removed the sprcal3d plugin from the default MSVC build.
	- Jorrit reports: After Oktal's changes to csHash, the
	  Iterator::Return() function was wrong. It would set 'element' to -1
	  which caused crashes later in the Seek() function. Fixed to start at
	  0 now.
        - Philip Wyett updated docs to reflect a new msvc_libs release.
	- Jorrit added iMeshObject->InvalidateMaterialHandles(). The idea
	  is that the engine (or another entity that manages materials)
	  will call that on all mesh objects as soon as the material handles
	  change. This can't happen at this moment but in the future this
	  could happen if, for example, the renderer changes at runtime or
	  if a material animates and gets different material handles.
	  Normally mesh objects always have to go through the material
	  wrapper and call GetMaterialHandle() ALL the time through
	  rendering. But this is a virtual function call and if you have
	  an object with a lot of materials (like a thing) this can get
	  very expensive. So now a mesh object can cache the handle and
	  it only has to call GetMaterialHandle() again when
	  InvalidateMaterialHandles() is called.
	- Changed Thing mesh so it now supports InvalidateMaterialHandles().
	- Jorrit fixed a problem in the generic renderloop plugin where
	  SCF_IMPLEMENT_IBASE was combined with
	  SCF_IMPLEMENT_EMBEDDED_IBASE_END.
	- Jorrit fixed a stupid bug he introduced with his more recent
	  changes.
	- Eric Sunshine moved getopt.h include to bottom of css.h since it
	  aliases getopt to __getopt on some platforms, which causes problems
	  for other includes (for instance, on MacOS/X, it is reported that it
	  was breaking <unistd.h> in some fashion).
	- res made the following changes:
	    - Typo fix: iVisibilityCullerListner -> iVisibilityCullerListener
	    - Added viscallback versions of the viscull methods to cull
	      against planes and spheres.
	    - Stencil shadow plugin now compiles again. However, it's still a
	      work in progress of trying to get it to work (and it looks like
	      that.)
31-Aug-2003
        - Philip Wyett changed #include "GL/glu.h" to <GL/glu.h>, in the new
          GL renderer gl_txtcache.cpp, eliminating the warning messages within
          the make build system.
	- Jorrit fixed an initialization error of last_visible_vistest_nr
	  with both dynavis and frustvis. With a bit of bad luck this could
	  cause culling errors.
	- Jorrit fixed another initialization error with current_visnr in
	  csSector. Please people! Don't forget to initialize variables
	  in the constructor!
	- Jorrit fixed wrong calculation of the radius of a thing which
	  could cause things to be culled wrong in some rare cases.
	- res reverted an accidential commit of msvcgen.mak and committed the
	  originally intended win32.mak.
	- Eric Sunshine changed configure.ac so that it only checks for
	  opengl32 and cousins on Windows platforms.  This will eliminate
	  problem where Wine's opengl32.so was being detected on Unix
	  platforms, thus causing an unwanted dependency between CS and Wine.
	- Eric Sunshine changed configure.ac so that it performs a reliable
	  test to distinguish between MacOS/X and Darwin.  It is still
	  possible, however, to cross-build for Darwin from MacOS/X by
	  specifying the --with-x switch.
	- Eric Sunshine changed configure.ac so that the X-windows check is
	  bypassed for MacOS/X.  This fixes the problem where MacOS/X
	  executables and plugins would have an undesirable dependency upon
	  XFree86, if XFree86 happened to be installed on the computer.  (The
	  --with-x flag can be used to override this behavior.)
	- Oktal added a FindContent method to csStringArray and iStringArray
	  that compares the contents of the strings instead of the char
	  pointers themselves, and FindCaseContent a case insensitive version.
	- Oktal fixed bfdplugins.cpp so it supports BFD data in .so files and
	  .csplugin files at the same time (but not for the same plugin).
	- Oktal fixed an off-by-one bug in csHash::Iterator.
	- Oktal changed csHash::DeleteAll() from void to bool.
	- Eric Sunshine made the following changes:
	    - Removed the pointless csStringArray::Find() method which did
	      pointer comparisions.  This would never succeed under normal
	      circumstances.  Ditto for iStringArray and scfStringArray.
	    - Renamed csStringArray::FindContent() and FindCaseContent() to
	      Find() and FindCaseInsensitive().  Ditto for iStringArray and
	      scfStringArray.
	    - Fixed several memory leaks in bfdplugins.cpp where it was leaking
	      strings added to various string arrays.  (The string array Push()
	      method makes its own copy of the incoming string, so calling code
	      should not duplicate the string on the array's behalf.)
	    - Simplified some csStringArray::Push() invocations in
	      win32/loadlib.cpp.
	- Eric Sunshine eliminated compilation warning in csengine/meshobj.cpp.
        - Philip Wyett rolled back cal3d plugin to pre Steven Geens Morph
          target changes. These changes were exclusively in the cal3d CVS only
          and experimental whereas CS requires the stable 0.9 cal3d release.
	- Eric Sunshine modified configure.ac so that the user now has more
	  control over the CPU-specific optimizations selected by the
	  configuration script.  Previously, by default, configuration
	  attempted to utilize the maximum optimizations possible for the host,
	  but this resulted in unportable executables and plugins (for
	  instance, the project built for an Intel 686 would not necessarily
	  work on 586 hardware).  The user could select only to enable all
	  optimizations or to disable optimizations altogether.  Now, however,
	  the --enable-cpu-specific-optimizations option accepts "no",
	  "minimum" (or "min"), and "maximum" (or "max").  The "minimum" option
	  selects optimizations which are likely to be supported by reasonably
	  modern hardware, thus resulting in fairly portable executables.  This
	  is the default optimization setting.  The "maximum" option applies
	  the highest optimizations supported by the host platform and
	  produces the least portable executables.  Use this option only if you
	  do not care about portability.  The "no" option (same as
	  --disable-cpu-specific-optimizations) disables all CPU-specific
	  optimizations.
30-Aug-2003
	- Old_Belge added the morph target support to sprcal3d.
	- Eric Sunshine augmented configure.ac so that it emits the appropriate
	  libbfd linker flags to LIB.EXE and APPLICATION.LFLAGS.  unix.mak and
	  cssys/Jamfile are no longer responsible for inserting these flags
	  into the build process.  This fixes a problem where applications
	  built with the GNU make system failed to link because the libraries
	  were specified in the wrong order (they were listed far too early in
	  the link invocation).
	- Anders Stenberg reimplemented the PicoGUI video driver. Now it should
	  be hardware accelerated and generally cleaner. Logical operations
	  aren't supported yet though, and there are some redraw issues.
	- DeSigna fixed up an exit crasher in PGUI plugin caused by a
	  reference held past DestroyApplication.
	- Anders Stenberg reenabled pixmap drawing with csPixmap derivates in
	  the new renderer, which was disabled.
        - Philip Wyett added test for PGSERVER.AVAILABLE in user.mak, so that
          the Pico plugin is not built unless the library is on the build box.
          Also added test to Pico test app 'pgtest', so that if the plugin
          associated is not built the test app will also not be built.
	- Jorrit fixed uninitialized variables in the xmlread plugin in case
	  of an xml declaration. Some of the shader xml files use this and
	  this could cause crashes with walktest (which uses xmlread) and
	  the new renderer.
        - Philip Wyett added CSTOOL to the spr3d makefile as a dependency.
          This fixes the unresolved symbols of csAnonRenderBuffer error at
          runtime, which prevents the spr3d plugin loading when in conjunction
          with the new renderer.
	- Anders Stenberg fixed pico->pico internal drawing in pgserver.
	- Anders Stenberg fixed pico->pico internal drawing in pgserver
	  for real this time. Includes a very nasty, but unfortunately
	  necessary hack in the pgserver plugin.
	- res fixed a problem with library loading error reporting on Win32:
	  under certain circumstances, csPrintLibraryError() popped strings
	  from an empty string array, which triggers an assertion.
	- res augmented SCF to emit an error in case a symbol couldn't be
	  retrieved from a library.
        - Andreas Busch renamed CS_ZBUF_SPECIAL to CS_ZBUF_INVERT in python
	  and perl5 modules to match latest renderer changes.
	- res fixed the missing arguments to the SCF "symbol not found" errors.
	- res made the following changes:
	    - Added compilegroups "softcanvas" and "openglcanvas".
	    - Added a few more dependendies to walkall: aforementioned
	      softcanvas and openglcanvas and fontplex. When building with NR
	      enabled, walkall will also depend on glrender3d, the shader and
	      the renderloop plugins instead of gl3d.
	    - Fixed a cut'n'paste error in softrender3d Jamfile.
	    - The library error reporting on Win32 missed newlines.
	    - cstool/csview.cpp and cstool/keyval.cpp unnecessarily included
	      iengine/sector.h.
	    - Made the type of the key in csHash<> templated as well and added
	      support for "key handlers" which compute the actual hash of a
	      key and compare two keys. Overriding key handlers makes strings
	      as keys possible, for example.
	    - Fixed an off-by-one error in csHash<>::Iterator.
	    - Changed the shader manager to emit a warning of no shader plugin
	      was found.
	    - In NR build, the sector doesn't cache the rendermeshes any more
	      or does culling. This is the responsibility of the renderstep
	      now. Note 1: The generic RS has been updated, but is still
	      rather unoptimized. Note 2: The stencil RS hasn't been updated
	      yet.
	- res removed cssys/general/printf.cpp from the VC libcssys source
	  file list. Win32 has it's own csPrintf() etc.
	- res added support for the "SetDllDirectory()" API on Win32. It
	  provides pretty much the functionality that the PATH patching
	  already, but a bit cleaner. It is only supported by very recent
	  Windowses, tho, and if not present, PATH is still patched like
	  before.
	- Anders Stenberg fixed pico update problem by updating all the time.
	- Anders Stenberg fixed a graphics2D implementation that dropped
	  alpha when blitting.
29-Aug-2003
	- renej added support for using CS from Java. SWIG is needed since
	  no generated files are in the CVS repository. Building is done
	  with a Makefile and an And build.xml. This is not for end-users
	  right now. A simple example is included, showing the event handler
	  written in Java extending the CS iEventHandler.
	- renej updated python scripting: initial support for easy extending
	  VARG functions by means of include/ivaria/pythvarg.i
	- Anders Stenberg changed 2 occurrences of "render3d" to "graphics3d"
	- Jorrit started the work of merging the old renderer and new renderer
	  branches (basically eliminating all CS_USE_NEW_RENDERER checks).
	  This includes the following:
	      - GetRenderMeshes() is now also present in old renderer but
	        it is not used. All mesh objects now have an empty stub
		implementation for GetRenderMeshes().
	      - Moved over the render loop calls in iEngine to old renderer.
	      - Similar for iSector. Also moved iSectorRenderMeshList to
	        old renderer.
	      - Made sure all the render loop headers compile with old
	        renderer.
	      - Moved csFog from render3d.h to common part in graph3d.h.
	      - Moved csZBufMode from render3d to common part in graph3d.h.
	      - Moved csVertexAttrib from render3d to common part in
	        graph3d.h.
	      - Moved G3D_FOGMETHOD to common part of graph3d.h.
	      - Moved all new renderer specific methods in iMeshWrapper
	        to old renderer branch.
	      - Bugplug spider and shadow now work.
	      - Started work on documenting the API changes for the new
	        renderer that are relevant for user applications.
	- Jorrit added a docs/todo_newrenderer.txt which should contain
	  all stuff that needs to be done for new renderer (in detail).
	- Jorrit made sure that the following mesh objects now compile
	  (although they will probably not work):
	      - Beziermesh: re-enabled all the csTriangle stuff. No idea
	        why that was removed and fixed some other things.
		Also changed light->GetSquaredDistance() to
		GetInfluenceRadiusSq().
	      - All particle systems now compile (except rain).
	      - Haze mesh compiles.
	      - Null mesh loader compiles although I had to put a lot of
	        NR specific code in comments. Apparently the null mesh loader
		has once worked with NR. Now it will not work anymore. No
		idea how to fix.
	      - Removed some NR specific stuff from csMeshObject which wasn't
	        used and appeared to be left-overs from the past. This fixes
		the rain particle system.
	      - spr2d now compiles.
	      - stars now compiles.
	      - Disabled terrfunc and terrbig from the Jam build with
	        new renderer enabled. There are a bit harder to fix right.
	- Jorrit fixed the loader plugin so that it recognizes <layer> and
	  <effect> again even with new renderer enabled. Just doesn't do
	  anything at this moment.
	- Jorrit changed Jamrules so that the list of static plugins is
	  extended with the new renderer plugins if new renderer is selected.
	- Jorrit fixed a bug with thing and the new renderer. FillRenderMeshes()
	  did not properly call Prepare() which caused obj_normals not to be
	  set in case smoothing was enabled.
	- Jorrit fixed all GetRenderMeshes() calls in meshes that don't yet
	  support the new renderer so that they at least set 'num' to 0
	  correctly. That way they will work with the new renderer (but
	  don't display anything).
	- Jorrit changed the loader so that it will now automatically create
	  and load ambient.xml and light.xml if the <shader> block is missing
	  in the world file. This is to support old world files. Note that this
	  is only really a temporary hack. We have to see what happens if
	  we load multiple world files and those shaders are already loaded.
	- Jorrit changed the loader so that a material will automatically use
	  'light' as the diffuse shader and 'ambient' as the ambient shader
	  if no shaders are otherwise mentioned.
	- Jorrit reverted a call to Prepare() in FillRenderMeshes() (thing
	  mesh plugin). This breaks the thing mesh for smoothed things (with
	  new renderer enabled) but it fixes it for all the rest :-)
	- Anders Stenberg now added the csplugin, jam and makefiles for new
	  software renderer, which were forgotten last time.
	- Jorrit worked around a strange thing with new renderer and the
	  XOR pattern image that is used in case a texture is not found. It
	  turns out that GetMipMapDimensions() was not working properly then
	  because the mipmap levels of the texture were not initialized. I
	  fixed this by testing in the thing plugin for the return value
	  of GetMipMapDimensions() and if it returns false I postpone init
	  to later (like what happens with materials that are not yet
	  prepared).
	- Eric Sunshine fixed the following build-time problems with the recent
	  changes to support BFD embedding of metainfo in plugins:
	    - Fixed totally broken makefile syntax in unix.mak.
	    - Fixed broken logic in unix.mak which caused wrong files to be
	      built.
	    - Moved Unix-specific makefile goop out of general mk/cs.mak and
	      into unix.mak where it belongs.
	- DeSigna made the following changes:
          - Modified csGraphics2D::Initialize constructor used by
	    csGraphics2D::CreateOffscreenCanvas(), as it did not correctly
	    initialize the config accessor member. The font cache, loaded by
	    G2D, relies on this accessor to get its config.
	  - pgserver uses all the accelerated CS operations again.
	    Non-functional.
	- Eric Sunshine fixed configure.ac so that it emits XFREE86VM.CFLAGS
	  to Jamconfig (it was only emitting XFREE86VM.LFLAGS).  This allows
	  the xextf86vm plugin to build correctly with Jam on platforms where
	  the X11 headers reside in /usr/X11R6/include.
	- Eric Sunshine fixed a lot of makefiles throughout the project which
	  were incorrectly using DO.PLUGIN rather than	DO.PLUGIN.PREAMBLE,
	  CORE, POSTAMBLE.
28-Aug-2003
	- Jorrit fixed the x2d plugin so it actually reports an error if the
	  'xwin' plugin cannot be found.
	- Jorrit also fixed the reporter so that it will use 'csPrintf'
	  to report the error if there are no listeners and the severity
	  is ERROR or BUG. That way error messages sent to the reporter
	  will not get lost even if the standard reporter listener didn't
	  have a chance yet to register itself to the reporter.
	- res made the following changes:
	    - Thing is more robust (i.e. no crash) is case the renderer
	      returns a 0 super ligthmap. (As Null3d does.)
	    - The Thing LM layouter did not honor a polygons 'lighting' flag.
	      It assumed all polys were lit.
	    - Fixed a misplaced call to a cleanup function Thing, causing
	      lightmap layouts to be discarded and recalculated way too often.
	    - Null3d now adjusts texture dimensions the same way Soft3d and GL
	      do.
	    - cslight now displays a text progress meter on the console, in
	      addition to the graphical meter.
	- Anders Stenberg changed most occurrences of "Render3D" to
	  "Graphics3D", including some "r3d" that were changed to "g3d".
	  Now filenames and makefile targets should be the only remnant of the
	  stupid "render3d" naming (which was my fault, sorry for that :)
	  Also added make- & jamfiles for new software renderer.
	- Anders Stenberg fixed a bug in new renderer where aspect wasn't
	  initialized before BeginDraw in WalkTest. Solved by setting default
	  aspect and center in iGraphics3D::Open based on canvas size. Note
	  that this isn't really a good solution[TM]. The apps should call
	  SetPerspectiveAspect/Center _before_ calls to BeginDraw.
27-Aug-2003
	- Eric Sunshine fixed problem in csHash where non-friend classes
	  csHash::Iterator and GlobalIterator were accessing protected csHash
	  members.
	- Jorrit did the following changes related to the new renderer:
	    - Renamed 'crystalspace.render3d.opengl' to
	      'crystalspace.graphics3d.opengl'.
	    - Added iCamera::GetHit() again. No idea why that was disabled.
	    - Added csFog to render3d.h.
	    - Enabled the fog stuff again in iSector. Support for this has
	      to be disabled elsewhere.
	    - Walktest now compiles and 'almost' runs using the new renderer.
	    - Fixed the ball mesh plugin so that it compiles again with new
	      renderer. Not sure that the fix is right. I had to add a
	      missing parameter to CreateRenderBuffer() and I guessed that
	      the correct value should be 'false' for index.
	    - Added 'nrall' target for jam to compile all that is specific
	      for the new renderer.
	    - Added iMaterialWrapper::SetTextureWrapper() for new renderer
	      too. This will set the diffuse texture and is a convenience
	      function.
	    - Enabled iEngine->CreateBaseMaterial() again which was disabled
	      for some bizare reason. This fixes bugplug again.
	    - Fixed the ball mesh object for real. The index parameter should
	      be 'true' for the triangle buffer.
	    - Fixed spr3d jamfile so that it links with cstool.
	    - Made sure the 'shaders' keyword and others for new renderer
	      also works with old renderer but simply do nothing.
	- Jorrit added stdpt, ieplex, motion, and gtreeldr to walkall target
	  for jam.
	- res changed csStringArray::CaseSensitiveCompareKey() and
	  CaseInsensitiveCompareKey() to not treat the key parameter as a
	  pointer to a string, but a string itself.
	- Anders Stenberg made sure all loaded shaders get prepared at
	  iEngine::Prepare ()
	- Eric Sunshine made the following changes:
	    - Augmented configure.ac so that pthread check uses -pthread at
	      link time (not just compile time).  If that fails, then it will
	      manually attempt to link against libc_r.a.  This should allow
	      pthread checking and utilization to work correctly on FreeBSD.
	    - Augmented Python, OpenAL, and mikmod checks in configure.ac so
	      that they utilizes results of pthread check.  Needed for FreeBSD.
	    - Augmented OpenAL check in configure.ac so that it also consults
	      /usr/local since this is not done automatically on FreeBSD.
	    - Rewrote the SDL check in configure.ac so that it employs
	      sdl-config rather than trying manually to guess appropriate
	      build flags.  This eliminates the problem where it assumed that
	      SDL headers existed in a directory named "SDL", which was
	      incorrect for at least some installations (where the header
	      directory might be named "SDL11", for instance).
	    - Fixed bug: Unix and MacOS/X makefiles were not respecting LDFLAGS
	      passed by user to configure script.
	    - Enabled SDL canvas in Jam build (if SDL available).  Previously,
	      this was unconditionally disabled, but it works now that
	      configure emits the proper SDL build flags.
	    - Fixed compilation errors in SDL canvas.
	- Oktal moved bfdplugins.cpp from cssys/general to cssys/unix, and
	  modified cssys/Jamfile and unix.jam so that external projects making
	  use of the CS Jam build system won't have BFD storing metadata in
	  their plugins unless they specifically ask for it in their own
	  project Jamfiles.
	- Oktal added BFD metadata storage functionality to the GNU make build
	  system.
	- Oktal updated fonteng.cpp in the PicoGUI server plugin to keep up-to-
	  date with changes to the CS iFont interface.
	- res made the following changes:
	    - The DS3D plugin passed some parameters as csRef<>s. Changed to
	      just pointers.
	    - Changed the DS3D coop level to 'priority'. That's the highest in
	      DX8+ anyway, and is a bit 'nicer' than 'exclusive' for older
	      DirectXs.
	    - Thing's SLM layouting strategy has been changed; now, the
	      factory does the layouting once, and the mesh objects reuse the
	      layout.
	    - Moved SLM dumping from Thing to renderer.
	    - Enhanced bugplug's "debug command" feature; it now accepts
	      a tag as a target name as well.
	    - Changed non-PO2 resizing of the renderers: instead of blindly
	      scaling up(GL) resp. down(SW), the direction with the least
	      quality loss is guestimated and chosen. Also, both renderers
	      share that code; it's important that non-PO2 textures are resized
	      to the same dimensions on all renderers, otherwise lightmapping
	      won't work correctly across renderers.
	    - Some NR plugins still had "render3d." in their class IDs; changed
	      them to "graphics3d."
	    - Lightmaps can now be transfered to glrender3d.
	    - Typo fix in glfontcache.h.
	    - Changed csHash<>::GlobalIterator so that it's actually useable.
	    - Fixed VFS crashes: in csArchive, an array was a PDelArray<>,
	      however, items were removed from this array and inserted into
	      other arrays. The deletion of the data in the process caused
	      trouble.
	- res fixed some makefiles to allow compilation from non-source root
	  directories.
	- res fixed the glrender3d Jamfile to link against the "render3d
	  common" stuff.
26-Aug-2003
        - Philip Wyett eliminated warning suggesting adding parentheses
          around truth value in csGLShaderFFP::LoadLayer (...);.
25-Aug-2003
	- Jorrit moved GlyphMetrics and BitmapMetrics out of iFont and
	  added 'cs' in front of them. The reason is that SWIG seems to have
	  problems with the embedded structures.
	- Eric Sunshine fixed bug in bfdplugins.cpp.  csGetPluginMetaData()
	  was leaking `buf' if errors occurred.
	- Jorrit added iBallState, iGeneralFactoryState, and iGeneralMeshState
	  to include/ivaria/cspace.i so the python plugin supports them.
	- Eric Sunshine upgraded Doxygen comments for cscmdPreProcess,
	  csProcess, cscmdPostProcess, or cscmdFinalProcess so that they
	  mention that CSMASK_FrameProcess is needed to receive these
	  pseudo-events.
	- Eric Sunshine upgraded the cal3d check in configure.ac so that it
	  checks for the very recent version required by CS.
	- Matze fixed a small bug in vfs so that it doesn't crash if vfs.cfg is
	  missing.
	- Eric Sunshine eliminated compilation warning from dynavis.cpp.
	- Eric Sunshine fixed csfgen so that it once again compiles following
	  Jorrit's change to iFont & BitmapMetrics.
	- Eric Sunshine fixed SDL check in configure.ac so that works correctly
	  for platforms on which SDL requires pthread.
	- Anders Stenberg did the following changes to the new renderer:
	    - Changed materials in to store textures in variables instead, and
	      updated to shader manager to fetch the textures as variables
	      instead of from the material directly. This allows to specify
	      textures at other scopes than the material.
	    - Updated the new renderer to give an example of the new
	      functionality by creating a "standardtex fog" fog lookup
	      texture in the shader manager scope. Note that we cannot yet
	      duplicate the old fog system though.
	    - Updated texture cache to use the CS_TEXTURE_NOMIPMAPS flag. This
	      should be done in a nicer way though.
	    - Updated texture handler to implement GetCanvas correctly for
	      textures.
	    - Removed "mtex" shader plugin and added "fixed" instead, which
	      contains a (slightly cleaned up) copy of mtex fragment program,
	      plus a fixed function vertex program. Currently it does nothing,
	      but will eventually have similar functionality as Quake 3
	      shader scripts.
	    - Updated all shaders to compy to the plugin changes.
	    - Fixed an error in the glshader_arb makefile.
	    - Made handling of mixing general and conventional attributes
	      ("attribute 3" vs "color") in shaders more safe. Note that
	      since some attribute aliasing properties are undefined in
	      the extension specification, shaders should preferably not mix.
	- Jorrit removed iPolygonTexture::RecalculateDynamicLights() and
	  DynamicLightsDirty(). They no longer need to be public as the
	  renderers no longer call them (thing calls this). This also means
	  the functions no longer have to be virtual and this is an
	  optimization.
	- Jorrit also avoided a few other virtual calls in csThing itself
	  by adding special none-virtual versions of normally virtual calls
	  (i.e. GetLightMapFast()).
	- Oktal added an overloaded SetLength() to csPDelArray which copies
	  the pointed-to object, not the pointer itsself, then converted all
	  csArray<csShaderVariable> instances in the new renderer shader
	  variable system to csPDelArray<csShaderVariable>.
	- Jorrit fixed a compile error in Oktal's latest csPDelArray change.
	- res added Jamfile and .csplugin files for glshader_fixed plugin.
24-Aug-2003
	- Luca added the CSTOOL library dependency to maya2spr makefile.
	- Luca reverted his latest commit because the cstool library is not
	  required by maya2spr.
	- Marten Svanfeldt commited a change to the cullers. Now
	  VisTest(iRenderView) takes an additional parameter, a callback to be
	  called for all visible objects. The visnr have also been made
	  internal to the culler (it is used to optimize culling). With the
	  current renderer/engine implementation this callback sets a number on
	  each mesh to be used when creating the rendering meshlist.
	- Oktal applied a patch to cssocket from Ladislav Foldyna:
	    - Adds an option called "loop" which controls whether multicast
	      packets are echoed back to the host which sent them.
	    - Adds ADD_MEMBERSHIP and DROP_MEMBERSHIP IGMP controls to the
	      sockets to make multicast work properly.
	    - Adds an overloaded function iNetworkConnection::Receive with
	      and extra output parameter, "from", which gives the packet's
	      originator's identifier, which makes multicast actually useful.
	- Marten Svanfeldt removed all traces of culling in new renderer/engine
	  for new renderer to make it compile with the above cullerchanges.
	  Note that it didn't work anyway. A new implementation is being
	  developed at the moment, but it will be a little while before it is
	  finished.
	- Oktal added stuff to the Jam build system that writes .csplugin data
	  into the headers of the plugins' shared object files themselves, on
	  platforms where configure detects libbfd and objcopy, which are both
	  parts of GNU bintools. And added code to cssys to read the .csplugin
	  data from the headers in order to locate SCF plugins.
	  This means no more ugly .csplugin files in the CS root directory on
	  most *nix systems.
	- Oktal added a couple of missing doxygen comments to hash.h and
	  make the csHash::Iterator and ::GlobalIterator copy constructors
	  public (bug found by res).
	- res made the following changes:
	    - Updated iFont to support Unicode characters. Also, glyph metrics
	      are now differentiated between glyph- and bitmap-specific
	      metrics. Glyph metrics are the same for mono and gray bitmaps,
	      but bitmap metrics aren't.
	    - Updated canvases (actually, font caches) for the iFont changes.
	    - Enhanced csfgen to output Unicode-enabled CSF fonts.
	    - Changed to built-in fonts to properly support Unicode.
	    - Enhanced the font multiplexer. Can multiplex on character level
	      and can be configured in which order fonts should asked for
	      glyphs.
	    - Added the GNOME fonts (Bitstream Vera families) and GNU Unifont
	      to the repository.
	    - Changed csHashMap::FindLargerPrime() to return the number passed
	      in if it's already a prime (and renamed the function to
	      FindNextPrime())
	    - csEvent constructs it's 'attributes' hash map a smaller size.
	      This should reduce it's memory requirements a bit.
	- res forgot to update makedep after removing the stdio aliases from
	  the Win32 port.
	- res made csHash<> a friend class of csHash<>:: Iterator and
	  GlobalIterator.
	- res fixed the GL font cache to properly display glyphs from mixed
	  font.
	- res updated csutil/hashmap.h. Oops.
	- res made the following changes:
	    - Fixed font caches to deal with font size changes.
	    - Added a FreeFont2 test to g2dtest.
	- res removed an 'unused variable' warning in the GL font cache.
	- res fixed the cssocket plugin. The recent changes added the use of
	  a IN_MULTICAST() macro. However, this macro is a WinSock2 addition.
	  Added a #definition for it (if not already present.)
22-Aug-2003
	- Oktal fixed a couple of typos in the Perl plugin, and fixed a bit of
	  const correctness in iScriptObject.
21-Aug-2003
	- Jorrit fixed a bug in the mesh-sphere intersection code (ODE). The
	  bug was that intersection with triangles used <0. But that means
	  something can slip between two triangles if you are unlucky. Fixed
	  this by using < SMALL_EPSILON instead. Also cleaned up the code a
	  lot.
	- Jorrit optimized ODE mesh-box intersection code using the polygon
	  tree.
	- Jorrit optimized ODE mesh-box and mesh-sphere by avoiding the
	  Normalize() on all polygon edges.
	- Jorrit did another optimization with ODE mesh-box and mesh-sphere
	  intersection routines.
	- Jorrit also optimized ODE mesh-cylinder and performed further
	  optimizations on the others.
        - Philip Wyett added test for PGSERVER.AVAILABLE to pgtest application
          Jamfile.
	- Oktal removed iMaterialHandle from the list of types that can be
	  stored by csShaderVariable, and changed the way in which it stores
	  csRGBpixel (the four int members are stored as floats in csVector4.)
	- Oktal added functions to iScriptObject to retrieve the pointer from
	  an object which stores only an interface pointer.
	- Oktal reversed the inheritance override order in csSymbolTable:
	  now parent tables' symbols override the children's symbols of the
	  same name.
	- Oktal added a GetSymbols() method with no parameters to csSymbolTable
	  which returns an array containing all the symbols in the table, and
	  fixed const correctness in the class.
	- Oktal added a GetChildren() method to csSymbolTable which returns
	  a copy of the array of child tables.
20-Aug-2003
	- Jorrit moved the engine sequence manager documentation out of
	  the xml format description. Also extended that documentation with
	  recent new features. This completes the documentation about
	  the engine sequence manager.
	- Jorrit made the bugplug hit code a tiny bit more efficient.
	- Jorrit added an howto with code explaining how to select objects
	  with the mouse.
	- Eric Sunshine fixed bug in csTypedObjectIterator where pure virtual
	  method GetRequestedInterface() was called by constructor.
	- Troy in odedynam: Fixed longstanding memory leak with float arrays.
	  Altered iDynamicSystem::CreateBody to prevent extra references from
	  being created (thanks to Eric Sunshine on this one).
	- Troy in ivaria/dynamics.h added comments to iDynamicSystem
	  'AttachCollider' methods so they appear in API docs.
	- Keith fixed sprcal3d for missing iLODControl and added a better
	  error message on missing name attribute in <animation> tag.
	- DeSigna changed all instances of type unsigned in the picogui plugin
	  to uint32.
	- DeSigna changed all instances of uint32 in the picogui plugin to
	  __u32.
19-Aug-2003
	- Jorrit fixed a bug in the new optimization in odedynamics where
	  the transform of the object was ignored.
	- Eric Sunshine fixed scfSharedLibrary constructor so that it invokes
	  csPrintLibraryError() if the plugin fails to load.  This error
	  reporting was accidentally dropped with all of the recent SCF
	  implementation changes.
	- res made the following changes:
	    - Removed the unmaintained and hardly used ddraw8 canvas plugin.
	    - Updated win32/csosdefs.h to provide the LONG_PTR type on older
	      Platform SDKs.
	- Troy in odedynam set limit of geoms array to 1 for rigidbodies
	- Oktal added iterators to csHash.
18-Aug-2003
	- Jorrit fixed a bug with destruction of hierarchical factories.
	  The problem was that it was trying to remove objects from
	  structures that were already destructed.
	- Jorrit fixed a bad bug in csRefArray::Pop(). If the array was
	  the only one keeping a reference then calling Pop() would
	  destroy the object before there was a chance of putting the
	  pointer in a csRef. Solved by adding csPtr<T> Pop() to the
	  csRefArray subclass (this overrides csArray::Pop()).
	- Jorrit changed genmesh so that a SetTriangleCount() will no longer
	  destroy the old triangles but instead it will copy the old triangles
	  into the new triangle array (with corrected size).
	- Jorrit added a new csPolygonTree class (which coincidently has
	  exactly the same name as an old csPolygonTree we had in the past).
	  This will basically be a simple kdtree for polygons that I plan
	  to use to do a HUGE optimization of the ODE mesh->ball and other
	  mesh related tests.
	- Jorrit added csPolygonTree::IntersectBox() and IntersectSphere().
	- Jorrit did a huge optimization to the mesh->sphere collision
	  detection code in odedynamics plugin by using the new csPolygonTree.
	  There is still a huge memory leak (the trees are not cleaned up yet)
	  and also there is a strange error:
		ODE Message 3: LCP internal error, s <= 0 (s=0.0000e+000)
	  But otherwise things look very normal. I got a speed increase from
	  1 fps to 150 fps :-)
	- Jorrit fixed the bug with the internal ODE error. The problem was
	  duplicate polygons in the polygon tree intersection routines.
	- Matze removed the pointer sized integer types as it is very hacky and
	  unnatural to do arithmetics with pointers. (I couldn't imagine a case
	  where this would make real sense)
	- res changed winthread.cpp to use _beginthreadex() instead of
	  _beginthread(). _beginthreadex() acts a bit more like CreateHandle().
	  However, it also requires a manual CloseHandle(), which is done
	  at destruction time. Thus, threads that don't run any more should be
	  destructed as soon as possible.
	- Troy in odedynam, added DestroyGeoms() to RigidBody and
	  DynamicSystem destructors.  Allows rigidbodies to be removed from
	  system w/out crashing ODE.  Also added call to delete polytree,
          taking care of memory leak from polytree optimization.
17-Aug-2003
	- Jorrit fixed a bug in csIntersect3::IntersectTriangle(). In
	  some cases it would fail to register a hit.
	- Eric Sunshine moved an MSVC6 specialization (added by Boyan) out of
	  csutil/array.h and into cssys/win32/csosdefs.h where it belongs.
	- Eric Sunshine fixed compilation erorr in shadervar.cpp.
	- Eric Sunshine eliminated compilation warning about unused variables
	  in glfontcache.cpp.
	- Eric Sunshine fixed glosx2d makefile and Jamfile so that the plugin
	  now links against csgeom.  This is necessary as a result of recent
	  changes (probably the recent work on the font caching machinery).
	- Troy in odedynam.cpp removed call to dGeomSetBody in
	  AttachColliderPlane to prevent 'non-placeable geom' error.
	- Eric Sunshine fixed csutil/symtable.cpp so that it compiles under
	  gcc 2.95.  Problem was that 'values.Push(s ? s->Val : 0)' was
	  considered ambiguous.  Reported by Michael Herder.
16-Aug-2003
	- Jorrit added more features with references to parts of the
	  documentation.
	- Jorrit started some documentation about the engine sequence
	  manager.
15-Aug-2003
	- Jorrit did some documentation fixes on the new lod section.
	- Jorrit added support for <nullmesh> in factories too.
	- Jorrit fixed the lod formula for calculating m and a from d0 and
	  d1. Both in the documentation as in the code.
	- Jorrit fixed a bug in the static lod code.
	- Jorrit disabled the assembly routines in Dynavis on linux.
	  They don't appear to work (crash).
	- Troy in dynamics.h added brief comments to iRigidBody
	  AttachCollider methods to allow them to appear in API docs.
	- res improved 'detection' of what font cache has to be used for
	  software canvases.
	- res made the following changes:
	    - WriteString() now wraps WriteStringBaseline() on all canvas.
	    - The surrogate check macros in cssys/csunicode.h didn't honor
	      that characters can get wider than 16 bits.
	- Jorrit added the following commands to walktest console:
	    - varlist: list all variables currently defined in the engine and
	      their values.
	    - var: show one variable value.
	    - setvar: set a floating point value to a variable.
	    - setvarc: set a color value to a variable.
	    - setvarv: set a vector value to a variable.
	- res fixed the missing SetLimit() compile error in
	  apps/demosky/demosky.cpp.
	- res added dummies for the new LOD functions to
	  csIsoMeshFactoryWrapper.
	- res fixed compile errors on MSVC6 related to the new font caches.
	- Oktal removed iShaderVariable and moved csShaderVariable from
	  the new renderer plugin to the csgfx API, thus getting rid of
	  unneccessary virtual calls from it by making everyone access
	  them directly through csShaderVariable.
	  Then added more types for csShaderVariable to store:
	  iMaterialHandle, iTextureHandle, csVector2, csRGBpixel.
14-Aug-2003
	- Jorrit added iSharedVariableListener. With this interface you can
	  listen to a variable and get notified when its value changes.
	  Using iSharedVariable->AddListener() you can add listeners.
	- Jorrit added the ability to set LOD in iLODControl using variables
	  instead of constants.
	- Jorrit added references to other parts of the documentation for
	  most features mentioned in the feature list. That way the
	  feature list is a good starting point to find out how to do
	  something.
	- Troy altered csODERigidBody class altered to use 'spaces' instead
	  of geom groups. (geom groups are deprecated in ode now).  This
	  corrects problem with non-placeable geom error messages from debug
	  build of ode.
	- Matze fixed long standing bug in opengl renderer. It was incorrectly
	  scaling the screen rectangle for pixmaps which aren't po2.
	- Matze changed opengl texture manager to scale up instead of scaling
	  down when fixing non-po2 textures.
	- res removed the printf() & siblings aliasing from Win32 csosdefs.h.
	  Instead, csPrintf() now care about proper UTF-8 output.
	- Troy in odedynam, altered NearCallBack to set slip1 and slip2 to
	  SMALL_EPSILON.  slip1 & 2 are for simulating lateral car tire skid.
	  This inhibits this behaviour.  Better (todo) will be to expose it
	  similar to softness.
	- Troy in physldr.cpp added softness parameter to ParseCollider &
	  ParseSystemColliderMesh.  Will add softness to remaining colliders
	  when i get tests built for them.
	- Jorrit added documentation about static lod.
	- res made the following changes wrt graphical text output:
	    - Started to work on a font cache for "software" canvases.
	    - Added anti-aliased text output to them.
	    - In general, the text writing logic has moved to the font caches.
	    - Fixed corruption of AA'ed glyphs with OpenGL canvases.
	- res replaced in wintools.cpp the usage of 'swprintf()', which
	  cygwin doesn't have, with 'wsprintfW()' from the Win32 API.
	- res fixed wintools.cpp so it compiles on VC again.
13-Aug-2003
	- res renamed the rlloader, rlsstd and rlsstencil plugins to less
	  cryptic rendloop_loader, rendstep_std and rendstep_stencil.
	  Don't forget to delete the old rl* plugin binaries.
	- Jorrit added the ability to define static lod for a hierarchical
	  mesh factory too. Using the same syntax. Using <meshref> or
	  iMeshFactoryWrapper->CreateMeshWrapper() you can create a
	  hierarchical mesh object that inherits the lod attributes
	  from the factory.
	- Jorrit added the ability to use <lodlevel> and <staticlod> for
	  factories too. Forgot that in the previous commit.
	- Jorrit added the ability to also set LOD distance with the following
	  notation:
	      <distance d0="..." d1="..." />
	  Internally this will still compute the 'm' and 'a' values. The
	  meaning of 'd0' is the distance at which lod will be 0 (lowest
	  detail possible) and 'd1' is the distance at which lod will be 1
	  (highest detail possible).
	- Matze fixed csArray::Iterator. The code was always assuming default
	  ElementHandler.
	- DeSigna made the following changes:
	    - Fixed pgserver plugin to compile ok on Linux.  There may still be
	      library problems, depending on pgserver build config.
	    - Fixed segfaulting problems at pgui plugin unloading (temp fix).
	    - Patched in changes suggested by Dentoid to increase frame update
	      speed.
	- res fixed the crash bug when using '-mode' cmdline parameter with
	  GL canvases.
12-Aug-2003
	- Jorrit fixed a compile error in the OpenGL Windows canvas after the
	  changes from res yesterday.
	- Jorrit fixed nullmesh so that the bounding box returned is actually
	  the box given to it and not calculated from the radius.
	- Jorrit fixed a bug in thing->GetPortalPolygon(). It would not
	  call Prepare() with the result that you could get crashes if
	  that function was called before the thing was ever rendered.
	- Jorrit added csArray::GetExtend(). This is the same as Get() except
	  that it will automatically grow the array if it is not big enough
	  to get the item.
	- Jorrit fixed a bug in the software renderer introduced yesterday. The
	  problem was that the DrawTriangleMesh implementation uses Get() and
	  assumed that the array would grow automatically.
	- Jorrit fixed another equivalent bug in DrawPolygonMesh for the
	  software renderer.
	- Jorrit added the <nullmesh> keyword in the parser. This is a short-cut
	  to create a null mesh. Use it like this:
	    <nullmesh>
	        <min x="12.8" y="-1" z="11" />
		<max x="13.2" y="3" z="13" />
	    </nullmesh>
	  A null mesh is a mesh that is not visible. It is useful as a place
	  holder in a hierarchical mesh.
	- Jorrit completed implementation of static lod in the engine.
	  To use this you basically create a hierarchical mesh object with
	  the parent mesh using the null mesh (i.e. with 'nullmesh'). Here
	  is a pseudo-example:
		<meshobj name="lodobject">
		  <nullmesh>
		    <min x="12.8" y="-1" z="11" />
		    <max x="13.2" y="3" z="13" />
		  </nullmesh>
		  <staticlod>
		    <distance m="-.01" a=".7" />
		  </staticlod>
		  <meshobj name="lowdetail">
		    <lodlevel>0</lodlevel>
		    ...
		  </meshobj>
		  <meshobj name="mediumdetail">
		    <lodlevel>1</lodlevel>
		    ...
		  </meshobj>
		  <meshobj name="highdetail">
		    <lodlevel>2</lodlevel>
		    ...
		  </meshobj>
		</meshobj>
	  One of the important new keywords is <staticlod> which you use in the
	  parent mesh to indicate that this mesh is only going to render
	  the children that are in the right lod level. The other new
	  keyword is <lodlevel> which you use in the children to indicate
	  to which lod level they go. You can place multiple objects in the
	  same lod level. By doing that you can replace an entire forest
	  of trees with a single object.
	  The definition of the nullmesh is important. The bounding box
	  should be larger then all objects that are inside it.
	- DeSigna made SCF emit a proper diagnostic error message when
	  it cannot load a library, not just on symbol-loading
	  errors. Tested on Linux.
	- Jorrit fixed a bug in csMeshWrapper::GetSquaredDistance() (which
	  was previously in CheckImposterRelevant()). It would not calculate
	  the distance correctly as it was basing itself on a world space
	  bbox.
	- Jorrit removed unneeded SCF_QUERY_INTERFACE for iPolygonMesh
	  from odedynamics plugin.
	- res added the new fontcache.* files to the list of "common canvas
	  sources" in plugins/video/canvas/canvas.mak, fixing runtime errors
	  of GL plugins.
	- Jorrit fixed the glrender3d jamfile to also link with cstool.
	- res worked around compile problems in the fullscreen quad render
	  step.
	- Jorrit renamed iRender3D to iGraphics3D for the new renderer.
	- Jorrit removed a few ifdef's related to iRender3D vs iGraphics3D.
	- Jorrit removed all direct includes of ivideo/render3d.h. Please
	  use ivideo/graph3d.h instead. Keep in mind that ivideo/render3d.h
	  is going to be removed and merged back with igraph3d.h in the
	  (near?) future.
11-Aug-2003
        - Philip Wyett changed #include "cal3d/cal3d" to
          #include <cal3d/cal3d.h> and dropped below other includes fixing
          all the makedep warnings.
        - Philip Wyett removed caltocs due to lack of general support
          and maintenance.
	- Jorrit added csGrowingArray::TransferTo().
	- Jorrit removed all usages of csStaticArray (only in thing and
	  bezier meshes). Instead they are now using csGrowingArray.
	  Also removed the actual csStaticArray class.
	- Jorrit changed csGrowingArray to inherit from csArray.
	- Jorrit changed engine to use csArray instead of csGrowingArray for
	  the render priorities.
	- Keith Fulton enabled new feature in sprcal3d.  It now keeps the
	  iMaterialWrapper for each submesh in the model's calCoreMaterialId
	  member.  cal3d never uses these values, so it is ok.  This enables
	  the model to specify and use multiple materials (assigned
	  independently to each mesh).
	- Jorrit added csGrowingArray::GetArrayCopy().
	- Jorrit removed csIntArray and replaced the usage of it with
	  csGrowingArray<int> (in mdltool.cpp). Also fixed a big bug in
	  that code. It was taking the address of the array and after that
	  simply deleting the array.
	- Jorrit removed the usage of csBitSet in the engine for the new
	  renderer. When the number of bits is not too high (as is the case
	  for render priorities) one should simply use an array of bool
	  instead of csBitSet. This is a lot more efficient.
	- Jorrit similarly replaced csBitSet with csArray<bool> in csinput.h.
	- Jorrit removed csBitSet since nothing is now using it. If you really
	  need a bit array then use csBitArray instead.
	- Jorrit renamed csGrowingArray to csDirtyAccessArray.
	- Jorrit updated the documentation with regards to the csGrowingArray
	  change.
	- Jorrit fixed a bug in the csTypedObjectIterator class. It would
	  often return 0 in the Next() method even if there were more objects.
	- res made the following changes:
	    - Leak fixes. After the recent array changes, csStringArray
	      allocates a copy of a Push()ed string. However, in some places
	      was still code like "stringarray.Push (csStrNew (string));",
	      causing leaks.
	    - More leak fixed. After the recent changes to the event system
	      (event queue IncRef()s events), in some places code like
	      "eventqueue.Push (new csEvent ());" wasn't updated, causing
	      leaks.
	    - Fixed a bug in the UTF transformer that caused the last char to
	      be cut off.
	    - Typo fix in csunicode.h.
	    - Win32 port won't try to change the console codepage to UTF-8
	      anymore. Problem with the UTF-8 codepage is that it requires
	      a "TrueType" console font, but default is "Raster".
	    - The yellow warning boxes used to display a trailing '\n'
	      character (appearing as a small note when using csfont font
	      server.)
	    - Tweaked csSubRectangles2 a bit more.
	    - Updated documentation in reporter.h.
	    - csReport() prints "WARNING: " etc. in front of messages if
	      falling back to the console.
	    - Added a new, almost-from-scratch font cache, currently only for
	      OpenGL. Instead just putting all glyphs of a font onto a texture
	      (not that practical when fonts with a wider range of supported
	      Unicode glyphs are used), the new system is more "cache-like"
	      and dynamically adds glyph images to the texture and removes
	      the least recently used glyphs when the max. allowed space
	      doesn't suffice when a new glyph is to be added.
10-Aug-2003
	- Peter Amstutz added a check to "scan.cpp" of the software
	  renderer so that it would not defer a null pointer (and hence crash)
	  when rendering polygons that have a null lightmap.
	- Keith Fulton committed 2 more fixes to maya2spr for very simple
	  sprites.
	- Eric Sunshine made the following changes:
	    - Fixed bug: csArray::DefaultCompareKey() was comparing a void*
	      against a T (the type with which the template was instantiated).
	      Clearly, this was bogus.
	    - Fixed bug: csStringArray::FindSortedKey() was not supplying a
	      meaningful default comparison function.  It was just comparing
	      based upon the address in memory at which the string was stored.
	      Now, by default, it compares via strcmp(), though this can be
	      overriden by the caller.
	- Jorrit started work on static lod. Not functional yet.
	- Jorrit removed Section() out of the private part of csPDelArray.
	  As Eric points out, csArray::Section() is perfectly safe for
	  csPDelArray because it returns a csArray and not another
	  csPDelArray.
        - Philip Wyett changed sprcal3d plugin to link with cal3d lib and
          not the ode lib under MSVC as it was previously.
        - Philip Wyett add sprcal3d and it's loader plugin(s), to default
          MSVC build - required.mak.
9-Aug-2003
        - Philip Wyett moved int j out of 'for' loop within
          csSpriteCal3DMeshObject::DetachCoreMesh () and fixed compile error.
          Also for the second time changed instances of NULL for 0!
        - Philip Wyett changed some executable names to match their target
          name under the make build and MSVC. Jam build did not require these
          changes as it is correct already. 'perl5tst' is now 'perl5test' and
          'netmntst' is now 'netmantest'. Also made these changes in CS/ root
          .cvsignore and also added 'partedit' and 'uninst'.
        - Philip Wyett removed 'testapp', which jorrit added by accident in a
          large recent commit.
8-Aug-2003
        - Philip Wyett changed instances of NULL for 0 in sprcal3d plugins.
            - Added 3ds2lev and makedep to CS/ root .cvsignore.
            - Changed instances of NULL to 0 in fullquad.cpp.
	- Jorrit added another initializer to csArray copy constructor.
	- Jorrit fixed a compile problem in csdemo that only occurs on
	  some older versions of gcc.
	- Eric Sunshine moved definition of csSkinSlice above csSkin in
	  csskin.h so that csSkinSlice in known before it is used in template
	  instantiation.
	- Jorrit greatly simplified iLODControl. Removed all functions
	  that were not used anyway. Changed SetLOD() to set a distance
	  based function.
	- Jorrit also modified the loader to accept new <distance> keyword.
	  So you can now say in a mesh object:
	      <lod>
	          <distance m="-.025" a="1"/>
	      </lod>
	  The 'm' and 'a' values are used in the function:
	  	lod = m*distance+a
	  The result is capped to [0,1]. 0 is worst quality, 1 is best.
	  So in this case it means that if the object is (for example)
	  10 units away then lod will be equal to 1.25 (or 1 capped which
	  means highest quality). If the object is 30 units away then lod will
	  be equal to 0.25.
	- Jorrit changed the 3D sprite plugin to actually support these lod
	  settings now. So it is now possible to control lod for a sprite
	  based on distance. This is not very flexible yet. In future a lod
	  manager will be added for increased flexibility (i.e. basing lod
	  levels on hardware capabilities and desired speed).
	- Keith Fulton added cal3d submesh attach and detach to viewmesh.
	  Enhanced sprcal3d object and factory to enumerate submeshes,
	  name them, attach certain ones by default on instance creation,
	  and update CS render objects as they are created and deleted.
	- Keith Fulton added csMenu->GetCheck() to allow the calling
	  application to determine what menu items are currently checked
	  and not checked.
	- Eric Sunshine resolved circular forward-reference problems between
	  awsListRow and awsListRowVector which arose following migration to
	  csArray<>.
	- Jorrit changed csStringArray<char*,...> to
	  csStringArray<const char*,...>.
	- Jorrit made copy constructor, assignment operator and Section()
	  in csPDelArray private so that people cannot mistakenly use those.
	- res further worked on NR materials & shader variables. Changes
	  include:
	    - Creation of material handles from texture handles fixed.
	    - Added a generic implementation for iShaderBranch.
	    - Enhanced the default shader variable implementation so "casting"
	      takes place. E.g. you can set the value as a single float, but
	      requesting a Vector3 will work (in this case, all components
	      have the same value.)
7-Aug-2003
	- Jorrit did the following array related changes:
	    - Added Put() to csArray.
	    - Added a protected csArray::InitRegion(). This function will
	      re-initialize a region in the array WITHOUT properly destructing
	      the previous contents! This is needed by some subclasses (like
	      csPDelArray) in order to implement GetAndClear() and Extract().
	    - csArray now has a second template argument to specify an
	      ElementHandler. That way you can use csArray with specialized
	      item constructors and destructors. By default csArray will
	      still work as before.
	    - Made csPDelArray a subclass of csArray using a specialized
	      element handler.
	    - Re-implemented csRefArray as a subclass of csArray. Instead of
	      being defined as csArray<csRef<T> > it is now defined as
	      csArray<T*, csRefArrayElementHandler<T*> >. The element handler
	      will now do IncRef() and DecRef(). This is more efficient
	      then letting csRef do it as csRef does some additional and
	      unneeded tests.
	- Jorrit changed csRef<iImage> to iImage* in the arguments to
	  iImageVector. Additionally changed the csRef<iImage>& return
	  to csRef<iImage>.
	- Keith added some new enhancements to the cal3d wrapper and viewer.
	  viewmesh now divides cal3d animations by looping and non-looping
	  types, and dynamically updates the list of animations to remove
	  from the blend set.
	- Jorrit also changed csStringArray to inherit from csArray by
	  using csArray<char*, csStringArrayElementHandler> as superclass.
	  There is one problem which I couldn't solve yet. For some reason,
	  functions like Put and Push don't accept const char* pointers.
	  So you have to cast to (char*) to use Put and Push. Solutions
	  to this would be welcome. I don't understand why it doesn't work
	  as csArray::Push() is declared as follows:
		int Push (T const& what)
	  with T equal to char*. Sidenote: changing the Push() to this:
		int Push (const T& what)
	  didn't help.
	- Jorrit merged csArrayBase with csArray so that only csArray
	  remains.
	- Jorrit fixed a compile error in viewmesh with the array changes.
	- Jorrit fixed a compile error in freefnt2 with the array changes.
	- Fixed a bad bug in the copy constructor of csArray. It would not
	  initialize capacity to 0 which could cause very bad results
	  and crashes in CS.
	- res started to change NR materials to store parameters (e.g. diffuse
	  value) in shader variables.
6-Aug-2003
	- Jorrit fixed a compile error in freefnt2 font server related to the
	  csRefArray->csArray change.
	- Eric Sunshine patched mk/install.mak to ensure that the `uninst'
	  object file directory exists at "make install" time.
	- res updated the new renderer to respect the recent array changes.
5-Aug-2003
	- Jorrit fixed metaball.mak. Was missing a CSUTIL dependency after
	  CSSYS.
	- Jorrit fixed makefiles for GIF and PNG image loaders.
	- Jorrit fixed makefile for BMP image loader.
        - Boyan fixed errors in broadcasting in iNetworkSocket2.
	- Jorrit made the following array change: There is now an element
	  handler defined for every array class (csArray, csPDelArray,
	  csRefArray, and csStringArray). This element handler contains
	  three static functions, one to create elements, one to destroy
	  elements, and one to initialize a new region of memory.
	  csArrayBase is given an additional parameter in the template
	  section to indicate this element class and will use that to create
	  and destroy elements. By doing this I managed to move the following
	  functions to csArrayBase:
	      - DeleteAll()
	      - Truncate()
	      - Empty()
	      - SetLength()
	      - TransferTo()
	      - SetCapacity()
	      - ShrinkBestFit()
	      - DeleteIndex()
	      - DeleteRange()
	      - Delete()
	  Thusly a lot of duplicate code got removed. I plan to move a lot
	  more to csArrayBase so that the sub-classes of csArrayBase will
	  contain only the really different functionality.
	- Keith Fulton added support for animation action wrappers in cal3d
	  plugin and augmented viewmesh to allow user to set/clear/blend
	  both anim cycles and anim actions.  With a nicer GUI, viewmesh
	  would now come close to duplicating the functionality of the
	  "official" cal3d cally demo.
	- Jorrit did more array changes:
	    - Moved code of copy constructors to csArrayBase. Needed to
	      complete the 'Construct' methods for all element handlers.
	    - Added various assignment operators using the same new code.
	    - Moved destructor (DeleteAll() call) to csArrayBase.
	- Jorrit optimized csRefArray considerably. Still slower than
	  csArray<csRef<T> > though so we will probably ditch csRefArray
	  in favor of the latter. Most likely csRefArray will remain as
	  a subclass of csArray<csRef<T> > in order to provide a more efficient
	  Push(T*) that avoids the extra IncRef() that happens with
	  csArray<csRef<T> >.
	- Jorrit made csRefArray a subclass of csArray (using
	  csArray<csRef<T> >). This greatly cleans up a lot of code and
	  also improves speed.
	- res further worked on the Jam msvcgen. Now, metadata is added to the
	  generated .rc file as well.
	- res worked around the makedep compile problems on MinGW: in case a
	  "CS_NO_STDIO_REPLACEMENTS" macro is defined, Win32 csosdefs.h won't
	  so the stdio aliasing alias.
	- res updated some comments in the bindoc plugin and removed some
	  leftover debug stuff.
	- res added <cs-config> tags around the UPCASE make macro(or how is
	  it called?)
	- res made the following changes:
	    - Removed some leftover super LM code from the old GL renderer.
	    - In the Thing SLM stuff some arrays of structs were replaced
	      with arrays of pointers to resp. structs to avoid some
	      unnecessary copying of data.
	    - Fixed some problems in csSubRectangles2 rectangle allocation
	      that caused problems when reclaiming allocated rectangle
	      space.
	    - Added a small debug aid to csBlockAllocator: a #define at
	      compile time causes freed objects to be overwritten with a
	      certain byte value.
4-Aug-2003
	- Oktal added the following to csutil:
	    - A template class, csHash<T>, intended to replace csHashMap soon.
	      It is 1 to 3 times faster than csHashMap, depending on the data.
	      It currently lacks an iterator companion class, but that will be
	      easy to add, and the GetAll() function provides much of that
	      functionality already.
	    - A csTree<T> class, which is a binary tree.
	    - In csArray, csPDelArray and csRefArray, added default sorting
	      callbacks DefaultCompare, DefaultCompareKey and DefaultSort.
	- Anders Stenberg changed pico plugin to use pico's internal
	  framebuffer drawing. Now pico handles all drawing (to a
	  memory framebuffer), and CS just relays this to the real
	  framebuffer. This means we get perfect(?) output, although no
	  acceleration from CS. This could/should be upgraded later.
        - Philip Wyett added sprcal3d and it's loader to 'user.mak'. Also
          made both these and the jam builds test for 'HAS_CAL3D' to
          ensure that they are only compiled on systems where configure
          has detected libcal3d etc.
            - Added newline to end of 'plugins/csparser/prstex.cpp'.
            - Added 'ODE.AVAILABLE' test to physics loader plugin jamfile.
              This brings it into line with make build. There is no need for
              it's loader, if the odedynam plugin isn't being built.
            - Manually updated cs_pyth.cpp and cspace.py after recent
              changes.
	- Jorrit added a new csArrayBase<T> class. This class will handle
	  (when it is fully ready) all common tasks of all array classes
	  (csArray, csPDelArray, csRefArray, csGrowingArray, csStringArray,
	  ...). Currently only a few common tasks are handled and only
	  csArray and csPDelArray inherit from csArrayBase.
	  Inheritance of csArrayBase is private so that subclasses of
	  csArray and others cannot get access to the protected members.
	  In order to let users of csArray and others access the public
	  members of csArrayBase the C++ 'using' keyword is used to transfer
	  some of the public members as public members of the array classes.
	  Work in progress...
	- Jorrit did the following array related changes:
	    - csRefArray now also inherits from csArrayBase.
	    - Moved Find() to csArrayBase.
	    - Added Truncate() to csRefArray and csPDelArray.
	    - csStringArray now also inherits from csArrayBase.
	- Jorrit removed the recently added DefaultSortCompare() from csArray.
	  The default implementation provided there made no sense (i.e.
	  casting the offset in the array to integer
	  will do exactly nothing) and there is no other sensible default
	  sorting that can be used for csArray in general.
	- Jorrit also removed DefaultSortCompare() for csPDelArray. Doesn't
	  make sense to sort pointers.
	- Jorrit also removed DefaultCompare() and DefaultCompareKey for
	  csPDelArray. Doesn't make sense to compare pointers.
	- Jorrit removed all DefaultCompare() functions from csRefArray.
	  Doesn't make sense to compare pointers.
	- Jorrit moved Sort() implementations to csArrayBase. Only
	  csRefArray has its own implementation.
	- Jorrit added csArray::Empty() to csRefArray, csPDelArray, and
	  csStringArray.
	- Jorrit moved const Get() and [] operator implementations to
	  csArrayBase.
	- Eric Sunshine reverted Paul Garceau's CS_WCHAR_T_SIZE-related hack
	  to csunicode.h which was addressing the symptom rather than the
	  cause.  We need to determine the actual problem (if there is one),
	  and instead address that.
3-Aug-2003
	- Paul G. implemented a very nasty (and hopefully very temporary) hack
	  for csunicode.h to define CS_WCHAR_T_SIZE appropriately for
	  Win32/COMP_GCC platform (Mingw).
	- Jorrit removed iAwsParmList->AddBasicVector() and GetBasicVector().
	  These functions were not used in CS and I think they are not safe
	  (i.e. should use SCF parameter and not csBasicVector). And
	  csBasicVector is being removed.
	- Jorrit replaced pointer to sink inside SinkMap (for awsSinkManager)
	  with a csRef to do proper ref counting.
	- Jorrit replaced pointer to slot inside SinkSignalMap (for
	  awsSinkManager) with a csRef to do proper ref counting.
	- Jorrit replaced pointer to sink inside SignalTriggerMap (for
	  awsSinkManager) with a csRef to do proper ref counting.
	- Jorrit replaced various occurrences of csBasicVector:
	    - Replaced 'awsParmsList' in aws with a csPDelArray<parmItem>.
	    - Replaced 'transitions' in awsManager with a
	      csArray<awsWindowTransition*>.
	    - Replaced 'hotspots' in awsListBox with a
	      csPDelArray<awsListHotSpot>.
	    - Replaced 'constants' in awsPrefManager with a
	      csPDelArray<constant_entry>.
	    - Replaced 'actions' in awsActionDispatcher with a
	      csArray<awsActionMap*>.
	    - Replaced 'sinks' in awsSinkManager with a csPDelArray<SinkMak>.
	    - Replaced 'triggers' in awsSinkManager with a
	      csPDelArray<TriggerMap>.
	    - Replaced 'slots' in awsSinkManager with a
	      csPDelArray<SlotSignalMap>.
	    - Replaced 'stmap' in awsSinkManager with a
	      csPDelArray<SignalTriggerMap>.
	    - Replaced 'textures' in awsTextureManager with a
	      csPDelArray<awsTexture>.
	    - Replaced 'lights' in csIsoGrid with a csRefArray<iIsoLight>.
	    - Replaced 'dynamiclights' in csIsoGrid with a
	      csRefArray<iIsoLight>.
	    - Replaced 'Edges' in Cloth with a csPDelArray<Constraint>.
	    - Replaced 'fields' in Cloth with a csPDelArray<Constraint>.
	    - Replaced 'Shear_Neighbours' in Cloth with a
	      csPDelArray<Constraint>.
	    - Replaced 'shear_fields' in Cloth with a csPDelArray<Constraint>.
	- Jorrit fixed a bug in awsSinkManager::RemoveSink(). That function
	  was trying to find an iAwsSink inside the sinks basic vector but
	  that vector only contains SinkMap instances.
	- Jorrit replaced csRGBVector with csArray<csRGBcolor>.
	- Jorrit replaced awsListRowVector with csPDelArray<awsListRow>.
	- Jorrit removed all includes from csvector.h from all CS sources.
	- Jorrit added csArray::Sort().
	- Jorrit finally removed csVector and csBasicVector.
	- Jorrit replaced a lot of 'if (bla) delete bla' with 'delete bla'.
	  C++ guarantees that 'delete' will check on null pointer so there is
	  no need to add another test.
	- Luca replaced some call to Delete (int) (which no longer exists)
	  with DeleteIndex (int) in the source code of the csSoundRenderDS3D
	  class.
	- Eric Sunshine fixed compilation problems with partedit on MacOS/X.
	- Anders Stenberg & Oktal did various changes and fixes to the pico
	  plugin. It still shouldn't and can't be used, since it pretty much
	  doesn't work at all. Something resembling almost sensible output
	  should now be possible to achieve though.
	- Anders Stenberg added better pixel format handling in csGraphics3D,
	  since it was needed for the abuse pgserver puts it through.
	- Paul G. modified Win32 platform macro definitions to be more
	  readable without changing macro functionality.
	    - CS_IMPLEMENT_PLATFORM_APPLICATION
	    - CS_IMPLEMENT_PLATFORM_PLUGIN
2-Aug-2003
	- Jorrit renamed csPDelArray::Delete(int) to DeleteIndex() to conform
	  more to the API used by csArray.
	- Jorrit renamed csRefArray::Delete(int) to DeleteIndex() to conform
	  more to the API used by csArray.
	- Jorrit renamed csStringArray::Delete(int) to DeleteIndex() to conform
	  more to the API used by csArray.
	- Jorrit renamed csGrowingArray::Delete(int) to DeleteIndex() to
	  conform more to the API used by csArray.
	- Jorrit modified the api documentation to reflect the pending removal
	  of csVector and csBasicVector. Also explained how to do most common
	  transitions.
	- Jorrit replaced various occurrences of csVector:
	    - Replaced 'csLoadedPluginVector' in the isometric loader with
	      a csPDelArray<csLoaderPluginRec>.
	    - Replaced 'animVector' in spr2d with a
	      csArray<csSprite2DUVAnimation*>.
	    - Replaced 'frameVector' in spr2d with a
	      csArray<csSprite2DUVAnimationFrame*>.
	    - Commented out 'pal_colors' in terrbig because it is not used.
	    - Replaced 'polygons' in thing with a csArray<csPolygon3D*>.
	    - Replaced 'static_polygons' in thing with a
	      csArray<csPolygon3DStatic*>.
	    - Replaced 'soVector' in arts renderer with a
	      csPDelArray<csArtsHandle>.
	    - Replaced 'ActiveSources' in eax renderer with a
	      csArray<csSoundSourceEAX*>.
	    - Replaced 'SoundHandles' in eax renderer with a
	      csArray<csSoundHandleEAX*>.
	    - Replaced 'Sources' in sound software renderer with a
	      csArray<csSoundSourceSoftware*>.
	    - Replaced 'SoundHandles' in sound software renderer with a
	      csArray<csSoundHandleSoftware*>.
	    - Replaced 'GLGlyphVector' in OpenGL canvases with a
	      csPDelArray<GLGlyphSet>.
	    - Replaced 'vStream' in csavi plugin with csRefArray<iStream>.
	    - Replaced 'StreamIdx' in csavi plugin with csArray<indexentry*>.
	    - Replaced 'StreamList' in csavi plugin with
	      csPDelArray<StreamIdx>.
	- Jorrit replaced various occurrences of csVector:
	    - Replaced 'scfLibraryVector' in scf with
	      csPDelArray<scfSharedLibrary>.
	    - Replaced 'scfClassRegistry' in scf with csPDelArray<scfFactory>.
	- Jorrit replaced various occurrences of csVector:
	    - Replaced 'csHintManager' in csws with csArray<void*>.
	    - Replaced 'csAccVector' in csws with csPDelArray<csAccElement>.
	    - Replaced 'sequences' in csdemo with csPDelArray<NamedSequence>.
	    - Replaced 'paths' in csdemo with csPDelArray<csNamedPath>.
	    - Replaced 'pathForMesh' in csdemo with csPDelArray<PathForMesh>.
	    - Replaced 'meshRotation' in csdemo with csPDelArray<MeshRotation>.
	    - Replaced 'engine_views' in cswseng with csArray<ceEngineView*>.
	    - Replaced the CS_DECLARE_TYPED_VECTOR define in map2cs so that
	      it now uses csArray<T> instead of csVector.
	    - Replaced 'generic' in md32spr with csArray<md3Model*>.
	    - Replaced 'csTokenVector' in cs2xml with csPDelArray<csTokenDesc>.
	    - Replaced 'things' in levtool with csPDelArray<ltThing>.
	    - Replaced 'thing_nodes' in levtool with
	      csPDelArray<ltDocNodeWrap>.
	    - Replaced 'planes' in levtool with csPDelArray<ltPlane>.
	    - Replaced 'thing_plugins' in levtool with csPDelArray<csString>.
	    - Replaced 'plane_plugins' in levtool with csPDelArray<csString>.
	    - Replaced 'csRecordVector' in walktest with
	      csPDelArray<csRecordedCamera>.
	    - Replaced 'busy_entities' in walktest with csArray<csWalkEntity*>.
	    - Replaced 'busy_vector' in walktest with csArray<csWalkEntity*>.
	- Jorrit replaced various occurrences of csBasicVector:
	    - Replaced 'texlayers' in csShaderGLMTEX with csArray<mtexlayer*>.
	    - Replaced 'techniques' in csShader with
	      csArray<iShaderTechnique*>.
	    - Removed unused 'pluginlist' in
	      csGLRender3D::eiShaderRenderInterface.
	    - Replaced 'vertex_constants' in csOpenGlEffectPassData with
	      csPDelArray<csOpenGlVPConstant>.
	    - Replaced 'variables' in csEffectDefinition with
	      csArray<efvariable*>.
	- Jorrit Completely removed iEffectDefinition->GetAllVariableNames()
	  since it can not work because it returns private data that
	  the caller is not able to interprete. It wasn't used anyway.
	- Jorrit marked several places in the new renderer (around the
	  vectors that were replaced) with @@@ to indicated bad memory
	  management (possible memory leaks). Please investigate.
1-Aug-2003
	- Jorrit changed csPDelArray::Sort() to use a new
	  csArraySortCompareFunction typedef instead of csArrayCompareFunction.
	  The reason is to avoid confusion.  csArrayCompareFunction is given
	  pointers to the objects themselves (pointers) while the
	  csArraySortCompareFunction is given pointers to pointers to the
	  objects (i.e. pointers inside the array to sort).
	- Jorrit extended csArray::InsertSorted() with 'equal_index' parameter
	  like was done yesterday with csPDelArray.
	- Jorrit renamed csArraySortCompareFunction to
	  csPDelArraySortCompareFunction and csArrayCompareFunction to
	  csPDelArrayCompareFunction.  Also added csArrayCompareFunction which
	  is specific to csArray.  So csArray no longer has to include
	  "parray.h".
	- Jorrit replaced various occurrences of csVector:
	    - Replaced 'csPluginList' for csPluginLoader with a
	      csPDelArray<csPluginLoadRec>.
	    - Replaced 'csPluginsVector' in csPluginManager with a
	      csPDelArray<csPlugin>.
	    - Replaced 'csGridRow' in csSparseGrid with a
	      csPDelArray<csGridRowEntry>.
	    - csRegionTree2D::FindRegion() now uses csArray instead of
	      csVector.
	- Jorrit added csPDelArray::FindKey().
	- Jorrit replaced various occurrences of csVector:
	    - Replaced 'csConstraintVector' for csws layouts with a
	      csPDelArray<csLayoutConstraint>.
	    - csSkin now inherits from csPDelArray<csSkinSlice> instead of
	      csVector.
	    - Replaced 'csWSTexVector' for csws with a
	      csPDelArray<csWSTexture>.
	- Jorrit replaced various occurrences of csVector:
	    - Replaced 'TabVector' in awsTabCtrl with a csPDelArray<awsTab>.
	    - Replaced 'awsComponentVector' in awscomp.h with a
	      csArray<iAwsComponent*>.
	    - Replaced 'eventVector' in awsMultiLineEdit with a
	      csPDelArray<mlEvent>.
	    - Replaced 'TabVector' in awsNotebookButtonBar with a
	      csPDelArray<tabEntry>.
	    - Replaced 'csFontDefVector' in csFreeType2Font with a
	      csPDelArray<GlyphSet>.
	    - Replaced 'csFontVector' in csFreeType2Server with a
	      csRefArray<csFreeType2Font>.
	- Jorrit added csRefArray::FindKey().
	- Jorrit made the typedefs for compare and compare key functions
	  for csPDelArray and csArray local to the class. That way they
	  can use the correct type instead of just void*. This was already
	  done by csRefArray and cleans up the API considerably.
	- Jorrit added csArray::FindKey().
	- Eric Sunshine made the following changes:
	    - Overhauled the wchar_t checking and configuration since it was
	      quite broken on MacOS/X.  Now checks for presence of <wchar.h>,
	      wchar_t, and wcslen(); and fakes up missing items as necessary.
	    - Removed unportable `#include <wchar.h>' from csutil/util.cpp.
	    - Replaced usage of csVector with csArray in OSXDynamicLibrary.cpp.
	- Eric Sunshine elminated bogus `inline' from DEL2D_FUNC() macro in
	  common/OSXDelegate2D.h, OSXDelegate2D_CGBlit.h, and
	  OSXDelegate2D_OpenGL.h which prompted compilation warning.
	- Eric Sunshine eliminated compilation warnings from old OpenGL
	  renderer regarding invalid conversion from int* to GLint*.
	- res added CS_USE_FAKE_WCHAR_TYPE to the list of predefined Doxygen
	  macro names so the documentation for csUnicodeTransform is correct
	  again.
	- res updated the example in the csWtoC documentation.
	- Eric Sunshine altered the behavior of OSXDelegate so that it no
	  longer forcibly sets itself as the NSApplication's delegate.
	  Instead, it now registers manually to receive the notifications in
	  which it is interested.  This makes OSXDelegate friendlier to
	  projects which need to use their own NSApplication delegate.  (The
	  next step is to figure out how to alter OSXDelegate so that it no
	  longer requires a custom NSApplication subclass.  Eliminating this
	  requirement will make it much more friendly to external OSX-specific
	  projects.)
	- Keith Fulton added a new sprcal3d plugin, with a sprcal3dldr plugin
	  to load them.  Functionality is only partially implemented, but
	  cal3d models are loadable and viewable in viewmesh at least.
31-Jul-2003
	- Jorrit replaced various occurrences of csVector:
	    - Replaced 'vTex' in OpenGL texture manager with
	      csArray<csTextureOpenGL*>.
	    - Replaced 'vClients' in csVertexBufferManager with
	      csArray<iVertexBufferManagerClient*>.
	- Jorrit removed csArrayCompareKeyFunction. It is not needed
	  and the same as csArrayCompareFunction.
	- Jorrit added csPDelArray::Sort().
	- Jorrit extended csPDelArray::InsertSorted() with an optional
	  equal_index parameter. This integer will be set to the index
	  of a possible duplicate value (or -1 if none). This is similar
	  to csVector::InsertSorted().
	- Jorrit replaced various occurrences of csVector:
	    - Replaced VfsVector in csVFS with a csPDelArray<VfsNode>.
	    - Replaced ArchiveEntryVector in csArchive with a
	      csPDelArray<ArchiveEntry>.
	- Oktal changed iEventQueue::Post() and iEventOutlet::Post() so they
	  always IncRef() the iEvent they are passed. This means that after
	  calling Post(), the iEvent's reference count will be 2, so the
	  caller must DecRef() the iEvent (give up their reference).
30-Jul-2003
	- Anders Stenberg brought the variable system for the new renderer
	  back up and running, now using Oktal's symbol table which should
	  make variable lookups a lot faster.
	- Anders Stenberg added two new render steps. "target" and
	  "fullscreenquad". (Apparantly I somehow failed to add them
	  last time I claimed to do so.)
	- Jorrit replaced the 'flags' vector in ParsePortal (syntax services)
	  with a uint32 flags.
	- Jorrit replaced the return vector of iImageIO->GetDescription()
	  with an csArray (typedef csImageIOFileFormatDescriptions). Changed
	  all image loading plugins accordingly.
	- Jorrit replaced the basic vector return in
	  iAwsKeyContainer::Children() with a const csRefArray<iAwsKey>.
	- Jorrit replaced various occurrences of csVector:
	    - Replaced TabOrder in awsComponent with csArray<iAwsComponent*>.
	    - Replaced vClipped in awsMultiLineEdit with
	      csPDelArray<csString>.
	    - Replaced vText in awsMultiLineEdit with csPDelArray<csString>.
	- Jorrit replaced various occurrences of csVector:
	    - Replaced 'visobj_vector' in Dynavis with
	      csPDelArray<csVisibilityObjectWrapper>.
	    - Replaced 'vector' in csDynVisObjIt with
	      csArray<iVisibilityObject*>.
	    - Replaced 'vistest_objects' in Dynavis with
	      csArray<iVisibilityObject*>.
	    - Replaced 'visobj_vector' in Frustvis with
	      csPDelArray<csFrustVisObjectWrapper>.
	    - Replaced 'vector' in csFrustVisObjIt with
	      csArray<iVisibilityObject*>.
	    - Replaced 'vistest_objects' in Frustvis with
	      csArray<iVisibilityObject*>.
	    - Replaced 'DeleteCallbacks' in csfont with
	      csRefArray<iFontDeleteNotify>.
	    - Replaced 'DeleteCallbacks' in freefnt2 with
	      csRefArray<iFontDeleteNotify>.
	    - Replaced 'fontservers' in fontplex with csRefArray<iFontServer>.
	    - Replaced 'layers' in haze with csPDelArray<csHazeLayer>.
	    - Replaced 'particles' in csParticleSystem with
	      csRefArray<iParticle>.
	- res removed csVector from the Win32 WaveOut plugin.
	- Jorrit replaced various occurrences of csVector:
	    - Replaced 'frames' in csSpriteAction2 with csArray<csSpriteFrame*>.
	    - Replaced 'delays' in csSpriteAction2 with csArray<int>.
	    - Replaced 'displacements' in csSpriteAction2 with csArray<float>.
	    - Replaced 'frames' in csSprite3DMeshObjectFactory with
	      csPDelArray<csSpriteFrame>.
	    - Replaced 'actions' in csSprite3DMeshObjectFactory with
	      csPDelArray<csSpriteAction2>.
	    - Replaced 'sockets' in csSprite3DMeshObjectFactory with
	      csPDelArray<csSpriteSocket>.
	    - Replaced 'polytxts' in csLightingPolyTexQueue with
	      csArray<csPolyTexture*>.
	    - Replaced 'sector_cb_vector' in csPortal with
	      csRefArray<iPortalCallback*>.
	    - Replaced 'portal_cb_vector' in csPortal with
	      csRefArray<iPortalCallback*>.
	    - Replaced 'framevec' in perfstat with csPDelArray<FrameEntry>.
	    - Replaced 'statvec' in perfstat with csPDelArray<StatEntry>.
	- res improved the doxygen documentation of the UTF converters.
	- res fixed a "assuming & on overloaded member function" error on
	  older GCCs.
	- Oktal made the following changes to csSymbolTable:
	    - Made it use iBase* instead of void* for symbol values, so it
	      now does reference counting.
	    - Reorganised it in order to get rid of an unneccessary hash
	      retrieve call (some speed-up in AddSymbol and DeleteSymbol).
29-Jul-2003
	- Jorrit made scfStringArray actually work by adding the needed
	  SCF_CONSTRUCT stuff.
	- Jorrit changed csFindSystemRoots() to return iStringArray instead
	  of iStrVector.
	- Jorrit changed iVFS->FindFiles() and MountRoot() to return
	  iStringArray.
	- Jorrit removed all other usages of csStrVector (viewmesh, demo,
	  iAwsParmList, win32/loadlib.cpp, csws cspFileDialog, input console,
	  and OpenGL renderer).
	  In case of iAwsParmList the csStrVector was also
	  replaced with the more correct iStringArray (i.e. SCF interface).
	- Jorrit removed all other usages of iStrVector and scfStrVector
	  (csScanPluginsDir and related, iSCF (QueryClassList)).
	- Jorrit finally removed csStrVector, iStrVector, and scfStrVector.
	- Jorrit also fixed the python plugin for all latest changes.
	- Jorrit renamed FindSortedKey to FindSorted in csStringArray
	  and iStringArray.
	- Jorrit performed the next bunch of csVector removal:
	    - Replaced csEventQueue::EventOutlets with
	      csArray<csEventOutlet*>.
	    - Replaced csEventQueue::EventCords with csRefArray<csEventCord>.
	- res added some utility functions to convert between UTF encodings.
	- res changed the Win32 port to assume UTF8 strings for console output
	  and window titles and such.
	- res fixed a bug where WGL extensions weren't always initialized
	  properly.
	- res removed the unused DirectInput keyboard handling code.
	- res augmented configure to check the sizeof(long). This is used
	  to determine whether the platform is a 32 or 64 bit environment.
	- res added types to cstypes.h which are (un)signed integers with the
	  same size as a pointer. They are intended in existing cases where
	  pointers are casted to ints/longs (it appears that long on 64-bit
	  MSVC is still 32 bits large, so it can't be used. Tho I'm not sure.)
	- res augmented configure to check the sizeof(wchar_t).
	- Oktal added overloaded constructors to csHashIterator and
	  csGlobalHashIterator that allow them to be initialized from const
	  hashmaps, and added methods to them for the manipulation of
	  iterators initialized from const hashmaps.
	- Reed Hedges added csInitializer::SetupVFS, and changed
	  csInitializer::SetupConfigManager to use that function.
	- res committed some forgotten files and fixed some cut'n'paste and
	  similar stupid errors.
        - acraig added missing #include<wchar.h> in csutil/util.cpp
28-Jul-2003
	- Jorrit removed several csVector's throughout CS:
	    - Replaced 'render_priorities' in the engine with csStringArray.
	    - Replaced 'references' in csSector with csArray<iReference*>.
	    - Replaced 'FinishTimes' in csAnimationTemplate with
	      csArray<csTicks>.
	    - Replaced 'ConfigFiles' in csConfigAccess with
	      csArray<iConfigFile*>.
	    - Replaced 'Iterators' in csConfigFile with
	      csArray<csConfigIterator>.
	  This is only the start.
	- Jorrit performed the next bunch of csVector removal:
	    - Replaced 'Removed' in csConfigManager with a
	      csRefArray<iConfigFile>.
	    - Replaced 'Iterators' in csConfigManager with a
	      csArray<iConfigIterator*>.
	    - Replaced 'tags' in csObjectRegistry with a csStringArray.
	    - Replaced 'registry' in csObjectRegistry with a csArray<iBase*>.
	    - Replaced 'objects' in csObjectRegistryIterator with a
	      csRefArray<iBase>.
	- Jorrit performed the next bunch of csVector removal:
	    - Replaced 'fifo' in csTreeNode with a csArray<csTreeNode*>.
	    - Replaced 'children' in csTreeNode with a csArray<csTreeNode*>.
	    - Replaced 'ModalInfo' in csApp with a csArray<csModalInfo*>.
	    - Replaced 'clipchildren' in csComponent with a
	      csArray<csComponent*>.
	    - Replaced 'vViews' in csGrid with a csArray<csGridView*>.
	    - Replaced 'vRegionStyles' in csGrid with a csArray<csGridCell*>.
	- Jorrit added csStringArray::FindSortedKey() with only one argument.
	  This will use default case sensitive key find.
	- Jorrit removed some usages of csStrVector:
	    - Replaced 'del' in csArchive.
	    - Replaced 'Names' in csCommandLineParser.
	    - Replaced 'Values' in csSpinBox.
	- Jorrit added iStringArray. This is an SCF interface for
	  csStringArray. csStringArray does not directly implement this
	  interface though. Instead there is scfStringArray which embeds
	  an csStringArray and implements iStringArray. This is similar
	  to iStrVector and the idea is that iStringArray will completely
	  replace iStrVector.
27-Jul-2003
	- Philipp Aumayr added Cubemap and Texture3d Parser/Loader
	- Marten Svanfeldt made a few changes related to new renderer
	    - Some cleanup of code not used anymore in libcsengine, sector.cpp
	      and related headerfiles.
	    - Fixed some uninitialized variables in csRenderMesh
	    - Added a check for VBO before trying to use it in DeactivateBuffer
	- Keith Fulton changed thing.cpp so that deallocation of lightmaps
          doesn't crash the system when using a null renderer.
	- Keith also committed a fix to csutil/list.h to fix an obvious bug
	  there.
	- Jorrit cleaned up the public header files of AWS. Performed
	  proper indentation, added missing doxygen comments, fixed several
	  wrong doxygen comments, added missing LGPL notice, added missing
	  include protector, replaced normal pointer with csRef.
	- Jorrit did some Doxygen comment cleanups in include/ivideo.
	- Jorrit moved all X-Windows specific include files from include/ivideo
	  (xextf86vm.h, xextshm.h, and xwindow.h) to the new directory
	  plugins/video/canvas/xwindowcommon. These include files are common
	  to all canvas implementations that use X-Windows but they don't
	  need to be public.
	- Jorrit did more Doxygen and indentation cleanups in include/ivideo.
	- Jorrit cleaned up various include files in csutil.
	- Jorrit made the assignment operator and copy constructor of
	  csArray<T> more efficient.
	- Jorrit made the copy constructor of csRefArray<T> more efficient.
	- Jorrit clarified the documentation in csFlags since people often
	  seem to be confused about that class. Also replaced 'unsigned'
	  with 'uint32' to store the flags.
	- Jorrit marked csPArray<T> as deprecated.
	- Jorrit cleaned up several include files in include/imesh.
	- Jorrit cleaned up several include files and Doxygen commments
	  in include/ivaria.
	- Jorrit replaced all usages of the deprecated csPArray<T> with
	  csArray<T*>. Also removed csPArray<T>.
	- Jorrit added InsertSorted() and FindSortedKey() to csArray<T>.
	- Luca changed the behaviour of awsRadButton::OnKeypress,
	  awsCheckBox::OnKeypress and awsCmdButton::OnKeypress. Now those
	  methods return true iff the key event is really "eaten". Before
	  they were returning always true, even if the key event was not used
	  at all.
	- Luca has fixed the method csQuaternion::GetEulerAngles accordingly
	  to the patch provided by Troy Chard (troy.chard@shaw.ca).
	- Jorrit cleaned up several include files in include/cstool.
26-Jul-2003
	- Wouter Wijngaards fixed the partedit awssink.cpp file, removed
	  'static' from enums and put initializers for a constructor
	  in declaration order to remove compiler errors and warnings.
25-Jul-2003
	- Norman Kraemer fixed pythmod_setup.py for cases with no lib entries
	  between the enclosing '--'.
	- acraig added in missing include for va_start in stringarray.h.
	- Keith Fulton added a FormatPush member to stringarray.h.
	- Eric Sunshine made the following user manual-related changes:
	    - Continued updating the user manual to reflect recent SCF changes.
	    - Started updating the user manual to reflect the recent changes as
	      to how user-specific settings are managed (i.e. retirement of
	      user.cfg).
	    - Updated a lot of extremely out-of-date information in
	      texinfo/internal, and removed a bunch of obsolete information.
	- Norman Kraemer fixed his fixes to pythmod_setup.py and changed
	  cspython.mak to pass the location of CS libaries to the python
	  dist package.
	- Norman also removed a few dozen warnings about using char as array
	  index in the software renderer.
24-Jul-2003
	- Reed Hedges made some minor updates to the AWS "Quick Start" section
	  and API Changes appendix for the recent changes to AWS (15-Jul-2003).
23-Jul-2003
	- Eric Sunshine fixed memory trashing bugs in Win32 implmentation of
	  csLoadLibrary().  When composing its error messages, it was
	  allocating insufficient memory to contain the composed strings.  In
	  all cases, it failed to take the terminating null byte into account.
	  In some cases, it was just wildly miscalculating the necessary
	  allocation size.
	- Eric Sunshine disabled "keyboard grabbing" by default in the
	  X-windows (xwindow) canvas since it seems generally to cause more
	  problems for people than it solves.  For instance, it prevents people
	  from using hot-keys intended for the window manager (which is
	  external to CS).  In the future, however, it might be useful to
	  provide an API for controlling this behavior at run-time since it is
	  reasonable that games might want to avoid losing keyboard focus
	  during some intense action sequence when the user accidentally hits
	  some incorrect batch of keys.  Note that the API for this feature,
	  once properly generalized to be platform-neutral, does not belong in
	  iGraphics2D; but rather in some input- or keyboard-related interface.
	- Eric Sunshine fixed bug reported by Daniel Fryer <dfryer@uvic.ca>
	  where csEngine::CreateBlackTexture() was leaking a csImageMemory
	  instance upon each invocation.
	- Eric Sunshine removed invalid reference to non-existent
	  partedit/Jamfile from apps/tools/Jamfile.
	- res added the forgotten partedit/Jamfile and re-added it to
	  apps/tools/Jamfile.
	- Eric Sunshine removed all remnants of the old monolithic
	  system-driver (csSystemDriver, SysSystemDriver, etc.).  This finally
	  completes the task which began about two years ago.
	- Eric Sunshine eliminated compilation warning in OSXMenu.m which arose
	  when AppKit upgrade changed NSMenu to deal with id<NSMenuItem> rather
	  than NSMenuItem*.
	- Andrew Craig added a NULL check in the Thing plugin where it was
	  trying to use a SuperlightMap object that the null renderer does not
	  create.
	- Andreas Busch fixed 686 processor family reporting in new and old
	  software renderer for higher processors like P4 (e.g. family 15,
	  which resulted in "1586 CPU detected" message).
22-Jul-2003
        - Philip Wyett fixed inconsistent swig -I flag in make build and
	  aligning it with jam build.  cs_pyth.cpp will now be identical
	  whether make or jam built.
	- Keith Fulton added /apps/tools/partedit particle system editor.  This
	  is still unfinished but should at least run.  Code was by Peter
	  Holko, who is still working on it.
	- Eric Sunshine reverted Phil's change to win32.cpp where he removed an
	  invocation of CreateSolidBrush().  Instead, Eric patched
	  pythmod_setup.py, cspython.mak, and win32gcc.mak so that the _cspace
	  Python module is linked against gdi32.lib, which is where
	  CreateSolidBrush() is located.  (This is untested.  If you still
	  experience trouble, please attempt to satisfy the link requirements
	  by editing the makefiles or pythmod_setup.py, rather than disabling
	  code in win32.cpp.)
	- Eric Sunshine reverted Keith Fulton's change to csStringArray
	  SetLength() in which Keith shifted to the caller the responsibility
	  of freeing the strings.  This silently broke existing client code by
	  introducing memory leaks.  Moreover, his change was semantically
	  incorrect.  csStringArray must be responsible for managing its own
	  storage (after all, this is one of the tenets of encapsulation).
	  This burden should not be placed upon clients.  Also fixed the actual
	  problem, which I assume Keith was attempting to address with his
	  change, which was that Pop() and Extract() were returning
	  already-deleted strings.
	- res made the following changes wrt Jam build:
	    - Tweaked msvcgen Jamconfig a bit. The VC project generation still
	      has some issues, but it's already usable.
	    - A couple of Jamfile tweaks & fixes all over the place (missing
	      newlines, missing external libs and such.)
	    - Added a new compile group 'walkall'.
	    - Added a Jamfile for partedit.
	- Eric Sunshine corrected `hbox' warnings reported by TeX.
	- res fixed a problem with the C compiler flags for the VC project
	  cflags when using the FreeType2 external lib. The "/I" command line
	  parameter was errorneously treated like a path to a file. Luckily
	  the MSC compiler also accepts "-I" style parameters.
21-Jul-2003
	- Oktal added missing doxygen comment at the top of csSymbolTable.
        - Philip Wyett removed CVS conflict data from gl_render3d.cpp.
	- Jorrit removed a comment about csPDelArray<T> being deprecated from
	  the documentation.  csArray<T> nor csRefArray<T> can provide the
	  functionality given by csPDelArray<T>.
	- Jorrit fixed the include file in the collision detection howto and
	  also replaced the use of SCF_QUERY_INTERFACE for the iPolygonMesh
	  with the proper usage of GetObjectModel().
	- Jorrit added a few references towards individual HOWTO's from the
	  rest of the documentation.
	- Jorrit replaced all occurrences of NULL in the documentation with 0.
	  This same replacement has been done on the source code some time ago.
	- Jorrit fixed the ensocket documentation to use csRef.
	- Jorrit replaced several NULL occurrences with 0 throughout the CS
	  sources.
	- Philip Wyett removed some old LUA link related code from win32 gcc
	  makefile.
	- Philip Wyett fixed ds3d linking on Win32 GCC.  This method works for
	  both MinGW and Cygwin.
	- Philip Wyett performed a temp removal and replace with null on win32
	  wc.background colour in cssys.  This allows pythmod to successfully
	  build with Cygwin.
	- Keith Fulton fixed csStringArray to handle item removal without
	  crashing.
20-Jul-2003
	- Jorrit forgot to link the new howto into the howto chapter.
	- Jorrit fixed a small note about curves in the thing mesh object
	  documentation.
	- Jorrit added a new howto about creating a thing mesh.
	- Jorrit added the beginnings for the genmesh mesh object
	  documentation.
	- Jorrit removed mention of the meshobjects implementing iPolygonMesh
	  from the mesh object documentation. The mesh objects still do that
	  but that's supposed to be secret :-)  The real method is to use
	  the iObjectModel now.
	- res made the following changes:
	    - Committed some files he forgot the last time.
	    - Added copy constructors for csPArray<> and csRefArray<>.
	    - Some doc updates in csgfx/gradient.h and memimage.h.
	- res added some #includes missing in new renderer builds to
	  csengine/engine.cpp.
	- Oktal added to csMaterial::AddChild() in new renderer: it now calls
	  iShaderWrapper::SelectMaterial() on the child before adding it.
	- Oktal fixed crash in csSymbolTable::SetParent() by adding bounds
	  checking to the symbols hashmap iterator.
	- Oktal moved csSymbolTable from csgfx to csutil.
19-Jul-2003
	- Jorrit added howto about adding game data to Crystal Space objects in
	  map files.
	- Oktal finished implementing the new renderer shader variable system.
	  The API is now fully implemented, and there are no compile errors
	  (except possibly the shader plugin .cpp's, which I can't test since
	  I don't have a proper GL installation.)
	- Anders Stenberg fixed a few compile errors Oktal introduced.
	- res moved superlightmap generation from the renderer to the thing
	  plugin.
	- res moved csEngine:: methods from engine/renderloop.cpp to
	  engine.cpp.
	- Oktal made the following changes to the shader variable system:
	    - Rewrote the SelectMaterial-related code to index materials based
	      on their pointer address instead of their index in the txtmgr's
	      array of material handles.
	    - Added an overloaded function iShaderBranch::GetSymbolTable(int)
	      to get an extension symbol table without selecting it.
	    - Rewrote the implementations of iShaderBranch::AddChild to make it
	      add children to all symbol tables, not just the selected one.
	- Oktal implemented no-op GetSymbolTable(int) in csMaterial (fixed
	  new renderer compile error).
18-Jul-2003
	- Anders Stenberg fixed compile errors introduced by Oktal.  New
	  renderer should compile, although variable functionality is crippled.
	  (Results in lighting failure.)
	- Keith Fulton committed some additional accessor functions to iPath
	  and csPath.
	- Jorrit added a new csRadixSorter class. This class implements the
	  radix sort algorithm which is O(n) but only works on integers.
	  It needs up to 4 passes to sort a table of integers. I did some
	  benchmarks to compare radix with qsort. Here are some results:
	    - 100000 random numbers no greater than 65535: radix roughly 9
	      times faster.
	    - 100000 random numbers: radix roughly 6 times faster.
	    - 100000 almost sorted numbers: radix roughly 3 times faster.
	    - 100000 almost equal numbers: radix roughly 2 times slower.
	  So in almost all cases radix clearly beats qsort.
	- Jorrit reverted a change Peter Amstutz did 7-July.  He then changed
	  the thing plugin so that the normal is automatically recomputed when
	  needed.  However it seems that that is not working properly for some
	  reason.  With that fix enabled the rotating cubes in the mirrored
	  room (flarge) no longer work properly.  Need to further investigate
	  for a good fix.
17-Jul-2003
        - Philip Wyett fixed broken glrender3d makefile. OBJ.GLRENDER3D should
          have had OUT.GLRENDER3D not DIR.GLRENDER3D.
	- Jorrit committed a patch from Anders Reggestad to the spiral particle
	  system.  Here is his log: This is more or less a complete rewrite of
	  the not working spiral system thats currently in CS.  The old system
	  have big problems with bbox, and when outside view for a period of
	  time the whole thing will explode when entering view again.
	  (Particle systems isn't updated when out of view, nice
	  optimalization, but fatal for the old spiral system.) Rewrote the
	  system to rebuild when reentering view (Like done in the fountain and
	  explotion system).  Added some new parameters to control the look of
	  the system.  Anders was also so nice to update the documentation for
	  his changes.  If only everyone would do that!
        - Philip Wyett fixed rlsstencil makefile and rlsstencil.csplugin is now
	  cleaned correctly.
	- Oktal fixed the compile errors in the new renderer shader variable
	  system, and recommitted it. The API is in place but not fully
	  implemented.
	- Oktal fixed bug in material.h: #ifdef instead of #ifndef.
16-Jul-2003
	- Anders Stenberg made the following new renderer additions and fixes:
	    - Made AWS work.  (Added some stub functions to comply with
	      interface definition.  Seems like it works.)
	    - Added CLAMP and NOFILTER flags to textures, as well as loader for
	      them in csparser.
	    - Added several return value checks, to avoid some cases of broken
	      level/shader leading to crash.  (Still lots of cases left.  Need
	      to do some _real_ error checking/reporting here.)
	    - Added a flag to CreateRenderBuffer to specify that a render
	      buffer is to be used for indices, and updated affected mesh
	      plugins.
	    - Disabled VBO support by default, since no nvidia cards seem to
	      cope with it.  (Driver bug or wrong implementation?)
	    - Made shaders check if an appropriate renderer is the current one.
	      (i.e. GL shaders won't load if the software renderer is used.)
	    - Fixed broken loading of variables.  (Maybe stupid since it will
	      soon be totally replaced, but I needed it for some tests.
	    - Fixed bug with transform not beeing updated in some cases where
	      it should.
	    - Added "rendertarget" and "fullscreenquad" render steps.
	- Anders Stenberg added software implementation of new renderer.
	  (Pretty much just a hack to use a copy of the old renderer. No
	  makefiles included, so someone who knows what they're doing should
	  create some.)
        - Philip Wyett changed an ASSERT () call to CS_ASSERT () in
          'gl_renderbuffer.h'.
        - Philip Wyett added a note to disable 'Video.OpenGL.Caps.Stencil' in
	  'opengl.cfg' if not supported by the users hardware or they are
	  experiencing crashes.  Also added the ATI Radeon (r100) owners
	  running Linux (DRI) as a known case where this should be done.
15-Jul-2003
	- Christopher Nelson removed the procedural texture support from
	  AWS entirely.  This means that a user must do all the construction
	  work if they intend to use custom canvases.
13-Jul-2003
	- Keith Fulton changed csPath to inherit from SCF interface iPath.
12-Jul-2003
        - Boyan added SetBroadcast and SetBroadcastOptions in iNetworkSocket2
	- Jorrit applied a fix to the fountain bounding box creation
	  code as supplied by Anders Reggestad.
11-Jul-2003
	- Jorrit added a convenience csPolygonMeshCube class which represents
	  an easy way to make a cube collider.
	- In addition Jorrit did the following:
	    - Simplified walktest a bit by using this new csPolygonMeshCube
	      class. So it no longer has to make dummy cube things for the
	      actor.
	    - Also use csPolygonMeshCube in csparser instead of the custom
	      cube mesh that was implemented there.
	- Jorrit renamed csPolygonMeshCube to csPolygonMeshBox. It is a box,
	  not a cube.
	- Eric Sunshine performed project-wide spelling corrections:
	    convenience --> convenience
	    convenient  --> convenient
	- res fixed a bug in the GetLongPathName() replacement for Win9x/NT:
	  an array was allocated on the stack at runtime, but was almost
	  immediately overwritten, causing the function to not work at all.
	  The issue was unnoticed as the behaviour didn't occur with MSVC.
10-Jul-2003
	- Jorrit added a test in csColliderWrapper::Collide() so that
	  csColliderWrapper can be used in cases where there is no
	  collider. This means one can use csColliderWrapper to remember
	  the fact that there is no collider.
	- Eric Sunshine augmented the -fvtable-thunks check in configure.ac so
	  that it is also performed on Cygwin since this flag is needed with
	  the 2.x compiler on Cygwin.  (Previously, it was performed only for
	  Mingw).
	- Jorrit fixed two wrong message id's in the csparser. It was
	  complaining about 'addon' while it had nothing to do with that.
	- Eric Sunshine fixed cssys/win32/csosdefs.h so that CS_WIN32_ARGC and
	  CS_WIN32_ARGV are defined always (previously they were not defined
	  for Cygwin).  This fixes problem on Cygwin where win32.cpp was
	  utilizing these macros.
	- Eric Sunshine fixed the default plugin install macro in install.mak
	  so that it only installs the .csplugin file if present.  This is a
	  convenience for platforms which bundle the meta-information directly
	  into the plugin module rather than maintaining it in a separate
	  .csplugin file.  It allows such platforms to utilize the default
	  macro rather than creating a custom one.  This also fixes the
	  "install" target for Windows, since meta-information is bundled into
	  the .dll on Windows.  Finally, as a side-effect, it fixes the problem
	  where installation of the Python plugin _cspace.so (.dll) caused the
	  "install" target to fail because no .csplugin file was present (lack
	  of .csplugin is correct since this is a Python plugin, not a CS
	  plugin).  This is not a "clean" solution to the _cspace.so problem,
	  and we should devise a better one, but it works well enough for the
	  interim.
	- res fixed a memory leak in csPluginPaths::AddOnce().
	- res fixed a memory leak when using csStringHashIterator - upon
	  construction a new csGlobalHashIterator was created, but not deleted
	  on destruction (more exactly, csStringHashIterator lacked a
	  destructor.)
	- Reed Hedges fixed csXWindow::SetTitle() so that it actually sets the
	  window title on each invocation, whereas in the past it only worked
	  correctly if it was called before the window was created.
9-Jul-2003
	- Jorrit fixed PlaceMesh() so that it now uses
	  engine->GetNearbyObjects(). That makes it a lot more efficient
	  then the old implementation which simply traversed all objects
	  in the current sector.
	- Jorrit added iMeshWrapperIterator to iterate over meshes.
	- Jorrit added three new functions to iEngine: GetNearbyMeshes()
	  and two versions of GetVisibleMeshes(). These functions complement
	  the already existing GetNearbyObjects() and GetVisibleObjects().
	  Instead of returning an iObjectIterator they return an
	  iMeshWrapperIterator. This avoids the need to do SCF_QUERY_INTERFACE
	  to get the iMeshWrapper in the code using the iterator so this
	  can be a significant optimization.
	  The Get...Objects() functions will not be removed because in the
	  future they will also return lights.
	  Side note: GetVisibleObjects() and GetVisibleMeshes() are not
	  implemented yet.
	- Jorrit changed PlaceMesh() so it uses GetNearbyMeshes() now.
	- Jorrit changed Walktest collision detection code so it uses
	  GetNearbyMeshes().
8-Jul-2003
	- Jorrit reverted the change to glrender.mak that was made yesterday.
	  This change breaks compilation of the OpenGL plugin.  With revision
	  1.52 of glrender.mak it was not able to find rule to build object
	  files for files from renderer/common.
	- Jorrit fixed win32.cpp for cygwin so that it uses the correct argc
	  and argv (i.e. with two underscores instead of one).
	- Eric Sunshine reverted the reversion of glrender.mak and applied a
	  small patch so that it can build files from the renderer/common
	  directory.  Also patched gl_render3d.mak.
	- res worked around the 'double keypad key event' problem on Win32.
	  Upon reception of a 'keydown' message for such keys, CS enqueues a
	  key event; however, Windows generates another message containing the
	  keycode translated to a character.
	- res attempted to update & fix cs-config on Win32.
	- res fixed a usage of GetLongPath() in instpath.cpp. Replaced it with
	  a call to csExpandPath().
7-Jul-2003
	- Peter Amstutz changed iDataBuffer so that it can be instructed
	  not to delete the underlying buffer when iDataBuffer is freed.
	- Peter Amstutz fixed csPolygon3DStatic so that the object plane
	  (polygon normal) is updated if necessary when GetObjectPlane()
	  is called.
	- Eric Sunshine removed some errant DecRef() invocations from the
	  "pixmap" how-to which were pointed out by Jacob Gostylo
	  <jgostylo@users.sourceforge.net>.
	- Eric Sunshine upgraded glrender.mak and gl_render3d.mak so that they
	  store their build files in distinct subdirectories of $(OUT).  This
	  works around conflicts caused by both modules having source files of
	  the same name.
	- res fixed a copy'n'paste bug in the rain mesh object, pointed out
	  by Jochen Munch <powermonk@users.sourceforge.net>
	- Eric Sunshine fixed bug in msvcgen.pl where the prefixes specified
	  via --strip-root were not being applied to the value of the
	  %metafile% pseudo-variable.
5-Jul-2003
        - Boyan removed circular reference between ds3d render and listener
          which prevent to unload ds3d plugin.
	- Marten added so that NR use gl*Pointer when there are no
	  glAttributePointer extension available.
	- res added a home-grown GetLongPathName() surrogate for older Windows
	  versions, where it's unsupported.  This was pointed out by Paul G.
4-Jul-2003
	- res committed fixes from Oktal for some circular #include
	  dependencies in the new renderer.
	- res fixed a wrong #include in anonrndbuf.cpp.
	- res fixed a typo in syspath.h, slightly changed a few comments
	  there, and also fixed a comment in gradient.h.
	- res added a missing pair of quotes to the crystal.fgd "light" entry.
	- res fixed the map2cs mechanism for removal of polys with certain
	  textures. This didn't work with Hammer maps due to a
	  lowercase/uppercase mismatch.
	- res fixed a bug in map2cs where 'invisible' (and thus unused)
	  textures nevertheless appeared in texture & material list.
3-Jul-2003
	- Jorrit removed obsolete bindings for radiosity commands for Walktest
	  and added 'r' key to record movements on/off and 'shift-r' to play
	  the recording.
	- Eric Sunshine made the following documentation-related changes:
	    - Continued updating user manual to reflect latest SCF changes.
	    - Fixed a significant number of Texinfo mark-up problems in
	      walktest.txi.
	    - Updated extremely outdated information about configuration and
	      configuration files in user manual.
	    - Corrected several mark-up bloofles in various .txi documents.
	    - Eliminated TeX `hbox' warnings.
	- res enhanced bugplug with a command to send debug commands to
	  arbitrary plugins. Syntax is: debugcmd <classID> <command>
	- res fixed a spelling error in bugplug.
	- Duhprey did the following:
	    - Softness generalization patch (soft_cfm contact is now handled
	      the same was as friction and elasticity)
	    - Plane direction patches (invert A and C, as well as B) planes are
	      not consistent and still need some work.
	    - Revert the MeshSphere collider, those optimizations aren't
	      general.
	    - Fix the collision callback to work when 1 body is static.
2-Jul-2003
	- Eric Sunshine fixed some spelling errors in the user manual pointed
	  out by Vincent Knecht <vince@iefr.ath.cx>: existance -> existence
	- Eric Sunshine applied a patch to snapshot.py from Just van Rossum
	  <just@letterror.com> which allows it to work correctly when project
	  subdirectory names contain spaces.
	- Anders Stenberg made the following changes:
	    - Made sure NextFrame is called when rendering with new renderer.
	    - Fixed a bug where xorpat assumed width == height.
	- DeSigna made the following changes:
	    - Added a pair of MemoryMapWindow() functions, allow mapping parts
	      of files, mapping in read/write files and re-using file handles
	      for multiple windows into the same file.
	    - MemoryMapFile() was modified to work with these new functions.
	- Duhprey made a Speed improvement to PreCompute in terrbig
	- res updated the Win32 memory mapping for "window mapping".  However,
	  the new stuff is still untested, as it isn't used yet anywhere.
	- res fixed some doxygen issues in csshlib.h, sysfunc.h, syspath.h.
	- DeSigna patched in the walktest documentation contributed by Marten
	  <martin@cyber-dog.freeserve.co.uk>.  The old documentation remains in
	  CVS until some parts are transplanted.
1-Jul-2003
	- HangDude made the following changes:
	    - Moved anonrndbuf.h from csutil to cstool (on Jorrit's request).
	    - Added LGPL notice.
	    - Updated genmesh because of that change.
	- res fixed rlsstencil.mak which got messed up when the plugin name was
	  changed.
	- Matze moved CFLAGS from mk/jam/variant.jam to Jamrules to not enforce
	  external projects to the same flags as CS is using
	- Anders Stenberg made the following changes:
	    - Fixed a bug in stdrep where it assumed that the renderer was in
	      2d mode.
	    - Added console output to r3dtest. Can be toggled with TAB.
29-Jun-2003
	- Luca fixed the inconcistency of properties read and written by
	  Set/GetProperty in the awsScrollBar class. He updated the texinfo
	  docs about scrollbar's properties too. He also fixed a bug in the
	  aws documentation about the signalComponentCreated (called wrongly
	  signalCreated).
	- Eric Sunshine regenerated the configure script since the last commit
	  made by Matze broke the Bison and Swig version checks.  This
	  corruption seems to have been caused by an old progver.m4 macro file
	  in Matze's CS/mk/autoconf directory or in some other location
	  searched by Autoconf by default.
28-Jun-2003
	- DeSigna fixed a small logic error in csGetKeyDesc(), where a ?:
	  conditional had its values the wrong way round.
        - JTarbox fixed it so the fast_mem_copy code is only active with a MSVC
	  less then version 7.
	- res fixed Win32 csosdefs.h to use fast_mem_copy only on MSVC.  The
	  recent changes caused that fast_mem_copy was used on VC < 7 _and_
	  non-VC platforms.
27-Jun-2003
	- Jorrit fixed a bug in genmesh where it would not initialize normals
	  to 0 if <autonormals/> was not used.  The result would be
	  unpredictable lighting behaviour.  Now genmesh will initialize the
	  normals to 0.  This means that at least the behaviour is consistent:
	  if you don't use <autonormals/> and you don't specify normals
	  manually you'll get NO lighting at all.
	- res augmented r3dtest to accept a map to load as a command line
	  parameter.
	- res renamed stencil.csplugin to the correct rlsstencil.csplugin.
	- Eric Sunshine eliminated compilation warning from csprocessorcap.h.
	- Eric Sunshine fixed a problem with cspython.mak where it tried to
	  build cspython.dll when swigpythgen was invoked, in which case it
	  should only have re-generated the Swig output file.  Worse, when
	  attempting to build the .dll, it was using `ar', rather than
	  gcc/dllwrap.
	- Eric Sunshine eliminated several compilation warnings from
	  DirectSound 3D renderer.
	- Duhprey ported sprite3d to new renderer
	- Eric Sunshine converted sndds3d.mak and sndsoft.mak over to the new
	  format where object files and resources are placed in a
	  module-specific build directory.  This solves several problems where
	  glwin32, sndsoft, and sndds3d were confusing and mixing source and
	  object files.
	- Eric Sunshine fixed silly bug in csLoadLibrary() for MacOS/X.  It was
	  supposed to transform the incoming .csplugin suffix on the pathname
	  with .csbundle, but instead uselessly replaced .csplugin with
	  .csplugin.
	- Anders Stenberg added support for pixmaps (DrawPixmap) to new
	  renderer.
25-Jun-2003
	- Oktal manually applied a patch to cssocket that was intended for
	  ensocket, submitted by Ladislav Foldyna.  The patch adds multicast
	  support.  I also added warnings that are triggered when deprecated
	  functions are called.
	- Oktal fixed the argv error in the Perl module by just having Swig
	  ignore the function that was causing trouble. This looks like some
	  sort of bug in Swig.
	  Also added csArray and csRefArray support, and removed the
	  typemap to convert csHashMapReversible to a native Perl hash type.
	- Jorrit did a minor change to emit again to properly change the
	  object model when some of the attributes change.
        - Philip Wyett removed the references in the docs that offered
          people to contact me directly re MSVC related build issues and
          updated authors info to indicate my current inactive status.
	- res fixed the sndds3d makefile to work on MinGW/MSYS.
	- Anders Stenberg commited a fix for AWS from Gersh fixing two window
	  flags both defined as 0x40.
24-Jun-2003
	- Oktal added an iGraphicsMemory interface with which to access
	  the csGraphicsMemory plugin.
	- Oktal finished off the new renderer shader variable system,
	  including factoring out the variable-related API calls from all
	  the shader-related interfaces into a single interface which they
	  all now inherit from.
	  It should now be ready for use, and I leave that to
	  Anders and Marten :-)
	- Jorrit attempted to fix the perl plugin but only partially succeeded.
	  Down to one error (with mingw/msys):
	    plugins/cscript/csperl5/cswigpl5.inc: In function
	    `void _wrap_scfInitialize(PerlInterpreter *, CV *)':
	    plugins/cscript/csperl5/cswigpl5.inc:4575: `argv' undeclared
	    (first use this function)
	- Jorrit removed support for lua in the pysimp application. Now it
	  only uses python. It is also no longer required to use a commandline
	  option.
	- Jorrit removed scripts/lua. This was a left-over from the past.
	- Jorrit removed a mention of the lua plugin from the documentation.
	- Jorrit fixed the emit mesh object in two ways:
	    - First it will now correctly de-init itself in case several
	      of the parameters are modified. That way you can update the
	      mesh realtime.
	    - Secondly there were some errors with ref counting for the
	      emitgen stuff. Replaced all with csRef's.
        - Philip Wyett corrected .csplugin filename in nmeshldr.mak, so
          nullmeshldr.csplugin is cleaned correctly.
	- Jorrit did the following sequence manager related changes:
	    - Added four different operations (AddOperationSetVariable())
	      to the engine sequence manager with which you can set a variable
	      (or add to it).
	    - Added the 'setvar' command to sequences. With this you can
	      do the following:
	      <setvar var="v" value="3"/> set 'v' to value 3.
	      <setvar var="v" add="-2"/> subtract 2 from 'v'.
	      <setvar var="v" value_var="z"/> copy var 'z' to 'v'.
	      <setvar var="v" add_var="z"/> add var 'z' to 'v' (as float).
	      <setvar var="v" x="1" y="2" z="1"/> set vector 1,2,1 to 'v'.
	      <setvar var="v" red="0" green="0" blue="1"/> set 'v' to blue.
	    - These changes are totally untested!
	- Matze added an Iterator to csArray.
	- Luca (groton@gmx.net) fixed a bug in the awsList: the bug was that
	  the list box wasn't displaying the last item in some cases. I had to
	  modify in some places the source code of the awsScrollBar too:
	  I replaced in the awsScrollBar's source code many 'max - amntvis'
	  expressions with the expression 'max - amountVis + 1':
	  in fact if i have 10 item in my own listbox (ie the 'max' is 9),
	  and if the visible items are 5 (ie 'amntvis' is 5), then the correct
	  expression to get the max value for the index of the item displayed
	  in the first row is 'max - amntvis + 1', that is 5, with the previous
	  code that value was wrongly set to 4.
	- res slightly changed Win32 csGetPluginMetadata(): a .csplugin file
	  is looked for when the supplied file name has this extension.
	  Retrieving the resource from a .DLL is still tried in all cases.
	  This should make metadata retrieval a bit faster.
	- res fixed FR #759764 "Uninitialized members in partgen.cpp":
	  alphapersecond/alpha_now are now initialized to 0.0f resp. 1.0f.
	- Marten reverted Oktals addition of a new variablesystem to render3d.
	  It have alot of serve compilation-errors which should be fixed before
	  commiting.
23-Jun-2003
	- HangDude fixed metaballs for recent renderbuffer changes (changed
	  CS_BUF_INDEX / STATIC to CS_BUF_DYNAMIC)
        - Boyan did the following in AWS:
	    - Added iAwsComponent->GetFirstFocusableChild().
	    - Added awsWindow->SetFocusedChild and
	      awsWindow->GetFocusedChild().
	    - awsWindow now holds last focused child on Hide() If window shows
	      again WindowManager knows witch child need to be focused.  If
	      there is no info about last focused child window calls
	      GetFirstFocusableChild and focus it.
	- Jorrit fixed formatting with the csQuaternion class.
	- Matze fixed 2 errors in the jam rules for .csplugin -> metadata.rc:
	  There was no dependency set from .csplugin->metadata.rc and the
	  generated file was not added to the clean target.
	- Oktal added loaders for the nullmesh object and factory, needed for
	  blend2cs and hierarchical meshes.
	- Eric Sunshine fixed the following problems with cspython.mak:
	    - Neglected to include swigpythgen and swigpythinst targets in
	      "make help" output.
	    - Neglected to install _cspace.so (_cspace.dll) via "make install".
	- Eric Sunshine fixed csGetPluginPaths() for Unix so that it respects
	  csGetAppDir() and csGetResourceDir() when composing the list of
	  directories to scan for plugin modules.
	- Matze added a workaround for bison 1.875 to aws
22-Jun-2003
	- HangDude converted metaballs to new renderer
	- Luca did the following:
	  - Fixed a bug in the label component of AWS: in fact the method
	    awsLabel::OnKeypress was returning always 'true', although the
	    event was not eaten at all; we must instead let it be passed
	    along to other listeners which could instead use and eat it.
	  - Fixed a bug when the glwin32 canvas is receiving WM_SIZE windows
	    message: in fact if the resizing flag is SIZE_MINIMIZED, then the
	    Height and the Width of the canvas was wrongly being set to 1!
	    Instead we have to preserve the current Height and Width values,
	    and just set the correct clipping rect to an empty region.
	    Besides, when we receive the WM_SIZE windows message, the old
	    behaviour was to 'return 0' wrongly, because we must instead
	    pass the message to the iWin32Assistant window procedure which
	    handles the WM_SIZE message as well (it can send to the CS event
	    queue messages like csevCanvasHidden and csevCanvasExposed).
	- Eric Sunshine made the following documentation-related changes:
	    - Began updating the documentation in the user manual to reflect
	      all of the recent SCF-related changes.
	    - Fixed a number of Texinfo markup errors and problems in perl.txi.
	    - Eliminated numerous overfull and underfull `hbox' warnings
	      reported by TeX.
	- Eric Sunshine removed the unused, obsolete, and deprecated top-level
	  <name> node from the .csplugin files.
	- res changed the plugin scanning process, now the scanning for plugin
	  files and the retrieval of metadata is split up.
	- res added a "special case" for static plugins when checking whether
	  a class is already registered; in particular, when the class already
	  registered is inside a static plugin, no message is emitted.
	- res removed csGetResourcePath() from winsyspath.cpp - it is in
	  resdir.cpp already.
	- DeSigna implemented awsWindow::foNoBorder, which existed as a name,
	  but unaccessable from skin definitions and unhandled in the code.
	- Eric Sunshine added cssys/general/resdir.cpp to
	  cssys/win32/win32gcc.mak, cssys/Jamfile (for Windows), and
	  msvcgen/win32.mak since Frank removed the csGetResourcePath()
	  implementation from winsyspath.cpp.
21-Jun-2003
        - Philip Wyett updated win32.mak to reflect changes/additions in
          the general cssys library affecting MSVC port(s).
        - Philip changed all foo <= 63 to foo < 64 to add some
          consistency and make for easier reading of the file.
        - Andrew Mann fixed a bug in the Win32 loadlib function
          InternalScanPluginDir() that could cause double path delimeters
          to be included in the full path and filename of a file.
          Also fixed a bug in the same location that attempted to load all
          plugins from the current working directory regardless of where
          the plugin scan found them.
        - Philip Wyett initialized the un-initialized 'clipportal_dirty'
          at construction in csGraphics3DOGLCommon.
	- Keith Fulton added iRegion->Add(iObject*) function to make
	  adding objects to regions cleaner and easier.
	  Also committed several compiler errors and warnings.
	- Wouter fixed the openglcommon DrawPixel operation, which now
	  uses floating point to address pixels. The same problem as for
	  DrawLine seems to exist, where whole y values are later rounded
	  up, shifting the result. The floating-point y value is slightly
	  perturbed so its no longer on-the-edge. This makes g2dtest
	  for opengl and software perform about the same on all clip tests.
	- Wouter fixed the normal cursor in the standard console output.
	- Wouter added two extensions to standard console to set colours.
20-Jun-2003
	- Marten fixed an error in the inline assembly in tcovbuf.cpp
	  which prevented it from compiling on msvc6
	- Jorrit fixed a compile error in thing with relation to the new
	  renderer.
        - Duhprey fixed missing new way to handle zbuf mode.
	- Jorrit reverted all const char related changes to csStringArray.
	  The way it is now prevents people from modifying the strings.
	  This needs to be redone but preferably by someone who TESTS
	  the changes!
	- Jorrit did the following region related changes:
	    - Removed the concept of the current region. The engine still
	      manages regions but no longer knows about the current region.
	    - Removed engine->SelectRegion(), engine->GetCurrentRegion(),
	      and engine->AddToCurrentRegion().
	    - Added engine->CreateRegion(). This function will create a region
	      and add it to the region list. If the region already exists
	      it will simply return a pointer to that.
	    - Removed support for the <region> keyword in map files.
	    - Added optional region parameter to iLoader->LoadLibraryFile().
	    - Replaced boolean resolveOnlyRegion parameter in
	      iLoader->LoadMapFile() with a pointer to the actual region
	      instead.
	    - Changed the parser to add all objects to the current region
	      itself.
	    - Sequences, triggers, and shared variables are also put in
	      regions now.
	    - The region code now supports removing sequences, triggers, and
	      shared variables too.
	- Wouter updated viewmesh to call ShineLights on the meshwrapper.
	  This lights thing objects correctly.
        - Philip Wyett added physics loader plugin to MSVC build process.
	- Jorrit updated the documentation to latest region related changes.
	- Jorrit re-added the bool resolveOnlyRegion parameter (curRegOnly) for
	  LoadMapFile(). Also added this for LoadLibraryFile(). This is used
	  in addition to the region parameter now. The region parameter on
	  its own only causes objects to be added to that region. The
	  curRegOnly parameter causes objects to be searched in only that
	  region (as opposed to all regions).
	  This fixes the -regions commandline option for walktest.
	- Jorrit added some init code back to the ball mesh. That code
	  caused 'top_mesh' to be uninitialized for some fields and this
	  caused weird things on various systems. For some weird reason
	  Marten removed this initialization code during the rewrite of
	  ball mesh to the new renderer.
	- Jorrit did some updates to the documentation to avoid the word
	  'region' where something else is meant.
	- Jorrit fixed iso loader after his latest changes.
	- Jorrit fixed motion loader after his latest changes.
	- Wouter fixed reference leaks in Aws for iGraphics2D/3D and font
	  manager.
	- Jorrit fixed a bug in the region code. It didn't remove lights.
	- Wouter added new method to iAws: GetKeyboardFocusedComponent.
	  It is useful when trying to determine if Aws is interested
	  in keyboard events.
	- Eric Sunshine reverted the reversion to stringarray.h, so that the
	  public API once again deals with (char const*), rather than (char*).
	  It is said that the earlier reversion was made because PlaneShift
	  modifies the strings stored in the array, however modifying (char*)
	  strings owned by some other object is highly dangerous and extremely
	  questionable behavior.  There are other much safer ways to accomplish
	  this.  We should not allow the API of csStringArray to be corrupted
	  simply because some project employs dangerous coding practices.  (If
	  PlaneShift really insists upon relying upon this unsafe coding
	  practice, then it can use the manifestly unsafe const_cast<> to make
	  the returned strings non-const.  However, such practice is not
	  recommended.)  Also reverted the earlier changes in revision 1.3
	  because they were incorrect.  Instead, fixed the actual problem (a
	  misplaced `const') which prompted the 1.3 changes.  (And, yes, the
	  present changes have been tested. :-)
	- Eric Sunshine eliminated a few instances of NULL which had crept back
	  into the project.
	- res made the following changes to the new renderer system:
	    - Index buffers aren't treated in a special way any more now.
	      Just your average vertex buffer.
	    - Changed the internal implementation of render buffers a bit.
	    - Renamed stencil shadow binary to 'rlsstencil' to fit in with the
	      other renderstep plugins.
	- Wouter added the option wfoNoDrag to aws windows, making the window
	  non-draggable. Fixed fs3dMask constant to fit available values.
	- res made the following changes to thing:
	    - Polys are now triangulized as single triangles instead of tri
	      fans. That makes it possible to store multiple poylgons in a
	      single rendermesh. Now one rendermesh per material is created.
	    - Index buffer now uses UNSIGNED_INT instead of INT. The latter
	      one doesn't seem to be liked by ATI's Cat3.4.
	- res added a Jamfile for the stencil shadow renderstep.
	- Eric Sunshine made the following changes:
	    - Renamed csGetAppPath() to csGetAppDir() to better reflect its
	      function.
	    - Added a new csGetAppPath() which returns the actual absolute path
	      to the executable (as opposed to csGetAppDir() which returns the
	      directory containing the executable).
	    - Added csGetResourceDir() as complement of csGetAppDir().  On many
	      platforms, the resource path is the same as the application path,
	      but this might not be true for all platforms.  For instance, on
	      MacOS/X, csGetAppDir() needs to return the directory in which the
	      .app wrapper is contained, however csGetResourceDir() needs to
	      return the Resources directory inside the wrapper.
	    - Added platform-specific csGetAppDir() and csGetResourceDir() for
	      MacOS/X.
	    - Updated the generic csGetPluginPaths() so that it includes the
	      result of csGetResourceDir() in the plugin path list.
	    - The above changes should allow the MacOS/X port to once again
	      locate its plugin modules.
	    - Fixed bug: In the case of a bare program name as argv[0] (as
	      opposed to an absolute or relative path), the default
	      csGetAppDir() in cssys/general simply returned the first
	      component of PATH which actually existed, rather than returning
	      the component of PATH which contained the application.
	    - Fixed bug: The default csGetAppDir() in cssys/general was always
	      using ';' as the path delimiter, even though that only works for
	      Windows.  Now uses ':' for Unix and Unix-like platforms.
	    - Fixed bug: The default csGetPluginPaths() in cssys/general was
	      attempting to prevent pushing "/" onto the plugin path list
	      (because "/" has ambiguous meaning under Windows), but was
	      instead actually preventing addition of any absolute path to the
	      list (that is, any path beginning with "/").
	    - Renamed iCommandLineParser::GetAppPath() to GetAppDir() to better
	      reflect its function.
	- Eric Sunshine disabled default recursion for now by the plugin
	  discovery code.  Many developers run their programs from within the
	  source tree, and the recursive scan of the source tree are needlessly
	  excessive.  In general, recursive scan during plugin discovery is
	  useful, but we need to think it out more before re-enabling it.
        - Philip Wyett removed '#include "csutil/string.h"' which does not
          exist from appdir.cpp.
	- Wouter fixed off-by-one bugs in opengl 2d drawing. This causes
	  aws and csws to draw correctly (for me).
	  In gl3d the DrawPixmap routine is fixed to use the same
	  computation as glcommon2d is using.
	  Computation of a y location is gly = height - y.
	  The gly then has a range of 1..height. Still it is OK.
	  On opengl gly=0.0 is off screen. gly=height is also off screen.
	  Also, using gly=height-y gives results where absolute pixel
	  values (as seen with screenshots) are equal to the pixels
	  written by the software version. Thus height-y is used instead
	  of the height-y-1.
	  Closed three sf-bugs on this topic.
19-Jun-2003
	- HangDude did following:
	    - Added anonymous render buffer manager class, which can be used to
	      implement the anonymous render buffers for new renderer easily.
	    - "stream" to "renderbuffer" namechange in genmeshldr
	- Oktal made the following changes to the Perl plugin and module:
	    - Got rid of all the warnings in the Perl plugin and module,
	      some by fixing them and some by ignoring them with compiler
	      switches and pragmas.
	    - Added csString to those classes wrapped by Swig (same change
	      also made to Python module).
	    - Uncommented the plugin from user.mak.
	- Oktal fixed a typo and a missing #include in unix/instpath.cpp.
	- Duhprey did the following (new renderer):
	    - Added Shadow Volume step for custom renderloop, needs
	      speed optimiations
	    - Modified Light Iterator step to always do stencil write
	      (should be optimized out later when stencil writes aren't
	      needed)
	- Jorrit fixed various compile errors in csStringArray which were
	  introduced after the changes to char const*. These changes were
	  incomplete.
        - Philip Wyett commented out all MSVC project file related lines
          in csperl5 plugin makefile, until time permits to investigate why it
	  hangs the nsvcgen process when run locally.
	- res fixed:
	    - Wrong parameters for *nix csGetPluginPaths().
	    - Stupid bug where the name of the .csplugin instead of. dll file
	      was returned as the plugin path on Win32.
	    - Matze wrote docu about per-user config on unix.
	    - Matze made the configure script abort if libz is missing.
        - Philip Wyett removed csperl5 plugin from CS build process.
	- Eric Sunshine eliminated incorrect statement in documentation of
	  iConfigManager in iutil/cfgmgr.h where it claimed that the dynamic
	  domain's iConfigFile could not be changed after construction.
	- res made the following changes:
	    - Split scfInitialize() into two versions, one with (argc, argv),
	      one with (csPluginPaths*) arguments.
	    - Improved 'context' handling a bit.
	    - Added iSCF->ScanPluginsPath() for convenience.
	    - Fixed general csGetAppPath () to return 0 on an empty argv[0].
	- res added the ability to load a single plugin and further improved
	  SCF factory 'contexts'.
	- res fixed Win32 csLoadLibrary() which has been messed up by himself.
	- Philip Wyett fixed a compile error in cmdline.cpp.
	- Marten made the following changes:
	    - Changed duhpreys shadowcode to use GetPolygonMeshShadows at first,
	      then fallback to GetPolygonMeshColldet.
	    - Added setting of PolygonMeshShadows in genmesh.
	    - Added stencil to user.mk
	- res started working on converting thing for NR. You already can see
	  something, but it's still rather crude and naive, tho.
18-Jun-2003
	- Jorrit added a new 'do_logo' command to walktest. Assigned 'l' key
	  to it. This command toggles the display of the logo.
	- Eric Sunshine updated the discussion of C++ templates in the
	  coding/portability section of the user manual to reflect the fact
	  that we do now allow templates, though with certain restrictions.
	- Marten removed the sc. discardingsystem for renderbuffers
	- Marten ported the ballmesh, nullmesh, simplecon and csconout to
	  new renderer.
	- res made the following changes:
	    - Added some documentation about per-user configs.
	    - Fixed csGetAppPath() on unix.
	    - On Win32, external .csplugin files are supported again (in
	      addition to embedded metadata.)
	    - SCF factories have internally a 'context' now. The 'context'
 	      basically identifies the directory of a plugin and is used to
	      decide whether duplicate class ID will be reported or not.
	    - Eliminated a bit of redundant code and used more macros in
	      the GL extension manager to reduce it's bloat a bit.
	    - Renamed "win32/syspath.cpp" to "win32/winsyspath.cpp".
	- res fixed mdl2spr and nettut for the changed scfInitialize() syntax.
	- res restored the 'old' unix csGetPluginPaths ().
17-Jun-2003
	- Marten fixed an error with uninitialized extensions in render3d.
	- Marten fixed jamfiles for glshader_. They need to link to GL.
        - Philip Wyett updated cs_pyth.cpp and associated .py in cvs and also
          fixed a typo in a csvector.h comment.
	- Eric Sunshine fixed a lot of const versus non-const char* problems in
	  csStringArray.  (Bug #755721)
	- Eric Sunshine fixed several problems recently introduced into
	  csLoadLibrary() in OSXDynamicLibrary.cpp:
	    - Compilation error: Incoming argument did not match variable name
	      used in code.
	    - Run-time failure: Was using a lot of hard-coded constants for
	      path dissection, but the constants were incorrect.
	    - Memory trashing: Was not allocating sufficient memory for the
	      working path buffer, thus corrupting memory beyond end of buffer.
	    - Memory leak: Was leaking the working buffer.
	- Eric Sunshine fixed library.jam so that it correctly resolves the new
	  csutil/cssys dependency.  There are now several layers of circular
	  dependencies between these two libraries.
	- Eric Sunshine applied a quick-patch to cs-config so that it should
	  now be able to handle the additional circular dependency between
	  csutil and cssys.  Perhaps Matze could apply a better fix, since he
	  probably has a better understanding of his own code.
	- Eric Sunshine eliminated unportable `test -e' from cs-config/Jamfile.
	- res changed the Win32 plugin paths to cause less recursive directory
	  scanning.
	- Oktal added macros to perlpost.i to allow users to implement
	  certain interfaces by writing classes in Perl, and made use of those
	  macros for iEventHandler and iAwsSink; it is easy to add more.
	- Oktal removed an old, unused line from libs/cssys/win32/loadlib.cpp
	  that was causing an error in Cygwin.
	- Oktal added a missing line to the macros in perlpost.i that showed
	  up as an error with certain versions of Perl, and added iEventPlug
	  to the list of interfaces which can be implemented in Perl.
	- res made the following changes:
	    - Added a few helpers to deal with native paths and plugin paths.
	    - All platforms now use the same plugin paths:
	      <app dir>, $CRYSTAL/lib, $CRYSTAL/crystal, $CRYSTAL
	      (where $CRYSTAL is the CS installation dir)
	- Marten renamed iStreamSource to iRenderBufferSource and GetBuffer to
	  GetRenderBuffer. In the classes the terms stream and renderbuffer are
	  mixed, from now on use just the term renderbuffer.
	- Oktal added reference counting to the interface implementation
	  wrapping macros for their internal Perl variable, and added a
	  paragraph to the documentation about same.
	- res fixed double compilation of cssys/win32/syspath.cpp with jam.
	- duhprey did the following:
	    - Quick fix to return current working directory instead of App's
	      full path
	    - Added #include "cssys/syspath.h" so vfs could find
	      csGetConfigPath
	- Oktal fixed a preprocessor directive in csprocessorcap.h,
	  it's "#elif" not "#else if".
	- res added the missing pluginpaths.cpp to MSVC libcssys.
	- res changed the plain "#elif" to "#elif defined()" in
	  csprocessorcap.h.
	- res fixed a couple of NR makefiles for proper MSVC project
	  generation.
	- res removed sysinit.cpp from Win32 cssys. Win32 has it's own version
	  of those functions.
        - Philip Wyett performed a minor cleanup in win32.mak and added
          #include "cssys/syspath", fixing the compile error in the Python
          plugin.
16-Jun-2003
	- Oktal separated a multiple-argument %ignore directive into several
	  single-argument ones, in perlpre.i, in order to support older
	  versions of Swig.
	- Jorrit made the <moveable/> option no longer required (it is now
	  deprecated).  The thing mesh object plugin will not automatically
	  detect if it is needed to switch to moveable or not.  So setting this
	  is no longer required.
	- Jorrit removed <moveable/> output from map2cs.
	- Jorrit removed mention of <moveable/> from documentation.
	- Jorrit fixed a bug in DeferUpdateLighting(). It was not correctly
	  transforming the bounding box of the object to world space.
	- Jorrit added a 'toggle_mmx' command to Dynavis. Assigned BugPlug
	  key '8' to that. This new command toggles the mmx capability on/off.
	- Jorrit replaced _X86_ with PROC_X86 in the tiled coverage buffer.
	- Jorrit replaced _X86_ with PROC_X86 in csProcessorCapabilities.
	- Jorrit fixed a bug in csNodeIterator. It was not working correctly
	  at all.
	- Marten made a few changes to buffers in render3d:
	    - Remade the buffer-management in render3d. The buffermanager is
	      removed and replaced by a CreateRenderBuffer in iRender3D.
	    - Removed VAR and VBO buffers
	    - Added VBO (vertex_buffer_object) based buffers.
	- Marten cleaned up code in gl_render3d and genmesh. Removed old
	  deprecated code and some general cleanup.
	- res made the following changes:
	    - Removed the csFindLoadLibrary() stuff. Plugins are now solely
	      loaded via native, fully qualified paths.
	    - Made storing the user config in "Documents & Setting" on Win32
	      the default.
	    - Some Jamfiles updated.
	- Oktal fixed a pointer arithmetic error in res's changes to cssys.
        - Philip Wyett fixed formatting in the MSVC 6 project plugin template.
	- res readded the VC6 templates as 'binary'.
15-Jun-2003
        - Boyan added property "Image" that can be set in AWS component "Image
	  View".
	- Oktal rearranged the documentation of the scripting language stuff in
	  the manual, and added Perl docs.
	- Oktal moved from cspace.i to pythpre.i the rename directive of
	  iDataBuffer::operator*() to iDataBuffer::asString(), and added a
	  Perl-specific wrapper for that method to perlpost.i.
	- Oktal changed /* in include/csutil/list.h to /** to fix the doxygen
	  comment, so that csList will be added to PubAPI.
	- Jorrit changed a comment for ThreadedLoadMapFile() to indicate that
	  it doesn't work yet.
	- Marten added the class csProcessorCapabilities to allow CS to query
	  processorspecific extensions and information.  Some functions in this
	  class is processorspecific and some parts compilerdependant so we
	  must protect certain areas with #defines
	- Marten made these changes to dynavis
	    - Added a fix to csVisibilityObjectHistory to make it set reason on
	      initializationtime.  This fix a bug where bugplug/dynavis
	      segfault when trying to use the linedrawing debugging in dynavis.
	    - Made the inner XOR-filling loop in csCoverageTile::Flush use MMX
	      on machines which support MMX.  The loop is written twice, once
	      in MSVC and once in GCC inline assembly.  The reason for this is
	      speed.  It could have been written in NASM as a separate
	      function, but the overhead for the functioncall is too big.
	- res added a work around for a static linking problem to static.mak.
	- res renamed csScanPluginsDir() to csScanPluginDir(), added
	  csScanPluginDirs(), and implemented a general csGetPluginMetadata().
	- res removed the fopen() hack.
	- res added Jamfiles for the render loop loader/standard rendersteps
	  along with some minor compile fixes.
	- res updated the MSVC6 makefile templates.
	- res made the following changes to the MSVC warning suppression:
	    - added some missing descriptions of silenced warnings
	    - removed silencing of "unused variable" warning and turned
	      emission of "class has virtual functions, but destructor is not
	      virtual" on. This is the beginning of an attempt to have MSVC
	      emit the same warnings as GCC (as far as possible.) More tweaks
	      will follow over time.
	- res made some common functions 'intrinsic' on MSVC.
	- res fixed a few compiler warnings.
        - Philip Wyett eliminated link errors in many of the applications
          under GNU Linux.
14-Jun-2003
        - Charlls put a temporal fopen() hack in
          libs/cssys/general/scanplugins.cpp to fix some linking problems
          under linux.
	- Jorrit got a fix from Arthur K. (nemerle@lsk.pl) for two memory
	  leaks in AWS.
	- res changed the way how SCF plugin scanning works:
	    - Moved scanning invocation to scfInitialize().
	    - A platform-dependent function, csScanPluginsDir(), returns
	      plugin filenames and metadata.
	    - Such a function is provided for Win32. For unix and MacOS/X,
	      the "old" function that scans for .csplugin files is used.
	- res made the following changes:
	    - The DirectDraw configure time test now also tests for
	      DirectSound, and thus changed the makefile var nomenclature to
	      "DirectX".
	    - Slight changed the way DLLs are loaded on Win32: now
	      LoadLibraryEx() is used with a flag which causes Windows to
	      first look for the actual file in the specified directory.
	    - On Win32, plugin metadata is now contained inside the DLL.
	- res worked around problems with static linking. Specifically, it was
	  assumed that a factory function is always only used for a single
	  class. This is not always the case (e.g. the bezier loader.)
13-Jun-2003
	- Oktal renamed the function AutoLoad slightly, to avoid conflict with
	  the Windows API identifier of the same name, in perlpost.i.
	- Oktal switched Cygwin build from using Winsock to Posix Sockets,
	  since Winsock was confusing Swig.
	- Oktal added #ifndef directives to math2d.h and plane.h in
	  include/csgeom, where those files define the same macros.
	- Eric Sunshine applied a fix to SRC.CSSYS and INC.CSSYS in cssys.mak
	  where it was prefixing an extra $(SRCDIR) to items from SRC.SYS_CSSYS
	  and INC.SYS_CSSYS which already mentioned SRCDIR.  Problem was
	  pointed out by Frank Richter.
	- Jorrit clarified a comment with iEngine->Prepare().
	- Jorrit added two versions iEngine->ForceRelight(). The first version
	  relights all lightmaps in the engine. The second version updates
	  the lightmaps for a given light (i.e. useful after adding
	  a static or pseudo-dynamic light).
	- Jorrit fixed a problem where the engine would always attempt
	  to read precalc_info even if reading from the cache was disabled.
	- Jorrit added a new 'addstlight' command to Walktest. This command
	  adds a static light and uses the new ForceRelight() function to
	  recalculate lighting. alt-l is assigned to this command by default.
	- Jorrit fixed thing so that initializing lighting again will actually
	  cause the lightmaps to be updated correctly.
	- Jorrit forgot to remove a parameter to the second version of
	  ForceRelight().
	- Jorrit added region parameter to ForceRelight().
	- Jorrit added iEngine->RemoveLight() to remove a pseudo-dynamic
	  static lights and also automatically update all lightmaps. In case
	  of a static light this will not update the lightmaps unless
	  ForceRelight() is called later.
	  NOTE! Currently not implemented yet!
	- Jorrit Extended iLightingInfo->InitializeDefault() with a new flag
	  telling the lighting sub-system if the lighting information should
	  be cleared or not. This allows correct handling when a single light
	  is added in case of genmesh and bezier curves.
	- Jorrit added iLightingInfo->StaticLightDisconnect() so that a light
	  can be removed.
	- Jorrit implemented iEngine->RemoveLight(). However since none
	  of the mesh objects correctly implement StaticLightDisconnect()
	  the function will not actually work even though it is fully
	  bugfree :-)
	- Jorrit added 'delstlight' command to walktest to delete a
	  static light. Also changed 'addstlight' to make the light
	  pseudo-dynamic so that removing it works correctly.
	- Eric Sunshine augmented the Jam system so that it now builds the
	  new renderer if --enable-new-renderer was specified with configure.
	- Matze fixed broken install_maps target in jam. And added a TODO.
	- Jorrit fixed thing so that removing a pseudo-dynamic light actually
	  works.
	- Matze fixed broken install_maps target in jam. And added a TODO
	- Gregory Block added support for OS X's NSUserDefaults system to
	  replace user.cfg with the standard user preferences system on OS X.
	- Eric Sunshine fixed render3d/opengl/Jamfile so that it links the
	  plugin against the OpenGL library.
	- Jorrit fixed the bezier mesh so that ForceRelight() with a new
	  light also works.
	- Jorrit fixed the bezier mesh so that removing a pseudo-dynamic
	  light also works.
        - DeSigna patched Gersh's awsWindow::OnMouseMove() to obey a
	  new wfoDontCaptureMouseMove option, correcting some problems
	  with the previous patch and transparent windows with
	  mouse-capturing children.
        - DeSigna performed some more minor updates to the CS manual's
	  introductory chapter.
	- Eric Sunshine repaired a number of Texinfo problems introduced over
	  the last few weeks which caused documentation conversion to fail with
	  makeinfo and TeX.
	- Eric Sunshine fixed a bug in vfs/Jamfile where it did not ensure that
	  the output directory of the generated vfs.cfg existed before
	  generating vfs.cfg.
	- DeSigna added a comment to the contribs section, changed
	  some minor formatting for the printed manual.
	- Duhprey added a line to the hashmap constructor forcing bucket
	  capacity to a prime number
	- Eric Sunshine performed Phase Four of the elimination of the
	  monolithic scf.cfg:
	    - Repaired static linking mode so that it works with the new SCF
	      design.
	    - Added new macros SCF_REGISTER_STATIC_LIBRARY() and
	      SCF_REGISTER_FACTORY_FUNC() which can be used in aid of static
	      linking (and other special cases).
	    - Added iSCF::RegisterClasses(char const*) convenience variation.
	    - Added iSCF::RegisterFactoryFunc() which allows clients to
	      register a class factory function after-the-fact (that is, after
	      a class has been registered).
	    - Modified static.mak and static.jam to utilize the new
	      SCF_REGISTER_STATIC_LIBRARY() and SCF_REGISTER_FACTORY_FUNC()
	      macros when creating the special static-link stub source files
	      which register the SCF classes and ensure that the program links
	      with the appropriate libraries.
	    - Redesigned the sed expressions used in creation of the plugin
	      .def files on Windows.  Was able to eliminate
	      CS/libs/cssys/win32/mkdef.sh since the sed expressions no longer
	      contain embedded newlines.
	    - Still To-Do:
		- Remove references to scf.cfg and scfreg from documentation.
		  Also document new .csplugin resources.
		- Add platform-specific function to scan and locate plugins
		  automatically rather than using the ad-hoc approach inherited
		  from scanning for .scf files.
		- Add platform-specific function to query a plugin's
		  meta-information.  This should be used by SCF to do the raw
		  extraction.  Provide and finalize API for higher-level
		  clients to access meta-information.
12-Jun-2003
	- Jorrit clarified a comment with csColliderWrapper telling people that
	  you must DecRef() the new collider wrapper after creating it.
	- Jorrit fixed a small bug in the thing plugin in case a polygon mesh
	  was requested before the thing was prepared and in case the
	  thing contained a portal.
	- Jorrit reverted a change that res did about four weeks ago. Instead
	  of copying the texture name for loading a texture he kept a pointer
	  to it. The problem with that is that the filename of the texture
	  (out of the child XML node) is not guaranteed to remain in memory
	  while the node is out of scope. So a copy is required. Also in
	  addition it was no longer possible to omit the <file> keyword
	  if the filename happened to be equal to the texture name. The result
	  of that was that dmburg failed.
	- Matze fixed a stupid mistake where 3ds2lev forgot to output lights.
	- res changed csRegistryConfig::Save() and Load() from returning
	  'false' to 'true', fixing a false error report when the config
	  manager invoked those methods.
	- duhprey fixed a dependency problem with the common area in the
	  renderloop plugins
	- res augmented configure to accept an --enable-new-renderer option,
	  emitting CS_USE_NEW_RENDERER to volatile.h and setting an
	  USE_NEW_RENDERER makefile var.
	- duhprey added missing SCF_CONSTRUCT_IBASE () in csRenderLoop
	  constructor
	- Luca Cappa (groton@gmx.net) fixed a very small bug in awstut: in fact
	  in the main (), if the Initialize() method would fail, there will be a
	  memory leak due to the non-destruction of the awsTutorial class
	  instance.
	- res fixed win32gcc.mak where the resourcer merger and compiler
	  invocation didn't respect $(SRCDIR) causing "file not found"
	  errors.
	- res added a script to package XML metadata into a Windows resource
	  script.
	- res changed the texture parser to only use the texture name as a
	  source image file name if neither a <file> nor a <type> have been
	  specified; previously, this was always done, with the result that
	  the loader always tried to load an image with the texture name as
	  the filename, causing a confusing warning in flarge.
11-Jun-2003
	- Eric Sunshine removed an invocation of class_scfFinalize() from
	  SCF_REGISTER_STATIC_CLASS() which should have been removed yesterday
	  as part of Eric's other fixes to SCF.  This patch eliminates a
	  shutdown-time crash caused by static global variables being destroyed
	  twice.  (Bug #752140)
	- res fixed a stupid bug in the Win32 registry configuration where a
	  string was deleted and immediately used after. One of the symptoms
	  were non-functional writing of settings.
        - DeSigna added an assertion that ensures csString::SubString()'s
          csString& argument isn't itself.
	- res added code to save user configuration in Documents & Settings
	  on Win32. Still disabled, though.
	- res changed the way special folder paths are retrieved on Win32;
	  now shfolder.dll is used.
	- res added "CrystalSpace." prefixes to the default "Noname"
	  application ID and to those of CS demo apps.
	- res augmented csInitializer::SetupConfigManager() to read user.cfg
	  again for some backward compatibility. user.cfg has a lower priority
	  than the platform-specific configuration.
	- res completed the render loop loader. This includes that the default
	  render steps have been moved to a plugin.
	- res completely banished user.cfg from all spheres of
	  csInitializer::SetupConfigManager() and out of reach of mortal
	  beings. Also changed OS/X makefile to use the Unix platform
	  configuration (in lack of a special OS/X variant.)
	- Matze modified the csConfigManager to save the config when in it's
	  destructor and to report some errors in case of failure.
	- Matze fixed a bug in csConfigFile: It was setting Dirty=false
	  if SaveNow failed.
	- Matze also fixed a bug in unix config code.
10-Jun-2003
        - Philip Wyett eliminated signed/unsigned mismatch warning in
          function csString::SubString ().
        - DeSigna fixed an AWS bug reported by Gersh:
	  <Gersh> DeSigna: in awswin.cpp's OnMouseMove function, change
          the return false to a return true.
          (It was not possible to tell if aws deals with a move event if
          the mouse is over a window).
	- Jorrit fixed a bug in registrycfg.cpp. If SetStr() was called
	  with a 0 value then it would cause a crash. Now it does the
	  correct thing which is deleting the key.
	- DeSigna added csString::FindLast(). iString/scfString has
	  been updated for new SubString, FindFirst and FindLast
	  members.
	- DeSigna fixed minor off-by-one bug in
	  csString::FindLast(). Documentation for FindFirst/FindLast
	  has been updated to include the not-found status return
	  value.
	- Eric Sunshine fixed a problem where SCF potentially was initializing
	  and finalizing plugin modules multiple times as classes exported by
	  the plugin were instantiated and destroyed.  This caused serious
	  havoc since the static variable cleanup code was being invoked
	  multiple times on the same loaded plugin module.  To fix, instead of
	  trying to keep track of class usage within the plugin in order to
	  determine when to initialize and finalize, SCF simply now invokes
	  one, and only one, set of initilaization/finalization functions which
	  are present in a plugin module.  (One pair of functions is present
	  for each exported factory.)  Initialization is now invoked only
	  immediately after the plugin is loaded.  Finalization is now invoked
	  only immediately before the plugin is unloaded.  This problem was
	  introduced with Eric's large SCF changes on June 5, 2003.
	- Jorrit renamed strarr.h to stringarray.h.
	- res made the following changes:
	    - Moved CS_INITIALIZE_PLATFORM_APPLICATION invocation to
	      csInitializer::CreateEnvironment() and also augmented the
	      doxygen documentation, as suggested by ES.
	    - Added iWin32Assistant::GetApplicationWindow().
	    - Replace use of GetForegroundWindow() in DirectSound3D renderer
	      with above (bug 751779).
	    - Fixed scfString::FindLast() not returning a value.
	- Matze improved the introduction message in createproject.sh
	- res changed the Win32 registry config to store floats as strings
	  instead of binaries for better human readability.
	- Matze implemented platform config on unix. Now config files are
	  created in $HOME/.crystal
	- res changed the Win32 registry to create a key only if a value is
	  written to reduce registry clutter. The old behaviour was to create
	  a key every time a config object was just requested.
9-Jun-2003
	- Jorrit made a new csStringArray class.
	- res made the following changes:
	    - Added a macro CS_INITIALIZE_PLATFORM_APPLICATION which is
	      intended to placed near the very start of an application. It is
	      supposed to contain platform-specific initialization stuff,
	      though it's currently only used for MSVC-specific debug flag
	      tweaks.
	    - CS_INITIALIZE_PLATFORM_APPLICATION is now employed in
	      csInitializer::InitializeSCF().
	    - Removed ugly main() renaming hack for Win32.
	    - csInitializer::SetupConfigManager() now attempts to create
	      a platform-specific configuration instance for the user
	      configuration. Falls back to old user.cfg mechanism if
	      csGetPlatformConfig() returns 0.
	    - Added a dummy csGetPlatformConfig() in
	      libs/cssys/general/platformcfg.cpp.
8-Jun-2003
	- Eric Sunshine fixed problems in csInitializer::CloseApplication() and
	  csInitializer::DestroyApplication() where they threw assertion
	  failures if a shared event queue was not present.  Since the idea of
	  the various initialization and setup functions in csInitializer is to
	  allow clients to pick and choose which components to use, it was
	  wrong for these shutdown functions to make the assertion that certain
	  components must be present.  This issue was reported by Troy Chard
	  <troy.chard@shaw.ca>.
	- Eric Sunshine fixed a compilation error in m2s_mdl.cpp introduced
	  when some of the RegisterClass() overloads were removed from iSCF
	  during Eric's Phase Three removal of monolithic scf.cfg.  (Bug
	  #749883)
6-June-2003
	- res did further fixes related to the new shader var stuff.
	  r3dtest now seems to run fine (for me, at least.)
	- Wouter fixed up the iso engine. When a sprite is added to
	  a grid, then the sprite is lighted by the static lights.
	- groton@gmx.net added the method csQuaternion::GetEulerAngles.
	- DeSigna fixed a single word error in manual section 5.2.3,
	  pointed out by Aner (crystalspace@myway.com)
	- DeSigna fixed some minor diagnostic message bugs in nettut.
	- Duhprey fixed bug #710229: bad indexing in nterrain and fixed
	  for lighting in tbtut, but its too slow so its commented out.
5-June-2003
	- Oktal removed the setting to 0 of event category and subcategory
	  now that the event queue does that for us.
	- Oktal replaced the iEvent::Pooled() method with IncRefUnlessPooled()
	  and DecRefIfPooled(). It is indicative of inflexible procedural
	  design if you find yourself using conditional statements to
	  destinguish between objects of different types.
	- Oktal added the shader variable system to the new renderer, and
	  fixed const-correctness throughout the renderer.
	  Note I can't test this since I don't have GL.
	- res modified the engine to change to the default render loop when
	  the world-specific settings reset.
	- res augmented the map loader to allow setting of a <renderloop> in
	  a map's <settings>.
	- res added support for render loop loading through the <addon>
	  mechanism.
	- res started working on a generic render step plugin. For now just
	  compiles, but doesn't do anything yet.
	- res added missing csEvent::DecRefUnlessPooled() and
	  csEvent::IncRefIfPooled().
	- Jorrit documented the three rotation matrices (csXRotMatrix3 and
	  so on) to describe exactly how they work. This is to solve the
	  confusion around csYRotMatrix3 which works differently as to how
	  CS works in general.
	- Jorrit fixed csNodeIterator to the new iterator syntax.
	- Jorrit changed the VERY inefficient post-increment/decrement
	  operators in csList<T>::Iterator to use pre-increment/decrement
	  instead. Otherwise you get a lot of unneeded object creation.
	  Also added Next() as a synonym to ++ so that you can now
	  use the standard while (HasNext()) { Next(); ...} construct too.
        - DeSigna corrected a range checking bug in csString::SubString(),
	  and made the second range argument a length instead of an index.
	- Jorrit fixed csProcFile inheritance to use public inheritance
	  for iFireTexture instead of private inheritance.
	- Jorrit did the following documentation updates:
	    - Plugin/graphics section (removed Direct3D and a few other
	      updates).
	    - Updated section about procedural textures in the documentation.
	    - Added a howto section on procedural textures which simply
	      refers to the procedural texture section in plugins.
	    - Updated the engine components section in the documentation.
	    - Updated the portal section in the documentation.
	    - Added a reference to the procedural texture documentation from
	      within the section describing animation techniques for textures.
	    - Another small documentation update.
	- Eric Sunshine fixed ddraw8/Jamfile so that it only enables the ddraw8
	  target if DirectDraw8 is present (DDRAW8.AVAILABLE=yes).  This
	  prevents Jam from trying to build this plugin when a lesser version
	  of DirectDraw is enabled (in which case the build would fail).  Note
	  that we need to add a DirectDraw8-specific check to configure.ac.
	- Jorrit fixed an error message in the genmesh loader. It would
	  complain about too many colors when it meant too many vertices.
	- Eric Sunshine eliminated a compilation warning in ensocket driver
	  regarding signed versus unsigned comparision.
	- Eric Sunshine performed Phase Three of the elimination of the
	  monolithic scf.cfg:
	    - Eliminated the SCF information which was hardcoded in the .cpp
	      files of plugin modules, and which duplicated information in the
	      external .csplugin files.
	    - Plugin modules no longer maintain and export a monolithic class
	      list.  Now, each factory implemented by the code is exported
	      automatically.
	    - Added a new <implementation> child node to the <class> node in
	      .csplugin files.  The value of this node is the name of the C++
	      class which implements the SCF class.  For instance, C++ class
	      csVFS implements crystalspace.kernel.vfs.
	    - Eliminated the following SCF macros which were related to
	      exporting SCF information from .cpp code and/or registering
	      classes manually:
	    	SCF_EXPORT_CLASS_TABLE
		SCF_EXPORT_CLASS
		SCF_EXPORT_CLASS_DEP
	    	SCF_EXPORT_CLASS_TABLE_END
		SCF_REGISTER_STATIC_CLASS_DEP
	    - Eliminated the following methods from iSCF:
		RegisterStaticClass
		RegisterClassList
	    - Plugin modules are now initialized/shutdown lazily as classes are
	      requested from them.  The first time a class is requested, the
	      plugin is initialized.  The plugin is shutdown after the last
	      class instance has been destroyed.
	    - Fixed bug in scf.h where SCF_PRINT_CALL_ADDRESS was not being
	      enabled for gcc 3.x.
	    - Fixed bug in win32.jam where GenerateExportDefs rule failed to
	      ensure that directory containing output file existed before
	      creating file.  Also fixed bug where it failed to set up a
	      dependency between the input and output files.
	    - Still To-Do:
		- Remove references to scf.cfg and scfreg from documentation.
		  Also document new .csplugin resources.
		- Add platform-specific function to scan and locate plugins
		  automatically rather than using the ad-hoc approach inherited
		  from scanning for .scf files.
		- Add platform-specific function to query a plugin's
		  meta-information.  This should be used by SCF to do the raw
		  extraction.  Provide and finalize API for higher-level
		  clients to access meta-information.
		- Augment static linking to work with the new facility.
		  (Removal of the hardcoded SCF information, has now broken
		  static linking.  It worked until this time, even with all of
		  the preceding changes.)
	- Eric Sunshine disabled an assertion and static variable cleanup in
	  SCF temporarily since they are causing crashes at shutdown time.
	  Need to investigate the causes and devise suitable solutions.  By
	  disabling them temporarily, people won't have to be bothered by
	  shutdown-time crashes.
	- Matze fixed a bug in csObjectIterator pointed out by groton and also
	  cleaned the code up there.
	- Jorrit removed Blocks from CS. Blocks is now a separate project
	  (http://sf.net/projects/blocks3d).
	- Jorrit removed several entries to Blocks from the documentation.
	- acraig fixed the csList<T>::Delete() to use pre-increment.
	- res started to fix the incomplete shader variable stuff. The shader
	  manager compiles+links now, at least.
4-June-2003
	- Jorrit fixed a bug in the AWS engine view where it would not set the
	  FOV of the camera based on the height of the frame. This caused the
	  engine view to look a bit weird.
	- Jorrit added iPluginManager->QueryOptions() so that it is possible
	  to do the commandline options later.
	- Jorrit changed iPluginManager->LoadPlugin() so that it no longer
	  calls QueryOptions() automatically if the 'init' parameter is false.
	- Jorrit changed the csPluginLoader so that it only queries commandline
	  options for all loaded plugins AFTER all plugins are initialized.
	  This fixes a lot of commandline options (like -ilace, -smaller
	  for software renderer and -fov for engine).
	- Jorrit changed the following iterators to conform to the new
	  CS iterator standard which means there is a HasNext() function
	  and a Next() (and optionally a Reset() if the iterator supports
	  that).
	      - iVisibilityObjectIterator
	      - iLightIterator
	      - iSectorIterator
	      - iObjectIterator
	      - iObjectRegistryIterator
	      - csTypedObjectIterator
	      - csModelDataActionIterator
	      - csModelDataPolygonIterator
	      - csModelDataTextureIterator
	      - csModelDataMaterialIterator
	      - csModelDataObjectIterator
	- Jorrit additionally updated the iStreamIterator.
	- Eric Sunshine corrected ddraw/g2d.cpp so that it uses a fixed SCF
	  class identifier in SCF_EXPORT_CLASS_DEP() rather than using the
	  CS_SOFTWARE_2D_DRIVER macro which might change value, inadvertently
	  causing the ddraw2d plugin to change identity.
	- Eric Sunshine renamed MY_CLASSNAME macros in several plugins to use
	  distinct names.  This simplifies the conversion script (slightly) for
	  upcoming Phase Three of the elimination of the monolithic scf.cfg.
	- res updated some render loop interfaces.
	- res fixed the light attenuation choices in the Hammer fgd script.
	- Jorrit forgot to replace a few NULL -> 0.
	- Eric Sunshine eliminated the unimplemented
	  crystalspace.mesh.saver.cloth SCF registration from the cloth loader
	  plugin export table.
	- Eric Sunshine added missing crystalspace.video.codec.avi.dvx1
	  registration to odivx4.csplugin.
	- Eric Sunshine added missing crystalspace.video.codec.avi.RLE
	  registration to rlecodec.csplugin.
	- Oktal added an Event->IncRef() to csEventQueue::Post() that will
	  only be triggered if the event is from the event pool, otherwise
	  when the caller's reference to the event goes out of scope, the
	  event will be removed from the queue and returned to the pool.
	  This problem was evident in the network manager.
	- res added Get() and Delete() methods to csHashMapReversible that
	  work on a key string.
	- res added a "render loop manager" to the engine.
	- res fixed some "csFooIterator::Next: recursive on all control paths,
	  function will cause runtime stack overflow" warnings on MSVC.
	- res removed iSectorRenderMeshList::GetVisible().
3-June-2003
	- Philipp Aumayr fixed the fancycon bug, where the borders
	  were visibile in SW but not in GL mode. (wrong mixmode at line
	  389 in fancycon.cpp)
	- Jorrit changed Blocks so it no longer uses HardTransform() on
	  genmesh instances.
	- Jorrit removed support for HardTransform() in genmesh objects.
	  Only HardTransform() for factories is supported.
	  The reason that I removed this is that it is not really needed
	  and it was very hard to get completely right. It was also not
	  very efficient.
	- Jorrit fixed a bug in the engine. It would forget to set the
	  fastmesh_thresshold from the config. So if you would load a map
	  without clearing the engine it would use the default 500.
	- Jorrit fixed Dynavis setup so that it will also switch to debug
	  mode (for unittest app) in case there is a g3d but the g3d isn't
	  initialized yet. This happens when you do 'unittest -video=software'
	  or 'unittest -video=opengl'.
	- Jorrit fixed OpenGL renderer so it no longer crashes if you create
	  a material directly out a texture handle as opposed to going through
	  the usual iMaterial way. The function to fetch a technique for
	  a given material assumed that when mat_handle is given then there
	  is always an iMaterial but that assumption is not true.
	  This fixes a crash with perftest with OpenGL.
	- Jorrit removed the light feature from the explosion particle
	  system. This feature caused more trouble then good because there
	  were several bugs related to this. If you need a light at an
	  explosion point then there are other ways to accomplish this (more
	  application controlled ways).
2-June-2003
	- Philip Wyett updated the docs to reflect a new msvc_libs release.
	- Jorrit fixed genmesh in case the genmesh object (not the factory)
	  itself is hard-transformed for the following functions:
	    AppendShadows()
	    UpdateLighting2()
	    UpdateLighting()
	- Jorrit updated csColliderHelper::InitializeCollisionWrapper()
	  function so that it compares the polygon mesh returned by the
	  object with the one from the factory. If they are different it
	  will use the one from the object. This fix makes sure that objects
	  can optionally override the object model if they need that.
	- Jorrit added default csPolygonMesh implementation for convenience.
	- Eric Sunshine fixed the DirectDraw check in configure.ac so that it
	  actually works.  Problem was that it was not including windows.h.
	  Also takes into account Jorrit's strange installation in which
	  windows.h barfs for lack of int32.  Finally, takes Cygwin into
	  account by checking if headers are present in /usr/include/directx.
	  Overall, this change fixes the problem where the Jam build system
	  would never build the DirectDraw canvas(es) because it thought
	  DirectDraw was unavailable.
	- Oktal fixed broken %apply directives in the Perl Swig module by
	  adding his own typemaps like those found in Swig's typemaps.i file
	  (since typemaps.i doesn't define typemaps for strings), and added
	  lots of nice comments to perlpre.i and perlpost.i.
	- Oktal fixed a couple of nasty typos (XSRETURN_SV and sv_setpvn)
	  in the Perl Swig module.
	- res fixed a stupid mistake in the new GL screenshot causing the
	  first line to contain garbage.
	- res made some slight changes to the movierecorder, hoping that
	  performance might be a tad better.
1-June-2003
	- Philip Wyett started adding MSVC 7 external app HOWTO screenshot
	  images.
	- res made some minor optimizations to the movie recorder.
	- res added output of some statistics when a movie finished recording.
	- res improved the performance of GL screenshots. They now deal
	  directly with the data returned from glReadPixels() and thus need
	  less computations on the pixel data. They also come from a pool
	  now, which reduces the number of new/delete calls when many
	  screenshots are requested (i.e. when recording a movie.)
	- (New Renderer) Anders Stenberg rewrote the custom render loop a bit
	  to be more general, and also added "foreachlight" support. Also
	  changed the way z-mode is set. Now it's set explicitly by a SetZMode
	  call, and not implicitly in DrawMesh. A csBasicVector in the
	  shadermanager has been replaced with csRefArray too.
	  (Might have introduced bugs with reference counts.)
	- Oktal overhauled the Perl Swig interface files, including:
	    - Recovered the csWrapPtr usage stuff that got misplaced during
	      Rene's reshuffling of the Python interface.
	    - Added operator overloading for logical and and or (although no
	      operators yet work because they depend on the existance of a
	      %perl5code directive in Swig.)
	    - Storing pointers as IV's (int) instead of PV's (string pointer)
	      in line with Swig's behaviour.
	    - Added a cspace::AUTOLOAD subroutine (called by Perl when a
	      non-existant object method is called) to give the module's
	      objects accessor methods for their properties, just like most
	      other Perl modules.
	    - Changed to proper argument handling for native Perl C functions;
	      now using the XS macros from Perl's API.
	    - Some big code blocks containing errors had been commented out;
	      fixed the errors and uncommented them.  These include bindings
	      for collision detection, hashmaps and requesting plugins.
	    - Added -Wno-unused to PERL5.CFLAGS to avoid loads of warnings in
	      Swig-generated code.
	    - Added wrappings for iString and csString.  The one for csString
	      is commented out until work can be done to fix it.
	- Oktal made the following changes to the Perl scripting plugin:
	    - Fixed broken Get() and Set() functions in the iScriptObject
	      implementation; now using the generally accepted convention for
	      accessing object properties in Perl.
	    - Got rid of the functions for manipuating void* pointers within
	      the scripting language since that is difficult in Perl, and
	      shouldn't be neccessary (use iScriptObject instead.) Now the type
	      specifier for iScriptObject's in the format strings is %p instead
	      of %O, we also get rid of some warnings in GCC.
	    - Replaced the GetType() function which returns the type of an
	      iScriptObject with an IsType() function which takes a string
	      parameter, `type,' and returns true if the object is that type,
	      or is derived from an object of that type, since that is easier
	      to do in Perl and probably other languages.
	    - Added reference counting of the internal Perl variables.
	    - Added #undef free and malloc since Perl headers #define those.
	    - Added tests for the new iScript methods to perl5test.
31-May-2003
	- Oktal fixed an error in the Perl plugin that only appeared with
	  certain versions of Perl, to do with their funny macros.
	- Anders Stenberg fixed a bug on Win32 where the main output window
	  wasn't shown sometimes because of a badly initialized variable
	  (cmdshow).
	- Keith Fulton fixed the OverrideAction problem, which was that if
	  Action A was running, and OverrideAction B was called, then
	  SetAction was again called with Action C while Action B was still
	  active, when Action B ended, Action A would be restored instead of
	  C.  Now, when SetAction(C) is called, the Override is cleared out,
	  so only Action C will run until further notice.
30-May-2003
	- Philip Wyett added the CS copyright notice and moved the includes to
	  the correct place in 'iddetect.h'.
	- res changed the Win32 port to eliminate the global ApplicationShow
	  and ModuleHandle variables. Those are now members of the
	  Win32Assistant and the values are retrieved at it's construction.
	- Matze fixed a crasher in the maploader.
	- Duhprey made the following changes to odedynam:
	    - Added linear and angular global dampening hack.
	    - Added interface for anonymous colliders in system, these have
	      body 0 in ode terms which makes then immune to gravity and
	      collision response.
	    - Modified joint interface to survive being attached to only one
	      body, the other is attached to body 0 and static on the other
	      end.
	    - Allowed an arbitrary execute callback for use when a mesh or a
	      bone is not attached to a body, but there is a callback handler.
	- Duhprey made the following changes to physldr:
	    - Fixed a few bugs in the parsing.
	    - Added parse commands for the new features in odedynam.
	- Eric Sunshine made the following changes to the Jam build:
	    - Removed some leftover junk from LinkStaticPlugins in static.jam.
	    - Added a hack to Jamrules to allow STATIC.PLUGINLIST work on all
	      supported platforms, rather than only Linux.  (This is a hack
	      because STATIC.PLUGINLIST itself is an ugly hack.)
	    - Fixed problem in macosx/cocoa/Jamfile which prevented cocoa2d
	      driver from ever being considered a build target by Jam.
	    - Eliminated unportable ussage of "echo -e" from static.jam.
	- Eric Sunshine fixed macosx/cocoa/Jamfile so that it now links with
	  the canvascommon library target.
	- res augmented the Win32 Alert() facility (i.e. message boxes) to
	  honor okMsg (that is, you can now give the OK button a different
	  text.)
	- Anders Stenberg finally fixed an annoying bug in the new renderer
	  causing errors in the the 2x2 mipmap. The problem was that
	  GL_UNPACK_ALIGNMENT wasn't changed from the default of 4 byte
	  alignment. (Thanks res for the help.)
29-May-2003
	- Oktal removed the clean target from from swig.jam as it was deleting
	  the Swig-generated Python and Perl source files.
	- Oktal added a forward declaration of iConfigFile to OSXAssistant.h,
	  fixing an error reported by Reed Hedges.
	- Jorrit replaced NULL with 0 throughout the entire CS project to
	  conform to the C++ standard.
	- Eric Sunshine removed unnecessary duplicate code from
	  libs/cssys/general/runloop.cpp which was pointed out by Matze.
28-May-2003
	- Oktal reorganised the convenience functions in iReporter and
	  csReporterHelper in reporter.h, for more compatible use of the GCC
	  keyword __attribute__. It was being used in an improper place in
	  the function declaration line, which was causing warnings and
	  causing it to be ignored by some versions of GCC. The fix reqires
	  these functions to be declared inline to avoid syntax errors and
	  linking errors.
	- Philip Wyett moved the existing MSVC external application creation
          HOWTO, to a new directory indicating MSVC 6. He also created
          a new one for the upcoming MSVC 7 external application HOWTO.
	- Eric Sunshine added the new csPhysicalFile class to csutil.  This is
	  an implementation of the abstract iFile interface for "real" files
	  within the physical filesystem.  It is essentially the complement of
	  virtual iFile implementations for VFS, and the antithesis of
	  csMemFile.
	- Jorrit removed several usages of GetPrivateObject() in the engine.
	  Not all usages could be removed however. The ones that were removed
	  now were the easy ones.
	- Jorrit removed GetPrivateObject() in iMaterialWrapper and
	  iMeshWrapper. They were no longer used. Also removed a few addditional
	  GetPrivateObject() calls.
	- Jorrit removed a GetPrivateObject() from csTextureWrapper that
	  wasn't even reachable.
	- Eric Sunshine eliminated several compilation warnings from
	  win32/registrycfg.cpp.
	- Eric Sunshine performed Phase Two of the elimination of the
	  monolithic scf.cfg:
	    - Converted SCF to understand XML format meta-information resources
	      associated with plugins.  More specifically, it understands
	      resources accessed via the iDocument interface.
	    - SCF now actually utilizes the .csplugin meta-information
	      resources associated with plugins.  It no longer consults scf.cfg
	      nor the individual .scf files.  (Presently, the old code for
	      locating .scf files is being re-used to locate the new .csplugin
	      files.  Fully dynamic, recursive discovery of plugin modules is
	      not yet implemented.  See To-Do below.)
	    - Eliminated scf.cfg, as well as all remaining code references to
	      it.  (Some other non-SCF code was accessing scf.cfg for other
	      purposes.)
	    - Eliminated the now obsolete scfreg.  Eliminated references to
	      scfreg from install.jam.
	    - Still To-Do:
		- Remove references to scf.cfg and scfreg from documentation.
		  Also document new .csplugin resources.
		- Add platform-specific function to scan and locate plugins
		  automatically rather than using the ad-hoc approach inherited
		  from scanning for .scf files.
		- Add platform-specific function to query a plugin's
		  meta-information.  This should be used by SCF to do the raw
		  extraction.  Provide and finalize API for higher-level
		  clients to access meta-information.
		- Augment static linking to work with the new facility.
		- Eliminate the hard-coded SCF registration information in each
		  plugin's source code.
	- Eric Sunshine eliminated several compilation warnings from
	  clothldr.cpp.
	- Jorrit removed several usages of GetPrivateObject() in the engine.
	  Not all usages could be removed however. The ones that were removed
	  now were the easy ones.
	- Eric Sunshine eliminated the unmaintained and broken cslua module.
	- Oktal added a Jamfile to the PicoGUI test app.
	- Oktal made the following changes to the PicoGUI server plugin:
	    - Commented out the font engine constructor; the PicoGUI API does
	      not provide a functionality to define an external font engine,
	      so the constructor code is incorrect. I will have to patch Pico.
	    - Rearranged the pgserver initialization code; it was doing things
	      in the wrong order which was causing a segfault within Pico.
        - JTarbox Fixed a bug with Post() and added a check to determine if an
          iEvent object is a csPoolEvent or csEvent object via the Pooled()
          function
27-May-2003
	- Boyan made the following changes:
	    - Fixed kyboard focusing component bug in AWS
	    - Added awsWindow::Show() and awsWindow::Hide() in AWS.
	    - This features allows triger these events in .def file (using
	      signalWindowShown and signalWindowHidden)
	- Philip Wyett added *.pyd (Python DLL's) and *.csplugin to the CS root
          directory .cvsignore file.
	- Philip Wyett Corrected MSVC 6 docs build requirement of minimum
          Python version for CS.  Now specifies minimum of 2.2.
	- Jorrit reverted a fix from res to the sequence manager which was done
          about two weeks ago.  This fix unfortunatelly makes csdemo crash so I
          had to remove it.
	- Matze added a workaround for jam 2.4 which contained a bug which made
          the recently changed HeaderRule have strange side effects.  As soon
          as jam 2.5 is out we can remove all these hacks.
	- res overhauled the GL extension manager generator; instead
          concatenating string in source, templates are read from the disk,
          containing placeholders for the actual stuff.  This makes maintenance
          of the generator code somewhat easier.
	- groton (groton@gmx.net) added the including of the file multimon.h to
          the file directdetection.cpp for MSVC6 compiler (so that ddraw canvas
          plugin compiles fine also if no DirectX SDK has been installed, ie on
          a plain MSVC6 installation).
	- Eric Sunshine eliminated compilation warning in Win32 OpenGL canvas.
26-May-2003
	- Eric Sunshine eliminated compilation warning about implicit
	  conversion of (int*) to (GLint*) in glcommon2d.cpp.
	- Eric Sunshine fixed bug in csconf.mak where its TO_INSTALL.ROOT was
	  referring to the obsolete scripts/cs-config/crystal.m4.
	- Eric Sunshine fixed bug in walktest/Jamfile where walktest_static
	  target neglected to use the "noinstall" option.
	- Eric Sunshine fixed bugs in Matze's recent changes to the Jam build
	  facility which caused the "install" target to build and install all
	  plugin modules as static link libraries (in addition to installing
	  them as dynamically linked modules).
	- Jorrit updated authors a bit (added Troy Chard and enhanced entry
	  of Boyan slightly).
	- Jorrit fixed a crash bug in walktest mouse selection code.
	- Eric Sunshine fixed bug in Matze's recent changes to the Jam build
	  facility which caused installation of console applications to fail on
	  MacOS/X.  (It attempted to install them as fully wrapped GUI
	  applications.)
	- Eric Sunshine performed Phase One of the elimination of the
	  monolithic scf.cfg:
	    - Plugin modules are now self-describing.  This information can be
	      queried at run-time without having to actually load the module.
	    - The plugin maintainer now manages the plugin's meta-information
	      in an external .csplugin file, rather than hard-coding the
	      information into the plugin's source code.  The mechanism by
	      which the meta-information is bound to the plugin is
	      platform-dependent.  Presently, all platforms simply lay down the
	      meta-information in a plain text file alongside the plugin
	      itself; with the same basename and extension .csplugin.  This may
	      change in the future.  For example, on MacOS/X, the
	      meta-information will probably be encapsulated within the
	      plugin's bundle wrapper.
	    - Plugin meta-information is now maintained in XML format.  Here is
	      an example:
		<?xml version="1.0"?>
		<!-- gl3d.csplugin -->
		<plugin>
		  <name>gl3d</name>
		  <scf>
		    <classes>
		      <class>
			<name>crystalspace.graphics3d.opengl</name>
			<description>OpenGL 3D graphics driver</description>
			<requires>
			  <class>crystalspace.font.server.</class>
			</requires>
		      </class>
		    </classes>
		  </scf>
		</plugin>
	    - Since meta-information is now extensible, maintainers can choose
	      to publish supplementary information about plugins (in addition
	      to the SCF information already published).  For example, image
	      loading plugins could publish "image indentification" information
	      which would allow the image loading multiplexor to selectively
	      request image loading plugins on-demand, rather than requesting
	      all plugins unconditionally, even if they are not needed.  Here
	      is an example of a possible meta-information table for the PNG
	      loader:
		<?xml version="1.0"?>
		<!-- cspngimg.csplugin -->
		<plugin>
		  <name>cspngimg</name>
		  <scf>...</scf>
		  <imageloader>
		    <imagetype>
		      <class>crystalspace.graphic.image.io.png</class>
		      <identify>
			<mimetype>image/png</mimetype>
			<extension>png</extension>
			<extension>PNG</extension>
			<scan length="4" bytes="\0x89PNG"/>
		     </identify>
		    </imagetype>
		  </imageloader>
		</plugin>
	      In this example, the PNG loader meta-information tells the
	      multiplexor several different ways to identify a PNG image: by
	      checking file extension, if available; by checking MIME type, if
	      available; by checking for the magic-string "\0x89PNG" in the raw
	      image data.  If the multiplexor identifies the image as PNG, only
	      then will it actually request the PNG loader.
	    - Added the --meta-file directive to msvcgen.pl to allow
	      specification of the meta-information file for a module.  The
	      value of this option is interpolated into template files via the
	      new %metafile% variable.  msvcgen.mak now utilizes this flag with
	      the value of the new INF.PROJECT makefile variable.  Augmented
	      the MSVC6 and MSVC7 plugin template files (plugin.tpl) to make
	      use of %metafile%.
	    - Changed the file extension for plugins on MacOS/X from .csplugin
	      to .csbundle to avoid conflict with new meta-information resource
	      which uses the extension .csplugin.
	    - Still To-Do:
		- Augment SCF to utilize the new meta-information resources,
		  and to understand the new XML format.  Presently, these
		  resources are ignored at run-time.
		- Add platform-specific function to scan and locate plugins
		  automatically, rather than relying upon a monolithic registry
		  such as scf.cfg.
		- Add platform-specific function to query a plugin's
		  meta-information.
		- Eliminate the monolithic scf.cfg.
		- Augment static linking to work with the new facility.
		- Eliminate the hard-coded SCF registration information in each
		  plugin's source code.
	- res changed the DDraw code so errors in device enumeration aren't
	  fatal any more, but just emit a warning instead. Also tried to
	  improve the compilation for people with older DirectX SDKs. Those
	  changes are made somewhat blindly as everything worked and works
	  fine for me.
	- res removed #define INITGUID in directdetection.cpp to fix duplicate
	  defined symbols in VC6.
	- Eric Sunshine promoted the Copy rule implementation from docs.jam to
	  helper.jam since Copy is sufficiently generic, and is now used by
	  other Jamfiles (such as plugin.jam).
	- Eric Sunshine upgraded the Jam Copy rule to utilize $(CP) rather than
	  the literal `cp'.
25-May-2003
	- Jorrit optimized ball->HitBeamObject() considerably by moving an
	  expensive operation out the inner loop. Same optimization for
	  genmesh, spr3d, and metaball. Also made the test more robust by
	  comparing floats with >= instead of == (NEVER use == on floats).
	- Jorrit reversed the bugfix he did on IntersectSegment (Frustvis and
	  Dynavis) yesterday and instead fixed the bug for real.
	- Matze committed several improvements to 3ds2lev from Troy
	  Chard <troy.chard@shaw.ca>.  Thanks alot!  These cover a new naming
	  scheme allowing for exact specification of zmode and priority of mesh
	  objects, fetching texturefilenames instead of texturenames and the
	  possibility to set some stuff in the settings block.  (Note from
	  Matze: I fixed the indentation and rewrote some small parts of the
	  patch.  This is not tested yet as I don't have .3ds files lying
	  around here.)
	- Boyan made the following changes to AWS:
	    - Added AWSF_KeyboardControl global flag allowing focusing controls
	      using keyboard.
	    - Added features for focusing controls using keyboards Using TAB
	      and CTRL+TAB to move to next focusable control.  Pressing ENTER
	      calls Click event.  In List Box selecting next (or previous)
	      element can be done by UP (or DOWN) arrow key.  NOTE: These
	      features are available only for components: Label, Button,
	      ListBox, Radio Button, CheckBox, Scroll Bar and TextBox.
	    - Added triggers and signal (signalFocused) .  It's now easy to
	      detect when control becomes focused.  It's nessesary to add
	      property "Focusable: Yes" in .def file.  By default this property
	      is false.
	    - Added TabOrder in iAwsComponent. It is full not functionally
	      because children are ordered by their creation.
	    - Added functions for TabOrder manipulations: TabNext(), TabPrev(),
	      AddToTabOrder(), GetTabComponent() in iAwsComponent.
	    - Added events OnSetFocus() and OnUnsetFocus() in iAwsComponent.
	    - Added Focusable(), isFocused() in iAwsComponent.
	    - These features will NOT reflect in apps that already use AWS.
	- Matze improved the SubDir hacks for jam. On jam2.5rc3 we have now an
	  official way to invoke rules inside subdir this makes handling in
	  latest jam alot easier. The override SubDir rule has been moved to
	  jamcompatibility. (Also for some reason I don't understand yet
	  jam2.5rc3 is alot faster when scanning header files...)
	- Matze also reordered and reindented Boyans history entry.
	- res updated the hard-coded lighting step in the currently developed
	  new render loop to do some actual lighting again.
	- Matze fixed a bug in viewmesh where the scaling variable was not
	  initialized. (Finally, you don't need to search for your 1 pixel
	  model anymore.)
	- Eric Sunshine eliminated compilation warnings in AWS.
	- Eric Sunshine made the following changes the configuration scripts:
	    - Eliminated corrupt, unportable, and unnecessary `sed' expressions
	      from packageinfo.m4 which broke the configure script.
	    - Renamed CS_PACKAGEINFO_SETJAMCONFIG macro to CS_EMIT_PACKAGEINFO
	      in packageinfo.m4.  This macro now takes an argument which
	      specifies the target to which the extended information should be
	      emitted (for example, to the Jam or make configuration caches).
	    - configure.ac now takes advantage of the new CS_EMIT_PACKAGEINFO
	      functionality to emit extended package information to both
	      config.mak and Jamconfig, rather than only to Jamconfig.
24-May-2003
	- Jorrit fixed a bug in GetObjectBoundingBox() of 2D sprites. This
	  could cause culling errors of those sprites.
	- Jorrit performed a small optimization in iSector->FollowSegment()
	  in case only_portals==true. Now uses GetPortalCount() to avoid
	  the need to test a thing if there are no portals in it.
	- Jorrit fixed an initialization bug in IntersectSegment() of
	  Dynavis and Frustvis which could cause errors in those routines
	  in some cases.
	- Jorrit fixed a big bug in IntersectSegment of both Dynavis and
	  Frustvis. This bug would cause very bad inaccuracies with hitting
	  objects. This bug also caused the missiles in walktest to miss the
	  walls often.
	- DeSigna modified parts of the CS texinfo manual:
	    - Boilerplate rewrite: intro/chapter.txi
	    - Some sections rewritten, grammar corrections, removal of
	      obsolete/misleading information: intro/foreward.txi
	    - Text tweaks and grammar fixups: intro/guide.txi
	    - Updated bug reporting practice: intro/feedback.txi
	- Oktal added empty stub functions to cspython for the new iScript
	  interface methods, until they get implemented. Then the csperl5
	  implementation of the update can be used.
	- Oktal made the following changes to csperl5:
	    - Somewhere a macro was being defined called "ref", which was
	      interfering with variables of the same name, so renamed them.
	    - Swig was causing a "conversion lacks cast" error when it tried to
	      store an int8 as a string of length 1, so overrode the typemap to
	      force it to store it as an int32.
	    - Added an %ignore csGetPlatformConfig; to cspace.i because that
	      function is only defined for Win32 and will cause a link error on
	      other platforms.
	    - Added #undef for MIN and MAX to csperl5.cpp to stop the macro
	      redefinition errors when they're defined by the Perl headers.
	- Oktal fixed a segfault when NewConnection() returns NULL in
	  netmantest. This was a left-over from the ensocket API.
	- res further worked on storing rendermeshes in the sector. Z sorting
	  as specified by the renderpriorities works now.
	- res fixed a bug in the new renderer where not binding of a render
	  buffer caused visual distortions.
	- Matze did several changes to the jam build system:
	    - Reworked the Application, Library and Plugin rules. Code should
	      be clearer now. The linking logic has been moved to the platform
	      specific jamfiles. Also constructing of the target names is done
	      in the platform specific files now.
	    - Option handling changed. The options are passed along and tested
	      directly now, instead of setting strange flags.
	    - New rules for .rc file handling on Win32
	    - Win32 rules now generate fileversion resource files without
	      invoking external scripts
	    - Introduced a debug mode for the rules
	    - Fixed some typos/comments all over the rules
	- res added some #ifdefs to the texture loader in csparser to make it
	  work with render3d.
23-May-2003
	- Jorrit fixed a bug with 3D sprites. If the factory was
	  HardTransformed() the shape indicator was not changed.
	- Jorrit fixed a bug in csGLExtensionManager. You cannot initialize
	  variables in the struct/class definition. You must do it in the
	  constructor. C++ is not Java.
	- Jorrit fixed the same constant with a define. That works a lot
	  better.
	- Jorrit renamed csObjectModel in Dynavis to csDynavisObjectModel to
	  avoid a conflict with csObjectModel in csgeom (prevented static
	  linking).
	- res updated the GL ext manager generator script to contain Jorrits
	  latest csGLExtensionManager fix.
	- Matze added some macros for gathering additional project info in
	  autoconf. This will be used to fill in stuff in the MacOS/X and Win32
	  rc files.
	- Matze fixed a bug he introduced by implementing the custom
	  header file scanning: header files haven't been scanned anymore so
	  includes of includes have been missed in the dependency generation.
	- Matze renamed the .fnt files to .h since they're really headers.
22-May-2003
	- res made the following changes:
	    - when using the new renderer, the sector now stores the
	      rendermeshes of the contained meshobjects. This is different
	      from the old system where only the mesh objects themselves
	      knew about the rendered meshes. Not all necessary adjustments
	      have been done yet.
	    - Made several changes to the GL extensions manager to better
	      support WGL exts.
	    - Added support for multisample in OpenGL. So far, works on Win32
	      only, as some platform-specific initializations are required.
	    - Moved support for display refresh rate and vsync to common
	      canvas classes. That means that they read the requested settings
	      from the config; the actual application is still platform-
	      dependent and only implemented on Win32 so far.
	    - Added a GL configuration for ATI R300 (Radeon 9700/9700Pro.)
	- res added resizing to the glwin32 canvas, fixed a typo and some
	  possible NULL pointer accesses in glcommon.
	- Matze added possibility to specify msvc version for the msvcgen.sh
	  script which is used to regenerate msvc-projectfiles on jam.
	- Matze reworked static linking with jam. This stuff is not tied into
	  the Application and plugin rules anymore. Now jam constructs an
	  extra library target for each plugin and has some helper rules so
	  that you can easily construct your static builds yourself. But there
	  isn't a global static mode anymore in jam.
	- Eric Sunshine made the following Jam-related changes:
	    - Fixed bug in objectivec.jam reported by Matt Reda where OBJCFLAGS
	      and OBJC++FLAGS were being set incorrectly on $(>) rather than
	      $(<) in ObjC and ObjC++ rules, respectively.
	    - Fixed problem in objectivec.jam where the ObjC and ObjC++ rules
	      were not utilizing CCFLAGS and C++FLAGS set on specific object
	      files if those flags were added by the CFlags/LFlags (or
	      indirectly via ExternalLibs) rules in module-specific Jamfiles.
	    - Augmented macosx/opengl/Jamfile to also respect .c, .C, .mm, and
	      .M file extensions.
	- Eric Sunshine made the following corrections to Matze's recent
	  Jam-related commit:
	    - Fixed numerous typographical errors and incorrect comments.
	    - Fixed serveral locations where new EXTRAOBJECTS variable was not
	      being correctly bound.
	    - Fixed problem where EXTRAOBJECTS was not being respected by
	      LinkApplicationConsole in macosx.jam.
	    - Removed unnecessary EXTRAOBJECTS references from unix.jam and
	      win32.jam.
21-May-2003
	- Jorrit fixed the new csString::SubString() so that it is more
	  efficient (no longer returns a new csString) and also documented
	  that the substring is excluding the last char.
	- Jorrit did various changes related to portal management:
	    - Moved iPortal definition from imesh/thing/portal.h to
	      iengine/portal.h. The reason is that portals are now an engine
	      concept and not only for things. The only portal implementation
	      is currently still in thing though.
	    - Added the ability to get the portal vertices from iPortal.
	    - Added iMeshObject->GetPortalCount() and
	      iMeshObject->GetPortal().
	    - Also added default implementations of those to csMeshObject
	      (supporting no portals).
	    - At two places in the engine (GetNearbyObjects() and PlaceMesh())
	      this new function is used instead of first querying for
	      iThingState. This makes those functions a bit faster and is (in
	      theory) also more general (in the sense of being able to add
	      portals to any mesh object). However later on most functions
	      still query for iThingState so this promise of more generality
	      is not fulfilled yet.
	- DeSigna brought manual section 6.4.6 (SCF Examples) up-to-date with
	  current SCF workings.
	- res made a few changes to bugplug to have it work more nicely with
	  the new renderer. The most 'drastic' changes is that
	  G3D->FinishDraw() is now called after the FPS is shown.
	- res changed render3d to push the current modelview/projection
	  matrices when beginning 2D drawing and popping them when it ends.
	  Before, the 2d ortho projection matrix was preserved causing wrong
	  drawing of meshes.
20-May-2003
	- Philip Wyett worked around problem of incorrect pathed cs_pyth.cpp
	  being included in the cspython MSVC project file.  Added variable
	  CSPYTHON_MSVC_EXCLUDE and wrapped the bad line in the makefile.  The
	  variable is only true for the MSVCGEN process to force exclusion from
	  our project files and will not affect nix or other platforms.
	- Jorrit removed csArray and csPArray->GetArray() again as this breaks
	  encapsulation.
	- Jorrit added iObjectModel->GetPolygonMeshShadows() and
	  SetPolygonMeshShadows().  This will be used by the shadow manager in
	  the new renderer.  Implemented this in csObjectModel and also fixed
	  all mesh objects.
	- Jorrit extended the loader so you can now specify <shadows/> in a
	  <polymesh> to indicate that the polymesh is for shadows (this is in
	  addition to <viscull/> and <colldet/>).
	- res scrapped the 'experimental' token list macros in favor of a more
	  stable & portable solution suggested by Eric Sunshine.
	- res changed csShaderGLAVP so that shader variables are fetched in
	  SetupState() instead of Activate().
	- res changed the common GL canvas code to not initialize GL 1.2/1.3
	  pseudo-extensions as this seems to cause warnings for some drivers.
	- res split up the hard-coded rendering loop into smaller hard-coded
	  steps contained in classes.
	- res fixed the include path for the fire loader token list.
	- res added some documentation to tokenlist.h.
	- Oktal extended the iScript interface that cspython and csperl
	  implement. I've implemented the extensions in csperl, but won't
	  commit them until I've tested them. Until csperl and cspython
	  implement the extensions, the extended parts of the interface are
	  commented out to allow them to continue to compile unextended.
	  The extensions are: storage and retrieval of variables, calling of
	  subroutines, creation of objects, manipulation of object properties
	  and calling object methods.
	- DeSigna modified and committed masonjoyers' csString patch, adding
	  SubString() and FindFirst().
	- DeSigna went back and fixed doubled declarations of those
	  functions in the header.
19-May-2003
	- Eric Sunshine made the following changes to the Jam build facility:
	    - Added helper rules InstallApplicationGUI and
	      InstallApplicationConsole to install.jam.  The InstallApplication
	      rule now invokes these rules to perform the actual installation.
	      These rules can be overridden by platforms or facilities with
	      special requirements.
	    - MacOS/X now overrides InstallApplicationGUI in macosx.jam in
	      order to correctly install the application wrapper, which is an
	      entire directory hierarchy (per application), rather than a
	      single executable file.
	    - Added new InstallShellScript rule to install.jam.
	    - Fixed CS/scripts/cs-config/Jamfile to invoke the new
	      InstallShellScript rule, rather than InstallApplication.  Since
	      platforms may now override the application installation rules for
	      special situations, it is no longer wise to treat cs-config as an
	      application at install time, thus the new shell-script-specific
	      rule.
	    - Fixed bug in CS/include/Jamfile where the `install' and
	      `install_header' targets would encounter errors if the
	      installation "include" directory did not already exist.
	      Specifically, it invoked both "MkDir <install>/include/crystal"
	      and "MkDir <install>/include/crystal/.", which Unix treats as the
	      same directory, but which Jam treated as two distinct
	      directories.  The result was that the second mkdir (for the
	      "crystal/." variation) would fail with "directory already exists"
	      error.
	- Jorrit fixed a bug in the OpenGL renderer where it would incorrectly
	  change the original dimensions of a texture in case the texture
	  was resized to PO2 dimensions. This affected GetOriginalDimensions().
	  Also applied the fix to the new OpenGL renderer.
	- Eric Sunshine changed the makefile-based build on MacOS/X so that
	  plugins are no longer placed in a "components" subdirectory.
	  Although this was an organizational convenience, it was not
	  necessary, and it did not fit in well with the LFS organization for
	  installed resources toward which CS is moving.  This change should
	  allow the plugins to be located when built and installed via the Jam
	  build facility, which uses an LFS organization.
	- res removed all member access control directives from the classes
	  generated when using cstool/tokenlist.h since this seems to cause
	  problems on some platforms.
	- Jorrit removed the infinite and line 3D renderers. They were pretty
	  obsolete. Also removed the associated linex canvas.
	- Eric Sunshine applied a patch from Mike Vannorsdel which implements
	  iGraphics2D::SetMousePosition() for the MacOS/X OpenGL canvas.  Also
	  publishes an OSXDelegate2D_setLevel() function to set the "window
	  level", though this is not presently used, nor is it easily
	  accessible.  Eric performed some clean up and normalization of the
	  patch, and also propagated it to the CoreGraphics canvas.
	- Jorrit changed the commandline help in the softx canvas to mention
	  -noXSHM instead of -noshm.
	- res fixed csTextureHandleOpenGL::GetMipMapDimensions() to return the
	  size without applied downsampling (via
	  Video.OpenGL.TextureDownsample cfg. This is done in addition to po2
	  adjustments)
	- res added GetArray() methods to csArray and csPArray.
	- res started working on new render loop.  csEngine::Draw() is in a
	  different file now for NR builds.  Also, drawing isn't done in
	  csSector::Draw() any more, csSector now merely returns a list of
	  meshes in this sector.  Currently, the loop isn't doing much more
	  than the old stuff, and has to be activated by uncommenting a line in
	  renderloop.h.
	- res fixed a compiling error he introduced in ogl_txtmgr.cpp earlier.
	- Eric Sunshine removed the now obsolete SCF references for line and
	  infinite renderers from scf.cfg.  Also fixed problem where entry for
	  sndoal plugin was commented out.
18-May-2003
	- res made the following changes in and around render3d:
	    - ATI/NV only exts can be disabled all at once via cfg.
	    - improved error reporting for MTEX shader loader.
	    - r3dtest properly catches/releases the mouse pointer when it
	      gains resp. loses focus.
	    - leak fixes.
	- Eric Sunshine made the following changes to the Jam build facility:
	    - Upgraded macosx.jam so that LinkApplication now knows how to
	      create the entire application wrapper.  It no longer invokes the
	      external appwrap.sh script.  The benefits of this approach
	      include: Jam can now do all of its normal dependency tracking
	      upon the resources contained in the wrapper; no longer dependent
	      upon external shell script; third-party CS applications may now
	      build proper application wrappers directly via the Jam rules.
	    - Added ApplicationIconDefaultOSX and ApplicationIconOSX rules
	      which allow setting of the default application icon, and the icon
	      for a particular application, respectively.  (In the future, we
	      should probably introduce platform-independent rules
	      ApplicationIconDefault and ApplicationIcon which automatically
	      select the correct icon extension and mechanism for binding the
	      icon to the application.)
	    - Fixed bug in application.jam introduced in revision 1.6 where the
	      application-specific `clean' target (such as `simple1clean')
	      failed to remove the built object files.
	    - Fixed bug in CleanDir rule which caused target to be built if it
	      did not already exist.  For instance, "jam simple1clean" followed
	      immediately by "jam simple1clean" would cause simple1 to be built
	      by the second invocation of the `simpel1clean' rule.
        - Jonathan Tarbox fixed the following problem with the event object:
          Due to the assumtion of identical functionality between csVector and
          csArray, I missed the CS_ASSERT when csArray::Pop() reached the end
          of the array.  csVector would return NULL, csArray just asserts.
17-May-2003
	- res made the following changes:
	    - extended the stdpt plugin with a fire texture loader.
	    - added experimental 'convenient token list', currently used by
	      above loader.
	    - added a simple color gradient class to csgfx.
	    - added the possibility to the fire texture to set a user-defined
	      palette.
	    - added a gradient parser to the syntax services.
	    - changed partsys so that a fire system now has a small procedural
	      fire instead of 'raindrop' texture.
	- res fixed a crash caused by too much memory being memset() in the
	  fire texture default palette creation.
	- res fixed map2cs so that the <moveable> token is written at the
	  correct location for the skybox. Also changes the UV coords of the
	  sides a bit; they are now calculated from the actual size of the
	  smallest side instead being a hardcoded value.
16-May-2003
	- Wouter added csgeom/objmodel.h and igeom/objmodel.h to css.h.
	- Jorrit fixed a very weird bug in genmesh where SCF_CONSTRUCT_IBASE
	  was called in the destructor of the embedded PolyMesh instead of
	  the constructor. This could cause crashes at exit in some cases.
	- Jorrit added SetBoundingBox() and GetBoundingBox() to iNullMeshState.
	- Jorrit added a shortcut feature to the loader. You can now specify
	  a <polymesh/> outside a <meshobj/> (but inside a <sector/>).
	  Previously it was only possible to replace the polymesh for CD
	  or visibility culling of a mesh. With this new syntax it is possible
	  to create invisible objects that can be used for occlusion or for
	  collision detection without having to define a mesh object.
	  Internally this shortcut will make a regular mesh object that uses
	  a 'nullmesh' internally.
	- Jorrit fixed a bug in nullmesh, GetRadius(). The center was not
	  correctly set in case SetBoundingBox() was called.
	- res updated simplept, demosky and prbump; not only that proctexes
	  aren't bottom-up any more, but also that they need to be refcounted
	  now (as additional references are kept outside the application.)
15-May-2003
	- res made the following changes to the fire proctex:
	    - changed the algorithm a bit so it doesn't look tilted any more.
	    - added the ability to smooth the whole image after calculating
	      a pass.
	    - added an interface to control some animation parameters.
	    - uses csRandomGen now.
	- res changed csProcTex to support an 'always animate' mode: the
	  texture is updated even if it's not visible.
	- res changed the csProcTex class implementation a bit:
	  iTextureWrapper is now embedded. This way, procedural textures can
	  provide interfaces that can be queried from the texture wrapper
	  (e.g. the fire properties.)
	- res fixed an uninitialized variable in the checkerboard loader.
	- res added interfaces for texture factories.
	- res removed an unnecessary cut'n'paste leftover from ptanimimg.
	- res added a base class for texture factories.
	- Jorrit fixed compile errors in proctex (access to private or
	  protected members from within subclasses).
	- Philip Wyett added virtual desctructor to 'TextureLoaderContext'
          and also a newline to the end of the file.
	- Jorrit removed the obsolete coverage buffer from Dynavis. The
	  tiled coverage buffer works much better and was default anyway.
	  Additionally removed the toggle_tiled debug command.
	- Jorrit made VFS thread-safe. Working on the same iFile is not
	  thread-safe though! Also the concept of the current VFS directory
	  should not be used in threads.
	- Jorrit removed the statistics from the loader. It wasn't complete
	  anymore and it is a pretty useless feature anyway.
	- Jorrit changed the csparser plugin so it no longer has a
	  ldr_context variable. Instead the ldr_context variable is passed
	  as a parameter to all loading functions. That makes it easier to
	  make the loader (partially) thread-safe.
	- Jorrit made the plugin vector in the loader thread-safe.
	- Jorrit removed iLoader->SetMode() and all the CS_LOADER_... flags.
	  Two of them were unused and the other was invalid.
	- Jorrit made checkDupes and resolveOnlyRegion in the loader part
	  of the loader context to make it easier to make the loader thread
	  safe.
	- Jorrit fixed the loader so that engine->ResetWorldSpecificSettings()
	  is only called if clearEngine is true. The reasoning is that when
	  clearEngine is false you want to append a map file to an already
	  loaded map and you don't want to reset engine settings in that case.
	- Jorrit started initial work on ThreadedLoadMapFile(). Not
	  operational yet.
	- Jorrit fixed a bug he introduced in his last commit with the engine.
	- Jorrit fixed a bug he introduced in his last commit with the iso
	  map loader.
	- res changed the GL renderer to flip procedural textures  vertically,
	  so that up/down have the same coordinates as normal textures
	  (previously, the texture coordinated had to be flipped manually.)
	- res fixed the flarge for above change.
	- res removed the MNG from flarge due to warnings caused on most
	  systems.
	- res changed the software renderer to not flip procedural textures
	  any more.
	- groton (groton@gmx.net) modified the comment about the method
	  iEventQueue::Register in the file include/iutil/eventq.h, so now
	  that comment is up to date with the introduction of two pseudo-event
	  types that have a Code value of cscmdProcess and cscmdFinalProcess.
14-May-2003
	- Jorrit fixed a bug in the syntax services. When a polygon is a
	  portal it is now marked as excluded from the visculling mesh.
	  Without this fix portals would actually cull geometry even if that
	  wasn't the idea.
	- Jorrit added stdpt and ptanimimg targets to 'make walkall'.
	- res updated partsys for the latest <texture> changes.
	- Oktal did a little reorganisation of the csperl5 clean targets,
	  adding swigperl5clean and making csperl5maintainerclean call
	  csperl5clean and swigperl5clean.
	- Oktal added `%ignore csGetPlatformConfig;' to cspace.i, since this
	  function is only defined for Win32, it caused a link error on other
	  platforms when building the scripting modules.
	- Eric Sunshine made the following change to the Jam build facility:
	    - Added CleanDir rule which is used to forcibly delete a directory
	      even if not empty.  This is used much like the Clean rule.  For
	      example "CleanDir clean : out".
	    - The "clean" target once again removes the "out" directory.
	    - The "distclean" target now removes the "include" directory
	      created by configure if the build directory differs from the
	      source directory.  This means that "distclean" now cleans the
	      build directory completely.
	    - The Application rule now respects APPLICATION.CLEAN.GUI and
	      APPLICATION.CLEAN.CONSOLE which tell the Application rule how to
	      clean a built application.  On MacOS/X, APPLICATION.CLEAN.GUI
	      instructs the rule to use CleanDir for GUI applications, since an
	      application is actually a directory hierarchy "wrapping" the
	      application resources.
	    - Removed the hacky Clean rule override from clean.jam which
	      transmogrified the Clean action to use "rm -rf" rather than the
	      normal $(RM).  This used to be necessary because of the
	      application "wrapper" on MacOS/X, but is no longer needed since
	      the new CleanDir rule is now used for GUI application on MacOS/X.
13-May-2003
	- res added an iAnimatedImage interface to support animnated images.
	- res added a plugin for a proctex for animated images.
	- res fixed a cut'n'paste error in plugins/proctex/standard/Jamfile.
	- res made the following changes:
	    - fixed the stupid mistake of having swapped two operands in a
	      difference in the animated proctex plugin
	    - improved error handling in the animated proctex plugin
	    - added iAnimatedImage::IsAnimated()
	    - updated the JNG plugin to properly handle animated MNGs
	    - removed the "circular ref" comments from flarge as there aren't
	      leaks any more
	    - added a spinning cube animation to stdtex.zip and used it in
	      flarge (on the street).
	- res added the ptanimimg plugin to scf.cfg.
	- Philip Wyett updated external MSVC app HOWTO to include links
          to the video(s) of each step and all steps in one archive from
          our sunsite ftp space.
	- Eric Sunshine fixed jng/jngio.mak and jng/Jamfile so that the JNG
	  loader plugin once again builds.  It must now link against csgeom
	  since it employs csRect.
	- Oktal added iSprite2DState to the list of interfaces wrapped by
	  cspace.i, and added a GetVertexByIndex function to it with %extend.
	- res fixed the NULL pointer access bug in TinyXML writing introduced
	  after my recent leak fix.
	- res made the following changes:
	    - To the map loader:
		- Procedural textures and normal textures are parsed from the
		  same tag, <texture>.
		- Both kinds of textures are loaded in the same manner, through
		  plugin interfaces ('normal' images are handled by a loader
		  built into csloader.)
		- A 'texture loading context' is passed to a loader, containing
		  some info such as the image specified in <file> and texture
		  flags.
		- Built a checkerboard texture loader into csloader (this one
		  is used in case a texture couldn't be loaded otherwise.)
		- Animated images are detected and the ptanimimg plugin is
		  tried for loading.
	    - Changed the ClassIDs of the standard PT & animation texture
	      plugins.
	    - Fixed the JNG/MNG plugin to better recognize animated real-world
	      MNGs.
	    - Augmented csCreateXORPatternImage() to accept an optional color.
	    - Changed flarge according to the loader changes and added a yellow
	      checkerboard texture.
	    - Updated the API mod docs.
	- Oktal changed csperl5distclean to csperl5maintainerclean, after being
	  told that that is the correct target to use to clean files that are
	  also in CVS.
12-May-2003
	- Philip Wyett brought warning level in MSVC 7 project files down to 3
	  to match MSVC 6 ones.  Also cleaned up 'group.tpl' for both MSVC 6
	  and 7.
	- Eric Sunshine eliminated compilation warning about non-virtual
	  destructor in csScfStringSet.
	- res fixed the iPolygonMesh issue for the ball plugin.
	- res changed the Sprite3d and Genmesh objects to emit a notification
	  if iPolygonMesh is queried.
	- res changed the sequence operations working with sequences in the
	  'normal' and engine sequence manager to not store references on
	  sequences. That makes loops etc. possible without causing circular
	  references. Also updated the interface docs to reflect this change.
	- res fixed a few cases where iPolygonMesh was queried from a mesh
	  object to use iObjectModel->"GetPolygonMeshColldet().
	- res improved the wording on the paragraph about the iPolygonMesh
	  changes in the api mod documentation a bit.
	- Eric Sunshine fixed win32.jam so that mergeres.sh invocation in
	  LinkPlugin rule passes the correct arguments.  This change had
	  already been made to the LinkApplication rule's invocation of
	  mergeres.sh as part of Eric's changes yesterday, but LinkPlugin
	  slipped by unaltered.
	- Oktal fixed a typo in cspython.mak (extra "h" in "swighpythinst")
	  that was causing it not to find the swigpythinst target, and then
	  regenerated the Swig Python module to keep it up-to-date with my
	  recent changes to the network API.
	- Oktal changed the prototype of main() in perl5test to
	  (int, char**) from (int, char**, char**) because that was causing
	  it to fail linking on some platforms including Mingw.
	- Eric Sunshine fixed apps/tests/perl5tst/Jamfile so that it is only
	  enabled if the Perl SDK was detected, rather than if the Perl command
	  is available.  This is an important distinction because the presence
	  of the Perl command alone does not necessarily imply the presence of
	  a working SDK.
	- Eric Sunshine changed Win32 build so that it uses --use-temp-file
	  when invoking windres.exe in order to work around a problem relayed
	  by Wouter were the popen() call made by windres was failing for some
	  user.  This change will slow down the windres invocation by an minute
	  amount, though I doubt that anyone will notice.  (If anyone does
	  notice, we can attempt to craft a "configure" test for popen()
	  failure.)
	- Eric Sunshine fixed win32gcc.mak so that mergeres.sh invocation in
	  DO.LINK.EXE passes the correct arguments.  This change had already
	  been made to the DO.SHARED.PLUGIN.PREAMBLE's invocation of
	  mergeres.sh as part of Eric's changes yesterday, but DO.LINK.EXE
	  slipped by unaltered.
11-May-2003
	- Oktal removed one of two instances of the same phony target,
	  swigperl5gen, in the csperl5 makefile.
	- groton (groton@gmx.net) added some code to viewmesh application in
	  order to allow the passing of the parameter -Scale=XX.XX through
	  the command line (that option there was already there, but it
	  was no implemented, i.e. the scale factor was always 1.0, whatever
	  the value of XX.XX was).
	- Oktal replaced a couple of `unsigned int's with `socklen_t's where
	  appropriate in the cssocket plugin. This was causing errors on
	  Windows where socklen_t is defined as a signed int.
	- Oktal added a test to the csperl5 makefile, so it will only attempt
	  to rebuild the Swig-generated files if the required version of Swig
	  was detected by configure.
	- Philip Wyett updated MSVC 6 project files. Lowered warning level
          (developers can raise locally). This eliminates alot of spurious
          warnings. Also enabled C++ exeception handling, which I thought
          was enabled, but whatever.
	- Philip Wyett updated MSVC 6 project files.  Lowered warning
          level (developers can raise locally).  This eliminates alot of
          spurious warnings.  Also enabled C++ exeception handling, which
          I thought was enabled, but whatever.
	- Eric Sunshine made the following changes:
	    - Added the new variable %name% to msvcgen.pl which can be
	      interpolated into any template file.  The value of this variable
	      is the name provided by the --name option.
	    - Performed some code clean up of msvcgen.pl following the merge of
	      msvcgen.pl and msvc7gen.pl (which occurred some time ago).
	    - Cleaned up a bunch of errors in the documentation and added
	      documentation which should have been added when msvcgen.pl and
	      msvc7gen.pl were merged.
	    - Renamed msvcgen.pl options --projext, -px, --wsext, -wx,
	      --projname, and --htmlent to --project-extension, -P,
	      --workspace-extension, -W, --project-name, and --xml-protect,
	      respectively.
	    - Changed msvcgen.pl so that it no longer creates the unused
	      "dummy" fragment file.  This file seems to have been an ugly
	      artifact to slighly simplify msvcgen.mak following the msvcgen.pl
	      and msvc7gen.pl merge.  A slight modification of msvcgen.mak
	      obviated the need for this hack.
	    - Fixed bug in msvcgen.pl where it failed to use the value from
	      --name as the default for --project-name if --project-name was
	      not specified.
	    - The extensions .C, .m, .mm, and .M are now recognized as source
	      files (in addition to .c, .cc, and .cpp) by msvcgen.pl.  The
	      extensions .hpp and .H are now recognized as header files (in
	      addition to .h).
	    - Added --strip-root option to msvcgen.pl which allows
	      specification of zero or more prefixes which should be stripped
	      from filenames/resources mentioned on the command-line and which
	      are referenced by generated project files.  This is desirable
	      because it is a good idea to record only relative paths in
	      project files, rather than absolute.  This switch can be employed
	      by tools which are unable to provide relative paths to
	      msvcgen.pl.
	    - Revived the DSP.PROJECT.RESOURCES variable.  This variable is
	      useful for inserting additional human-readable resources into the
	      generated project files.  It is not clear why this variable was
	      removed when the $(PROJECT.EXE).WINRSRC functionality (which is
	      completely different in purpose) was added to msvcgen.mak.
	    - Revived the "appgui" project type which had been removed some
	      time back.  Although the project files for GUI (appgui) and
	      console (appcon) applications might not differ at present, it is
	      still useful to be able to make this distinction (especially
	      since it might be needed again in the future).
	    - Cleaned up some documentation in msvcgen.mak following the merge
	      of msvcgen.mak and msvc7gen.mak (some time ago).
	    - Fixed problem with mergeres.sh where it failed to perform path
	      "fix-up" properly if the build hierarchy differed from the source
	      hierarchy.  One manifestation of this problem was that the .rc
	      files generated via msvcgen.mak from a build hierarchy
	      outside the source hierarchy differed from those generated
	      directly in the source hierarchy.  On a related note,
	      win32gcc.mak and msvcgen.jam were providing "fix-up" argument to
	      mergeres.sh which failed to take $(SRCDIR) into account, thus
	      causing the fix-up to fail.
	    - Fixed bug in msvcgen.jam where it failed to specify the location
	      of csver.h when invoking mkverres.sh, thus it failed when
	      generating project files from a build hierarchy which differed
	      from the source hierarchy.
	    - Fixed bug in msvcgen.jam where it failed to use --xmlprotect (ne
	      --htmlent) when building MSVC7 project files.
	    - Fixed bug in msvcgen.jam where it was incorrectly specifying
	      external libraries via --depend.  The correct option is
	      --library.
	    - Fixed bug in msvcgen.jam where it was incorrectly specifying
	      linker flags via --library.  The correct option is --lflags.
	    - Fixed bug in msvcgen.jam where it failed to normalize the source,
	      header, and resource paths which it passed to msvcgen.pl for
	      mention in the generated project files.  This was a problem when
	      the build directory differed from the CS source directory, since
	      the paths recorded in the project file would be relative to the
	      build directory or absolute, rather than relative within the
	      source directory.
	    - Fixed bug in msvcgen.jam where it would insert the wrong file
	      into a generated project if the filename was not unique between
	      all directories.  For instance, in the generated libcsutil
	      project, plugins\documentsystem\xmltiny\xmltiny.cpp would
	      incorrectly appear in place of libs\csutil\xmltiny.cpp.
	    - msvcgen.jam is almost usable.  Still to-do: Make it respect
	      ExternaLibs() or fix all the Jamfiles which require special
	      Windows libraries to invoke MsvcExternalLibrary().  Overhaul the
	      "config" file handling rule so that it associates configuration
	      files with built targets.  This will allow the generated projects
	      to reference configuration files.  Likewise, provide a generic
	      Resources rule which allows specification of additional textual
	      resources for inclusion in generated projects.  Upgrade module
	      Jamfiles to mention headers from the CS/include/foobar directory.
	      This will allow related headers to appear in the generated
	      project files.  For instance, the libcsengine project should
	      mention headers from CS/include/csengine, in addition to the ones
	      from CS/libs/csengine, which it currently mentions.
	    - Renamed CS/mk/visualc to CS/mk/visualc6.
	    - Renamed CS/mk/msvcgen/template to CS/mk/msvcgen/template6.
	    - Renamed the msvcgen and msvcinst makefile targets to msvc6gen
	      and msvc6inst.
	    - Fixed problem in Jam build where it would attempt to invoke
	      Bourne scripts using C-shell if user's login shell was C-shell or
	      compatible.
	    - Fixed csperl5/Jamfile so that it is only enabled if the Perl SDK
	      was detected, rather than if the Perl command is available.  This
	      is an important distinction because the presence of the Perl
	      command alone does not necessarily imply the presence of a
	      working SDK.
	- Eric Sunshine removed the hack from cs.mak which was needed to clean
	  up the generated files from csperl5.  The hack should no longer be
	  needed since csperl5 now presumably cleans up after itself, and only
	  creates its transient files if the module is actually enabled, rather
	  than always.
	- res fixed a leak in the engine: csStatLight:: and
	  csDynLight::AddAffectedLightingInfo() added the passed lighting info
	  to a hash and IncRef()ed it. However, the hash only adds it once,
	  while the IncRef() always happens, leading to lots of fake
	  references. When on destruction the lighting info hash was iterated
	  over, the lighting info was only DecRef()ed once (because there was
	  only one copy in the hash.) The lighting info is now only IncRef()ed
	  when it's not already in the hash.
	- res improved the thing loader to not produce a heap error in case of
	  an error. An iPoly3D was DecRef()ed, causing it to delete itself -
	  which wouldn't work as it was block-allocated. Now the polygon is
	  properly removed from the thing factory state.
	- res changed the Thing object to emit a notification as well if
	  iPolygonMesh is queried.
	- res changed a refcount issue in csEventQueue. For managing the
	  iEvents in the queue both smart pointers and manual IncRef()s/
	  DecRef()s were used, however an iEvent was always IncRef()ed but
	  not always DecRef()ed, causing leaks under some circumstances.
	  Removed IncRef()s/DecRef()s and let the smart pointers do their
	  work.
	- res added a remark to iEventQueue::Post() documentation on how
	  the owner ship of a passed iEvent is treated.
	- Philip Wyett fixed error accessing private class awscG2D under
          MSVC 6.
	- res made a small change to his AddAffectedLightingInfo() fix:
	  uses csHashMap::AddNoTest() instead of csHashMap::Add() now
	  (the latter one tests whether a hash object already exists in the
	  hash, which is never the case here)
	- Anders Stenberg added SCF wrapper for stringset, and made the new
	  renderer use it.
10-May-2003
	- Philip Wyett eliminated the 88 double to float conversion compiler
          warnings in gtreeldr.cpp under MSVC 6.
	- Oktal made the following changes to the networking code:
	    - Finished updating the cssocket driver to allow it to use UDP
	      in a useful way. The API now gives a connection-based wrapper
	      over the connectionless protocol.
	    - Modified the network manager so it can manage sockets from the
	      cssocket API aswell as those from ensocket. This includes a
	      backwards-incompatible change: iNetworkPacket has been changed
	      to iNetworkPacket2 (this is for handling iNetworkSocket2
	      sockets), so that now iNetworkPacket is used for cssocket.
	- Oktal made the following fixes to the csperl5 plugin:
	    - Moved the generated csperlxs.c file out of the source tree
	      since generation would fail if the source tree was read-only.
	    - Moved the csperlxs_fallback.inc file back to include/cssys so
	      it can still be accessed by the moved csperlxs.c file.
	    - Added csperlxs.c to the Jamfile clean target.
	- Philip Wyett eliminated more double to float warnings under MSVC 6.
            - Also performed a minor CS code style cleanup.
9-May-2003
	- Philip Wyett did the following:
	    - Added 'Makefile' to 'jam distclean', so at distclean the 'CS/'
	      directory is again cleaned up fully.
	    - Removed mod plugin from MSVC port. No one uses it and the
	      libmikmod library is old and support is poor for Windows.
	- Eric Sunshine fixed Oktal's changes to configure.ac from yesterday.
	  There were two problems.  First, incorrect use of AC_CACHE_CHECK()
	  caused it to behave differently between cached and non-cached runs.
	  In fact, cached runs would produce incorrect results.  Second, poor
	  quoting and parentheses placement borked up the logic of much of the
	  Perl5 check.
	- Eric Sunshine fixed bugs in csperl5.mak where swigperl5gen was not
	  declared .PHONY.
	- res changed the nomenclature in the apimod paragraph about
	  iPolygonMesh changes, after Jorrit pointed out it should rather
	  read 'object' instead of 'factory'.
	- Philip Wyett updated MSVC build docs to reflect a new msvc_libs
	  release. This release has a number of fixes and removes libmikmod.
	- Eric Sunshine fixed bugs in cspython.mak where it failed to respect
	  $(SRCDIR) in some cases.
	- Eric Sunshine fixed bug in csappframe.mak.  INC.CSAPPFRAME was
	  referencing wrong directory.
8-May-2003
	- Eric Sunshine fixed problem in MacOS/X OpenGL canvas where it was not
	  specifying its SCF dependency properly.
	- Eric Sunshine fixed bugs in the new stdpt.mak (standard procedural
	  textures) makefile which prevented it from working correctly when the
	  build directory differs from the source directory.  Also fixed
	  copy/paste errors which caused it to fail in static-link mode.
	- Eric Sunshine fixed a couple $(SRCDIR)-related problems in
	  CS/mk/template.mak.
	- Eric Sunshine updated physldr.mak so that it conforms with the CS
	  makefile standard.  Also upgraded it to place its transient resource
	  in a module-specific output directory rather than dumping everything
	  directly in $(OUT).  Finally, fixed it to respect $(SRCDIR), so that
	  it can be built when the build directory differs from the source
	  directory.
	- Eric Sunshine removed invalid vpath directive from csarts.mak.
	- Eric Sunshine normalized the names in freefnt2.mak, oss.mak, rle.mak,
	  and wodrv.mak so that the basename of the dependency file matches the
	  basename of the generated plugin; and so that all makefile variables
	  match the basename of the plugin.
	- Eric Sunshine added missing INC.FOO variables to casnddrv.mak,
	  csarts.mak, oss.mak.
	- Oktal made the following changes to the Perl plugin:
	    - Restructured the build process again so that the csperlxs.c glue
	      file is generated by the makefile or jamfile. If it fails, it
	      uses csperlxs_fallback.inc located in the plugin's directory.
	    - Removed the out-of-date autogenerated module documentation as
	      Swig no longer outputs the automatic documentation.
	    - Commented out Swig code that renames operator|| and operator&&
	      to 'or' and 'and' because those are new C++ keywords.
	    - Renamed variables named 'or' in the module for the same reason.
	    - Added a makefile target that forcibly regenerates the module
	      code, for use by the jobber.pl daily server cron job.
	- res made the following changes related to proctexes:
	    - PT loader plugins are now expected to return a texture wrapper,
	      not material wrapper.
	    - adjusted stdpt plugin to this behaviour.
	    - the callback for procedural textures now keeps a reference to
	      the PT.
	    - like normal textures, proctexes now don't create a material of
	      the same name at load time.
	    - adjusted flarge to specify materials for the PTs.
	- res changed the implementation of csThingStatic so that there's no
	  embedded iPolygonMesh interface now. Queries for iPolygonMesh returns
	  the result of iObjectModel->GetPolygonMeshColldet() and also printfs
	  a notification.
	- res fixed a leak in the Tiny XML parser. csTinyXmlDocument kept the
	  root as a ref to a csTinyXmlNode, which in turn kept a ref to the
	  document, leading to a circular reference. Solved by keeping the
	  root as a pointer to the TiDocument. New csTinyXmlNodes are created
	  when the root is requested.
	- res fixed a leak in the XmlRead plugin, analogue to the TinyXML leak.
	- res fixed a leak when the engine reads the precalc info introduced
	  after his recent changes related to VFS files.
	- res changed the sprite3d and genmesh factories analogue to the
	      changes made to csThingStatic.
	- res augmented the API modification docs with information about the
	  iPolygonMesh and procedural textures changes.
	- res cured the Bezier plugin from leaks caused by the
	  'embedded iPolygonMesh syndrome'.
7-May-2003
	- Eric Sunshine removed MSVC project-related variables from
	  csjoylin.mak.  This module is Linux-specific, therefore there is no
	  need to ever create an MSVC project file for it.
	- Eric Sunshine added an automated check to configure.ac to test for
	  presence of the Linux joystick API.  The test is based upon a code
	  fragment provided by Norman Kraemer.  This test obsoletes the
	  --enable-linux-joystick switch.
	- Eric Sunshine fixed configure.ac so that zlib, libpng, libjpeg, etc.
	  can be found when they reside in CS/libs (rather than an official
	  install location) even when building outside of the source directory
	  (i.e. building CS from CD-ROM, or cross-compiling, etc.).
	- Eric Sunshine fixed the perl5tst Jamfile so that it is governed by
	  the same constraints as the csperl5 Jamfile (that is, perl5tst is
	  only enabled if a usable Perl installation was discoverd during the
	  configuration process).
	- Fixed a memory leak in AWS reported by Gersh.
	- Fixed case in awsmled where 0 chars will be deleted from an empty
	  string, which led to an assertion failure.
	- res changed the proctex loader to support plugins. Specifying a
	  proctex the 'old' style will result in a notification.
	- res wrote a plugin wrapping the four built-in proctexes.
	- res also moved the <plugins> block in flarge since they are needed
	  before the textures now.
	- Matze made the following changes:
	    - Moved the definition of the distclean and maintainerclean rules
	      to the toplevel Jamfile.  Having these filenames in clean.jam is
	      not good for external projects.
	    - Also removed the clean target for application.txt again.  Some
	      external projects might have readme files in the same name.  (We
	      could let the Application rule construct a list of application
	      targets and generate the clean targets from this list, but I
	      think the question is if we really need this features)
	- Matze did several changes to the jam project generation (the script
	    that creates a basic jambuildsystem for your external projects):
	    - Added distclean and maintainerclean rules after the latest
	      changes in CS.
	    - Made the script interactive instead of requiring lots of
	      commandline arguments. Now the script outputs detailed
	      desciptions too.
	    - Creates a basic README with some building and installation notes
	      now.
	    - Rewrote some parts of the script.
	- res did some smaller fixes to the stdpt makefile and added stdpt.scf.
6-May-2003
	- Eric Sunshine made the following changes:
	    - Fixed Linux joystick makefile so that makefile target and
	      generated plugin name agree with one another (previously, one was
	      "joylin" and the other "csjoylin").
	    - Removed several obsolete and bogus entries from scf.cfg.
	    - Added several missing entries to scf.cfg.
	    - Fixed problem in CoreGraphics driver where it was not specifying
	      its SCF dependency properly.
	- Philip Wyett updated external MSVC app creation HOWTO. This version
	  is far more indepth and explains each element in more deatil. The
	  big writing with pictures version as it were! :)
	- Eric Sunshine adjusted the field widths in help.jam in order to avoid
	  all the "description" truncations.
	- Eric Sunshine fixed problem where empty G3D_FOGMETHOD enum in cs.i
	  caused Swig 1.3.19 for Windows to crash with segmentation fault.
	  Reported by Boyan Histrov.
	- Eric Sunshine eliminated copy/paste redundancy in LinkApplication
	  and LinkApplicationConsole rules in unix.jam and win32.jam.
	- Eric Sunshine corrected a number of typographical and other errors in
	  comments in the Jam files (CS/mk/jam).
	- Eric Sunshine corrected some confusion in objectivec.jam where .mm
	  and .M were being registered within the CMD.OBJC block rather than
	  the CMD.OBJC++ block.
	- Philip Wyett made additions to 'Common problems' section of MSVC
          external application tutorial.
5-May-2003
	- Eric Sunshine changed jobber.pl and snapshot.py to once again use
	  /home/groups/c/cr/crystal as a working area rather than /tmp.  It
	  seems that the snapshot script runs out of disk space when using
	  /tmp on shell1.sourceforge.net even though there appears to be
	  nearly 0.5GB available.
	- Eric Sunshine fixed problem with csConsoleOutput where it would crash
	  if a font-server was not available.  Problem was reported by Neil
	  Mosafi <nmosafi@totalise.co.uk>.  Now it instead reports a sensible
	  warning message (and avoids crashing).  Also fixed bug where it was
	  manually invoking IncRef()/DecRef() on its csRef'd `font' member.
	- Eric Sunshine applied a patch from Michael Herder <crapsite@gmx.net>
	  to awsScrollBar::Setup() to correct the placement of the horizontal
	  scroll bar left/right buttons.  Eric also corrected the initial
	  position of the "knob" for horzontal scrollers.
	- Oktal removed the Perl module's dependency on the SWIG interface file
	  in the csperl5 makefile so that it will not try to rebuild the module
	  (which will fail if users do not have SWIG installed) when this
	  interface file is updated (the module will be updated with the same
	  changes when the interface file is modified).
	- Marten Svanfeldt fixed a few compilation errors in MSVC 7.1
4-May-2003
	- Eric Sunshine made the following changes:
	    - Updated Swig test in configure.ac to utilize new optional version
	      number component capability of progver.m4.  This is needed
	      because older versions of Swig emit a 2-part version number (such
	      as 1.1), whereas newer ones emit a 3-part number (such as
	      1.3.19).
	    - Fixed problem where recent change to configure.ac caused it to
	      create several files deep within the CS source tree.  This is a
	      problem because the CS source tree might be on a read-only volume
	      (such as a CD-ROM), or might be shared (perhaps via NFS) between
	      several builds.  Furthermore, it failed when the build directory
	      differed from the source directory.  Instead of creating the
	      one-line csperlxs.c file in the plugins/cscript/csperl5 directory
	      to include the appropriate .inc file, it now emits the header
	      property CS_PERL5_XSINC to volatile.h with the value of the .inc
	      file to include.
	    - Fixed problem where configure.ac was creating the file
	      csperlxs.inc during the configuration phase.  It is not the
	      responsibility of the configure script to create output files.
	      Instead, it is the responsibility of config.status to see to this
	      chore.  Therefore, configure.ac now invokes AC_CONFIG_COMMANDS()
	      to delegate creation of csperlxs.inc to config.status.
	    - Fixed bug where recent changes to configure.ac caused it to
	      reference the non-existent shell variable
	      PERL5.EXTUTILS.DYNALOADER, thus causing creation of csperlxs.inc
	      to fail.
	    - The configure script no longer emits the PERL5.EXTUTILS.AVAILABLE
	      and PERL5.EXTUTILS.DYNALOADER build properties to config.mak and
	      Jamconfig since recent changes obsoleted these variables, and
	      they are no longer used by the csperl5 makefile and Jamfile.
	    - Fixed a number of errors in csperl5.mak where it was not
	      respecting $(SRCDIR), thus resulting in build failure when
	      building outside of the CS source tree.
	    - Fixed bugs in csperl5.mak where it used CEX.CSPERL5 and
	      CIN.CSPERL5 in some places but CEX.PERL5 and CIN.PERL5 in others.
	- Eric Sunshine changed the Application rule in application.jam so that
	  it also ensures that <appname>.txt gets removed at "jam clean" time.
	  These .txt files are created on Windows when each application runs.
	- Norman Kraemer added $@ to call of autoconf in script bin/autogen.sh
	  to transfer optional commandline parameters to autoconf
	- Eric Sunshine made the following changes:
	    - Changed jobber.pl and snapshot.py to once again use /tmp as the
	      working directory rather than /home/groups/c/cr/crystal.  Use of
	      the /tmp directory is now possible since SourceForge lifted the
	      5MB quota restriction which used to plague /tmp.  This should
	      make these scripts run slightly faster since /tmp is a local
	      directory, unlike /home/groups/c/cr/crystal which is NFS-mounted.
	    - Fixed a bug in jobber.pl introduced on 2-May-2003 in which PATH
	      was gorked, which caused most commands invoked by jobber.pl to
	      fail when executed from cron (though not when run from an
	      interactive shell session).
	- res added a prototype for csGetPlatformConfig() to cssys/sysfunc.h.
	  This can be used to retrieve a platform-specific configuration
	  storage facility, intended for user-set settings/setting changed at
	  runtime.
	- res implemented csGetPlatformConfig() for Win32. The implementation
	  uses the registry.
	- res also changed RegCreateKey() to RegOpenKeyEx() in instpath.cpp.
	  RegCreateKey() is not only deprecated, but it also creates a
	  registry key if needed, which is unnecessary as we just want to read
	  something there.
3-May-2003
	- Matze changed -Wno-unused-function and -Wno-unused-label flags to
	  -Wno-unused in aws Jamfile. Seems gcc2.9x doesn't like the first 2
	  flags.
	- Matze did several changes in the jamrules:
	    - Rewrote custom filetype registration in the jamrules.  Now the
	      rules can decide themself what objects result from sourcefiles.
	      This allows cleaner handling of header files and makes it
	      possible to output multiple object files from one source file.
	    - Headerfile scanning has to be enabled explicitely for registered
	      rules.  This avoids incorrect headerfilescanning in bison and
	      flex files.
	    - Cleaned up and improved bison and flex rules.  They are alot more
	      robust now as jam is aware that bison produces 2 files (a cpp and
	      a header file).
	- Oktal updated the Perl module:
	    - Rearranged the generation of csperlxs.c.  Configure now generates
	      a csperlxs.inc file with Perl, and echoes out a one-line
	      csperlxs.c file which just #include's the inc file.  If that
	      fails, the fallback inc file is switched to, by changing the
	      #include line.
	    - Reenabled the Jamfile (see Matze 29-Apr-2003).
	    - Updated the Makefile in line with the changes.
	    - Fixed the example Perl code in perl5test so it follows the
	    conventions of the new SWIG module.
	- Norman Kraemer extended progver.m4 for patterns to contain optional
	    components.  Thus we can now have a pattern like this:
	    9.9|.9 where the last part is optional (.9)
	    or even
	    9.9|.9|._|.9 where we have 3 optional parts
2-May-2003
	- Eric Sunshine augmented jobber.pl to make it possible to associate
	  multiple directories with a single "target" (in @TARGETS).  All of
	  the current updating targets modify files in a single directory
	  hierarchy (for instance, "htmldoc" modifies the "out/docs/html"
	  hierarchy, but touches nothing outside of this directory).  With this
	  change, however, future targets can modify, add, remove files in
	  multiple directories.  For instance, the upcoming Swig re-generation
	  target will touch files in several directories.
	- Oktal updated the csperl5 Jamfile in line with the recent updates to
	  the Makefile (see Oktal 30-Apr-2003). It is still disabled, because
	  I can't figure out how to enable and test it (see Matze 29-Apr-2003)
	- Matze fixed a double declaration of window_item in skinpars.yy
	- Matze fixed a problem with jamrules on Win32. shellscripts should be
	  invoked through the shell.
	- Matze made the configure script respect the CFLAGS, CXXFLAGS,
	  CPPFLAGS and LDFLAGS passed to configure. Also augmented the
	  jamtemplate to take care of this by adding a new compiler.m4 macros.
	- Wouter updated csfgen so it defaults an alphamap of the font by
	  default. The opengl video uses this for antialiased font rendering.
	  Unantialiased fonts can also be created (with -a).
1-May-2003
	- res made the following changes to VFS:
	    - Added iFile::SetPos() to complement iFile::GetPos().
	    - Added a new parameter to iFile::GetAllData() and iVFS::ReadFile()
	      whether the returned data buffer should feature a null
	      terminator.  Default is 'no' resp.  'yes'.
	    - Implemented GetAllData() for VFS disk files.  When supported by
	      hardware and no null terminator is requested, nothing is read but
	      a file mapping is created.  The created buffer is also saved and
	      all subsequent reads are copied from this buffer.
	    - Added the possibility to map a disk file into memory on opening
	      when it is in a specific size range, but disabled for now as I'm
	      not sure whether this is really advantageous.
	    - Fixed the document system plexer to seek in a file to the initial
	      position prior passing it to the "real" document system.
	    - Changed binary loader to take advantage of iFile::GetAllData().
	    - Parser now requests buffers w/o null termination for image
	      loading.
	    - Changed TinyXML plugin to use iFile::GetAllData().
	- res changed the VFS cache manager to return data w/o null terminator.
	- res added a new constructor to csDataBuffer, copying from an existing
	  data buffer (and adding a null terminator.)
	- res fixed precalc info reader for the changed cache manager
	  behaviour.
30-Apr-2003
	- Philip Wyett removed MSVC external references to /MT and /MTd as
	  these params are not valid and will cause problems if used when
	  creating an application with current CS.
	- Eric Sunshine made the following changes:
	    - Removed the ugly FILTER argument from CS_TEXT_CACHE_OUTPUT() in
	      textcache.m4.  This was a nasty hack to allow
	      CS_JAMCONFIG_OUTPUT() to do global post-processing of the cache
	      before otuput.  Fortunately, however, the Jam-related
	      installation-paths code has been refactored so that this is no
	      longer needed, and is no longer used by CS_JAMCONFIG_OUTPUT().
	    - Upgraded textcache.m4 to use AS_IF() rather than raw `if'.
	- Eric Sunshine renamed cswigpl5.c to cswigpl5.cpp in repository since
	  this is the filename which the makefile expects (and to ensure that
	  it gets compiled as C++, rather than C).
	- Eric Sunshine renamed vd.m4 to progver.m4 since it provides the
	  AC_CHECK_PROG_VERSION() (not some macro named VD).
	- Finally fixed a bad bug which caused levels that use Dynavis to
	  be lit wrong. The reason was that Dynavis access the thing data
	  at an early stage at which point materials and textures haven't
	  been registered yet. Accessing the thing data causes the thing
	  to 'Prepare' itself and if that happens with the texture not yet
	  prepared the thing will assume the texture is 64x64. Of course
	  that may turn out to be completely wrong but all future lighting
	  calculations will still be based on that wrong value. I solved this
	  by not setting 'prepared' to true when a missing texture is found.
	  This will force the thing to be prepared again later at which
	  point the texture is most likely present.
	- Fixed a missing initialization of logparent in csThingStatic.
	- Eric Sunshine made the following changes to progver.m4 and
	  configure.ac:
	    - Performed some cleanup of CS_CHECK_PROG_VERSION() and its support
	      macros.  (progver.m4 could use some more reformatting, though, as
	      it is still somewhat difficult to read.)
	    - Fixed some potential quoting problems in progver.m4.
	    - Upgraded progver.m4 to make better use of m4sugar facilities.
	    - Renamed all of the shell variables in progver.m4 to better
	      conform to Autoconf naming conventions.
	    - Renamed AC_CHECK_PROG_VERSION() to CS_CHECK_PROG_VERSION().
	    - CS_CHECK_PROG_VERSION() now exports the shell variable
	      cs_cv_prog_PROG_version_ok, rather than the inverted
	      ac_cv_check_version_PROG_bad.
	    - Fixed issue where emitted result string from
	      CS_CHECK_PROG_VERSION() via an uncached run did not match
	      emitted result via a cached run.
	    - Removed the AC_CHECK_BISON_VERSION() and AC_CHECK_SWIG_VERSION()
	      specialization macros from progver.m4 since they polluted an
	      otherwise general-purpose macro utility file.
	    - Upgraded configure.ac to utilize CS_CHECK_PROG_VERSION() for
	      Bison and Swig tests.
	    - Eliminated now obsolete bison.m4 (AC_CHECK_BISON).
	- Norman Kraemer modified configure.ac to fix the case when
	  distutils.sysconfig.get_config_var() return None so concatenation
	  with a string would fail fails
	- Oktal made the following changes to the Perl cspace module:
	    - Numerous updates to the SWIG interface files.
	    - Commented out some erroneous sections of perlpost.i, for future
	      fixing, meaning that those features of CS are unwrapped.
	    - Reorganised the SWIG-generated C++ code, so the code is written
	      to cswigpl5.inc, and cswigpl5.cpp is a two-line file that first
	      #include's css.h, then cswigpl5.inc. This is the best way to
	      make sure that the very first file to be included is cssysdef.h,
	      which in turn fixes some problems like the lack of int64 macros.
29-Apr-2003
	- Matze fixed bad filepermission for jam install
	- Matze moved crystal.m4 around to mk/autoconf and merged to make and
	  jam versions of the script.
	- Norman Kraemer fixed version detection.  The right result is now also
	  found if not all parts of the version string return the same result
	  in comparision with the supplied version, e.g.  That is not only
	  "1.3.16 >= 1.2.13" will yield true, but also "1.3.16 >= 1.2.20".  He
	  also changed some of the variable names to comply with Autoconf
	  rules.
	- Norman also added recognition of "Change" and "BigChange" property to
	  aws scrollbar's setup.  This enhancement was submitted by Logan
	  Gabriel <gersh@sonn.com>.  He also fixed documentation of aws
	  scrollbat as hinted by Logan.
	- Matze disabled csperl5 Jamfile, until it is fixed, but I don't want
	  to mess around here without having a working example (a working
	  makefile).
	- Matze separated installation path handling for Jamconfig and moved
	  the filter stuff to the install macros.
        - JTarbox updated the event object from csVector to csArray<>
	- res added some missing includes to glextmanager.h
	- res changed the new GL renderer to utilize the modified extension
	  manager.
	- Matze changed the way the jam install rule looks for scfreg. Now you
	  can also use it easily in external projects by simply setting
	  CMD.SCFREG
	- Norman Kraemer added some information to vd.m4 about whats going on.
28-Apr-2003
	- Matze fixed vfs.cfg generation when doing jam install.
	- Eric Sunshine made the following changes to the cspython build
	  mechanism:
	    - Fixed problem: Latest changes assumed that everyone had Swig
	      installed, and always attempted to re-create the Swig-generated
	      files when the cspython or pythmod modules were built.
	    - Fixed cspythonclean and pythmodclean targets.  They were not
	      removing all of the transient, generated files.  (In fact, "make
	      pythmod ; make pythmodclean; make pythmod" would not rebuild the
	      pythmod module at all for the second invocation.)
	    - Fixed problem with non-standard use of $(MKDIR) which caused
	      mkdir to attempt to create the pythmod transient directory twice.
	      The second attempt would fail.
	    - It is once again possible to build pythmod when building the
	      project in an external directory (outside of the source tree).
	- Eric Sunshine eliminated numerous compilation warnings throughout the
	  project.
	- Eric Sunshine fixed botched conversion by automated script which
	  emitted $(SRCDIR)/TO_INSTALL.CONFIG+=FOO and $(SRCDIR)/MSVC.DSP+=FOO
	  in a couple makefiles rather than TO_INSTALL.CONFIG+=FOO and
	  MSVC.DSP+=FOO.  (The SRCDIR prefix should not have been added.)
	- Eric Sunshine made the following changes to pgtest.mak:
	    - Fixed bug which caused pgtest to be rebuilt every time the pgtest
	      makefile target was invoked (directly or indirectly) even if the
	      program was already up-to-date.
	    - Converted the makefile over to the new style where the object
	      files are placed in their own module-specific output directory.
	      Please use this style for all new makefiles (either by copying
	      from an existing makefile which has been converted, or by
	      consulting CS/mk/template.mak).
	- Eric Sunshine fixed problem in jamcache.m4 in which
	  CS_JAMCONFIG_OUTPUT()'s filter was using a non-portable sed
	  expression which failed with some sed implementations (such as the
	  one shipped with MacOS/X).
	- Oktal updated the Perl plugin to support the new version, Perl 5.8:
	    - Renamed the interpreter plugin to my_perl, in line with the
	      assumptions of the macros in the Perl API.
	    - Fixed the incorrectly-defined function prototype of the xs_init
	      function, which only worked by chance before 5.8.
	- res made the following changes to the script-generated extension
	  manager (from scripts/python):
	    - Extension to be used now must be explicitly requested via
	      Init<ext>() (e.g. InitGL_ARB_multitexture())
	    - Only check once for every extension
	    - Emit names of functions not found
	    - Use of extensions can be enabled/disabled via config.
	- res changed the OpenGL canvases to use the extension manager (to ease
	  use of OpenGL extensions)
	- res moved the imaging subset functions in the XML GL extensions list
	  over to ARB_imaging.  Although the subset is part of the OpenGL 1.2
	  spec, it states that it might not be supported by implementations.
	  It is indeed not supported by the ATI Catalyst drivers, causing the
	  GL_version_1_2 pseudo-extension to fail initialization.
	- Duhprey (and also Dentoid) did the following (new renderer only):
	    - Changed sector so the engine is now responsible for coordinating
	      draw by setting the shader and then drawing all objects which use
	      that shader.
	    - Instead of drawing the objects now prepare the csRenderMesh for
	      the engine
	    - The renderer now expects the shader to be set before any calls to
	      draw
	- Eric Sunshine fixed problems where csArray<T>::Pop() and Top() were
	  accessing the non-existent `Length' instance variable.
	- Norman Kraemer added an Autoconf macro to check program versions.
27-Apr-2003
	- Philip Wyett fixed the DDS plugin compilation under MSVC, by
	  replacing struct with static (don't ask) and giving the the array an
	  element size.
	- Philip Wyett removed the Python 2.2 cs_pyth.cpp hack from the MSVC6
	  build docs.  It is no longer needed after the expansion and recent
	  upgrade of the Python plugin.
	- Philip Wyett eliminated MSVC compiler warning by casting rval of
	  csInvalidStringID.
	- Eric Sunshine made the following changes:
	    - Modified configure.ac so that it emits a SRCDIR property to
	      config.mak.  This value represents the --srcdir argument given to
	      the configure script (or "." if --srcdir is omitted).  This
	      points at the directory containing the CS source code (which may
	      differ from the build directory, which is typically the current
	      working directory).
	    - Modified makefiles and build scripts throughout the project so
	      that they respect $(SRCDIR).  This allows the project to be built
	      in a directory other than the source directory, thus it is
	      possible to place the source directory on a readonly filesystem
	      (such as a CD-ROM), or to share a single NFS-mounted source
	      directory among different builds, where each build inhabits its
	      own directory.  For example, if CS resides at /home/CS and you
	      wish to build the project in /home/build:
		  % cd /home/build
		  % ../CS/configure
		  % make -k all
		  % make install
	      (Note that the Jam-base build system already supports this build
	      paradigm.)
	    - Modified configure.ac so that it emits EXTENSIVE_MEMDEBUG to
	      config.mak since this variable is used by Makefile.in for the
	      `showconfig' target.
	    - Modified configure.ac so that it emits MONITOR_MAKEFILE_CACHE
	      when the value is either "yes" or "no", instead of emitting it
	      only when the value is "yes".  This was necessary because
	      CS/mk/cache.mak prints the value of this variable as part of
	      $(SYSMODIFIER).
	- Matze did the following changes to the jam rules:
	    - Added the possibilities to use custom header scan patterns.
	      Added custom headerscanpatterns to the nasm and swig rules.
	    - Improved the swig rules.
	    - Cleaned the bison and flex rules a bit.
	- Matze added some scripts which create a basic external CS
	  application with a jam build system.
	- Rene Jager did the following:
	    - Modified way of python scripting building.  Files generated by
	      SWIG are now in $(OUTDERIVED)/python, python module building
	      takes place in $(OUT)/python and python module files are
	      installed in $(OUTPROC)/python.  Before committing files
	      generated by SWIG a "make swigpythinst" is needed.
	    - Updated SWIG python scripting files to reflect latest CVS state.
	      This will be automated soon.
26-Apr-2003
	- Norman Kraemer added a swig.jam file for custom swig rules and
	  used the new power to rebuild the cs_pyth.cpp from cspace.i if
	  needed and possible.
25-Apr-2003
	- Fixed a bug in the engine with frustums. Frustums used csRef now
	  but there was still one case where a manual DecRef() was done.
	  This caused crashes when firing missiles.
	- Fixed another csFrustum::DecRef() in the thing plugin.
	- Fixed yet another csFrustum::DecRef() in the thing plugin.
	- Changed csArray::SetCapacity() so that it will now correctly
	  construct new elements using the default constructor. Previously it
	  was not doing that which made the routine not better than
	  SetLengthUnsafe(). In addition SetCapacity() can now also decrease
	  the capacity (it will behave like Truncate() in that case).
	- Restored csArray::SetCapacity() to old behaviour and added a new
	  function csArray::SetLength() that allows to shrink or enlarge
	  the actual number of elements in the array with proper construction
	  and destruction. Also avoids the need for a default constructor
	  by using the copy constructor to construct new items in SetLength().
	- Optimized csHashMap again.
	- Added csGlobalHashIterator to iterate over all elements in a hashmap.
	  This is more efficient then using csHashIterator for this.
	- csHashIterator can no longer iterate over the entire hash. If you
	  want that you need csGlobalHashIterator instead. That way it
	  is possible to more efficiently optimize the two different
	  ways to iterator. The same is true for csHashIteratorReversible.
	- Some further optimizations on csGlobalHashIterator.
	- Several fixes to csArray::SetCapacity() and related.
	- Another csArray::SetCapacity() fix.
	- Eric Sunshine fixed some Texinfo mark-up errors reported by makeinfo.
	- Eric Sunshine fixed a number of formatting and Texinfo mark-up
	  problems in movierec.txi.  Also eliminated a number of `hbox'
	  warnings from various .txi files reported by TeX.
24-Apr-2003
	- Eric Sunshine made the following changes:
	    - Improved robustness of --with-x check for Darwin/Macintosh, since
	      $with_x suddenly started evaluating to nothing on Wyatt's
	      machine, which caused the expression `test $with_x = yes' to
	      fail with a syntax error.
	    - Changed bison.m4 so that it no longer abuses the user.  We do not
	      need to abuse the user just because an optional tool is missing
	      or has the wrong version number.
	    - Rewrote the sed extraction expressions in bison.m4 for a couple
	      reasons.  First, they crashed and burned horribly on MacOS/X.
	      Second, they were using non-portable features which are not
	      present in older sed implementations.
	- Fixed a compile error in lview.h.
	- Fixed another compile error in bezier mesh.
	- Greatly optimized the CS hashmap. Now it is several factors faster
	  than before and also uses less memory. Filling 1000000 elements
	  in a hashmap with 211 buckets (default) now takes 1 second instead
	  of 2.5. Traversing all elements takes 37 ms instead of 144.
	  Getting 100000 random elements takes 49 ms instead of 218.
	- Added TransferTo() function to csArray<T>, csPArray<T>,
	  csPDelArray<T>, and csRefArray<T>. With this function you can
	  do a full transfer of the entire array to another. This will
	  make the source array empty and the destination array the copy
	  of the source array. This is a very efficient operation (only
	  moves pointers, not the actual data).
	- Added csArray<T>::DeleteRange().
	- csHashMap now grows bucket size dynamically. This seems to give
	  good results but I limit the growth to about 10000 elements
	  because beyond that the overhead of growing the buckets becomes
	  too high and performance drops a lot. Because of this the default
	  bucket size in hash map has been reduced to 53 elements.
	- Philip Wyett initialized counters to zero at decleration. This
	  fixes compilation warning(s) and possibility of arbitary values.
	- Philip Wyett eliminated struct vs. class warning under MSVC in
	  maya2spr.
	- Norman Kraemer added a m4 script to find out about Bison's version.
	  He also added a call to AC_CHECK_BISON in configure.ac to ensure that
	  build variables will only be emitted for make and jam for Bison 1.35
	  and better.
	- Matze added a MakeLocate jamrule for jam version 2.4. This avoids
	  the "bla depends on itself" warnings.
23-Apr-2003
	- Removed iPluginManager->GetPluginCount() and GetPlugin() since
	  those two functions cannot be used in a thread-safe way. The
	  entire plugin manager is thread safe but those two functions
	  prevented using it correctly. Instead there is now a GetPlugins()
	  function which returns an iPluginIterator instance. That instance
	  takes a copy of the plugin manager so that the plugin manager
	  is not locked.
	- Did a similar change to the reporter. There is now also a
	  iReporter->GetMessageIterator().
	- Removed the loaderthread.h header again. This is going to be done
	  differently.
	- res added a facility to thje glwin32 canvas to check whether
	  hardware acceleration is present. Usage is: PerformExtension
	    ("hardware_accelerated", &hasAccel) where hasAccel is a bool.
	- res fixed some flawed doxygen comments, removed all doxygen-specific
	  files from docs/support and changed docs/docs.mak to utilize the
	  docs/doxygen directory instead.
	- Bart Boatwright changed all instances of csFrustum::Intersect to
	  return csPtr<csFrustum> rather than csFrustum*; csFrustumContext,
	  csFrustumView, csBezierLightPatch, csLightPath now using smart
	  pointers; added csFrustumContext::SetNewShadow and ::SetNewFrustum
	  methods; csShadowBlock using csRefArray instead of deprecated
	  csVector; removed some unnecessary includes of csvector.h; removed
	  tabs from some files.
	- Rene Jager updated SWIG input files cspace.i, pythpre.i and
	  pythpost.i in include/ivaria/ to provide "safe" (safe as CS) pointer
	  handling with csWrapPtr. The building of a CS python module should
	  work better now by means of plugins/cscript/cspython/pythmod_setup.py
	  (ES provided PYTHON.DISTUTILS in config.mak). Additionally, it is
	  now possible to derive from csPyEventHandler in Python which allows
	  to write event handlers in Python and use them as iEventHandler's
	  in C++.
22-Apr-2003
	- Eric Sunshine added links for the new CrystalDoc translation project
	  to the Crystal Space web site.  Also cleaned up the web site's main
	  menu a bit.  Re-ordered the entries so that the most interesting and
	  useful are near the top.  Renamed some entries to make them less
	  confusing.
	- Bart Boatwright fixed bug in csEventQueue which caused an endless
	  recursion leading to a stack fault during RemoveListener calls.
	- Bart Boatwright added OnExit() method to csApplicationFramework.
21-Apr-2003
	- Rhad modified csPosixCondition::Wait() to not pass through
	  CS_SHOW_ERROR when a timeout is specified and expires. The
	  original behavior caused a massive amount of non-informative
	  debug output when the timeout was put to use.
	- Eric Sunshine augmented configure.ac so that it emits PYTHON makefile
	  and Jam variables.  This variable is now required by cspython.mak
	  which uses it to invoke pythmod_setup.py.
	- Philip Wyett disabled 'csperl5' plugin from build process since it
	  still fails to build on many platforms, thus resulting in a lot of
	  support-related grief.
	- Eric Sunshine augmented configure.ac so that it emits
	  PYTHON.DISTUTILS=yes to config.mak and Jamconfig if the Python
	  installation includes the distutils module.  This variable can be
	  used by the cspython module to adjust its build script for the
	  environment.
20-Apr-2003
	- Micah updated the .cvsignore files to include flarge's cache and
	  the completed binaries without a special extension.
	- Micah fixed some compile errors in the pgserver plugin due to 'or'
	  being a reserved symbol in g++ version 3.2.2
	- Eric Sunshine corrected the WinCVS URL in the tutorial based upon
	  report by <squee@tdzk.net>.
	- Micah added a little error handling to the picogui server plugin
	- Philip fixed a couple of typos in the MSVC docs.
18-Apr-2003
	- Started a document describing which parts of Crystal Space are
	  thread-safe and which are not.
	- Made SCF class loading/unloading thread-safe. This means
	  that SCF_CREATE_INSTANCE is safe.
	- Made the plugin manager thread-safe. This also means that macros
	  like CS_LOAD_PLUGIN and CS_QUERY_PLUGIN_CLASS are now thread-safe.
	- Made the object registry thread-safe. This means things like
	  CS_QUERY_REGISTRY are now thread-safe.
	- Also the object registry now returns a csPtr<> for the
	  object registry iterators.
	- Added an entry to the faq about lack of hardware stencil causing
	  possible slow-down if not accelerated.
	- VfsArchiveCache (in VFS plugin) uses csPDelArray<T> instead
	  of csVector.
	- Removed all the ToText() routines in iSyntaxService. They are not
	  useful anymore with the new XML format and they prevent the
	  syntax services plugin from being totally thread-safe.
	- Removed all broken implementations of the WriteDown() functions
	  in the mesh savers. These need to be reimplemented using
	  XML.
	- Made the TinyXML parser thread-safe by moving the node pool from
	  document system to the document itself (i.e. a pool per document).
	  Note that this is only thread-safe when using different documents
	  for different threads. Don't use the same document in different
	  threads! Also VFS itself is not yet thread-safe. So the parsing
	  and writing functions on iDocument that use either iFile or
	  iVFS are not safe!
	- The XMLRead parser has been made thread-safe in the same way.
	- Made the reporter and standard reporter listener thread-safe.
	  However the standard-reporter listener will only become
	  really thread-safe after the output consoles are thread-safe.
	- The simpcon output console is now thread-safe provided
	  auto-updating is disabled! Note that this is enabled by default.
	- The csconout output console is also thread-safe under the
	  same restrictions as simpcon.
	- Removed the STRICT_SMART_POINTERS flag. This is now on in all cases.
	  People should have converted to smart pointers by now.
	- Fixed several application makefiles to also link with CSSYS
	  at the end now. This is needed because of the new csMutex
	  dependencies.
	- Oktal swapped round a conditional expression in csHashComputeEvent
	  that was causing some event types to be improperly encoded.
	- Oktal re-fixed his yesterday's fix to pythpre.i so it now uses
	  CS_ALLOC_STACK_ARRAY.
	- Oktal added the Perl5 extensions to Rene's SWIG interface files.
	  None of the scripting modules yet build with Jam, though.
	- Oktal made some fixes to the svgalib 2d canvas plugin's Jamfile.
	- Oktal added the PicoGUI server plugin. PicoGUI is a small
	  client/server GUI architecture, and the server plugin will allow
	  clients to be drawn on the CrystalSpace 2D canvas. A client plugin
	  is in development, which will allow clients to be written in CS.
	  It doesn't actually work yet, but it'll only build if libpgserver
	  is found, and there are no compiler errors (or segfaults!)
	  I wanted to commit this due to popular demand, before I leave
	  on holiday for a week. The demanders can have a play and see
	  if they can fix it.
17-Apr-2003
	- Fixed a bug in the common polygon buffer implementation where it
	  was incrementing the ref count on poly_texture without testing if
	  it is NULL or not.
	- Added a kdtree to every sector for representing all the static
	  and pseudo-dynamic lights. That speeds up the two GetNearbyLights()
	  routines considerably if there are a lot of lights in the level.
	  This also means that DeferUpdateLighting() will be faster as it uses
	  those routines.
	- Applied a patch from Anders Reggestad to clear the selection from
	  an AWS list box when 'ClearList()' is performed. Without this
	  patch asking for the selection after ClearList() would crash.
	- Anders also gave a patch to increase the ref count of an image
	  in the same list box.
	- Fixed the rapid fix from Rhad so that instead of comparing directly
	  with 0 (which you should never do with floats!) it now uses an
	  epsilon test instead.
	- Replaced some code in Rapid with csVector3 instead of float[3].
	- Fixed OPCODE plugin so it tests if the transforms to Collide()
	  are actually given.
	- Added a note to the docs that RAPID is not for commercial usage.
	  Use OPCODE if you want commercial usage.
	- Fixed three initialization errors in the OPCODE plugin which could
	  cause a crash at exit (and actually did).
	- Both RAPID and OPCODE now call Cleanup() on the polygon mesh to
	  release unneeded memory. I thought this was done a long time
	  ago but apparently not.
	- libs/cssys/win32/win32.cpp was including graph2d.h and
	  graph3d.h. That is not needed. Only natwin.h and cursor.h
	  from include/ivideo are required.
	- Oktal fixed some non-ANSI code in pythpre.i that could cause
	  compilation of the Python cspace module to fail on some compilers.
16-Apr-2003
	- Rene Jager updated Python scripting.
	  The cspython plugin can now access CS almost completely.
	  A python module can be built by "make pythmod" which allows for
	  writing CS application python.
	  Base on Python 2.2.x and SWIG 1.3.17. For platforms where Python 2.2.x
	  is run by the command "python2", use "PYTHON=python2" before
	  "./configure" and "make *" commands.
	  Changes made to include/igraphic/imageio.h, include/iutil/event.h and
	  include/ivideo/graph3d.h to make struct's usable for SWIG, without
	  breaking existing code.
	- Rhad altered the rapid triangle collision test to ignore
	  degenerate triangles.
	    - Added a couple tests for degenerate tris that should
	      be very fast. A degenerate tri in a test never collides.
	- Bart Boatwright added csApplicationFramework class.
	- Rhad fixed csList so that it functions to at least a greater
	  extent than it originally did.
	    - Iterator::HasNext() and Iterator::HasPrevious now return
	      a boolean value as their name implies.  Code relying on
	      the broken functionality of these members should call
	      Iterator::HasCurrent() instead which returns true if the
	      iterator currently points to a valid element.
	    - csList::Delete(Iterator it) has been changed to progress
	      the iterator forward or backward (depending on how the
	      iterator was created) prior to deleting the element data
	      that the iterator operates on.  Existing code should require
	      no change since calling this function caused the iterator to
	      point to an element which had been delete()ed previously,
	      and now simply points to a valid element (i.e. it used to
	      crash if you used it again, now it wont).
	    - csList::Delete(csListElement*) has been added to allow deletion
	      of an element without passing through an implicit Iterator
	      construction.
	    - renderer3d/opengl/gl_varbufmrg.cpp has been changed to call
	      Iterator::HasCurrent() instead of Iterator::HasNext()
	      or Iterator::HasPrevious().  This is the only place where
	      csList is used within the Crystal Space CVS code.
	- Micah fixed some typos in the movie recorder HOWTO.
	- Matze did the following changes to the jambuild:
	    - Added workarounds to make the system working with boostjam.
	    - Completely reworked the documentation rules.
	    - Fixed configure to only output Makefiles when run from top
	      source directory.  This is necessary because the CS GNU make
	      system is not yet capable of building the project outside of the
	      source directory.
	- Fixed the makefiles of all particle systems. They need to link
	  with cstool now. Also fixed the Jamfiles.
	- It is no longer needed to actually specify a <box> or <mesh>
	  inside the new <polymesh>. If you don't specify either then the
	  action is to clear the polygon mesh for that specific type (colldet
	  or viscull). This basically disables collision detection or
	  occlusion writing for that object.
	- Fixed two cases (in engine and genmesh) where a comparison was done
	  with the influence radius of a light (for new renderer) instead
	  of with the squared radius. Avoid qsqrt or sqrt at all cost!
	- Added new version of iEngine->GetNearbyLights() which accepts
	  a box instead of a position.
	- DeferUpdateLighting() now uses this new GetNearbyLights() function
	  to have more accurate lighting. This especially improves things
	  when you have big objects. In the past with the old GetNearbyLights()
	  this would often give bad results because lights with a radius
	  smaller then the object would not be registered.
	- The Delete() function in csRefCount class is now protected
	  instead of private. That way subclasses of csRefCount can override
	  Delete() to provide for other functionality (like returning the
	  object to a pool).
	- Removed unused csDLinkList class.
	- Changed a backslash in an include statement in the new
	  application framework header to a slash. Backslashes in include
	  files are not allowed.
	- Started work on threaded loading. The basic idea is that there will
	  be an iLoader->LoadMapFileThreaded(). That function will return
	  an iLoadingStatus object which the loader thread will update when
	  new objects arrive and the main thread can query to add those
	  objects to the engine as they are loaded in the loading thread.
	  Work on the interfaces alone at this moment.
	- res added a new "Application Framework" module to the API docs.
	- Eric Sunshine performed minor clean up of recent changes to
	  configure.ac.
15-Apr-2003
	- Fixed a bug in the thing plugin.  If the dynavis culler was already
	  mentioned before all other objects in the sector then this could
	  cause crashes.
	- Added the following functions to iObjectModel:
	    - GetPolygonMeshBase: Get a polygon mesh representing the basic
	      geometry of the object.
	    - SetPolygonMeshColldet: Set a polygon mesh representing the
	      geometry of the object.  This mesh is useful for collision
	      detection.  This can be used to replace the default polygon mesh
	      returned by GetPolygonMeshColldet() with one that has less detail
	      or even to support polygon mesh for mesh objects that otherwise
	      don't support it.  The object model will keep a reference to the
	      given polymesh.
	    - SetPolygonMeshViscull: Similar to SetPolygonMeshColldet() but now
	      for visibility culling (occluder writing).
	- Added csObjectModel helper class to csgeom to help implement object
	  models for mesh object plugins.
	- Fixed all mesh object implementations to use the new csObjectModel.
	- res added a check for DirectDraw to the configure process.
	- res added the missing Jamfile for directxcommon.
	- Added new rain mesh object from Martin Geisse. This version looks
	  correct if you tilt the camera to look up and it is considerably
	  faster since it is using DrawTriangleMesh.
	- Fixed csMeshObject default implementation a bit.  The bounding box
	  stuff was not very good and the functions were not virtual so it was
	  not possible to override them.
	- It is now possible to specify alternative polygon meshes for objects
	  in the map file.  Here is an example:
	    <polymesh>
                <box>
                    <min x="-1" y="-1" z="-1" />
                    <max x="1" y="4" z="1" />
                </box>
	        <colldet />
	    </polymesh>
	  Add this inside a 'meshfact' or 'meshobj'.  It will make a box mesh
	  for the object at the given object-space coordinates.  The mesh will
	  be used for collision detection.  If you want to use this mesh for
	  visibility occlusion you can use the <viscull /> keyword instead (or
	  both).  Check out data/flarge/world for an example.
	- Additionally implemented <mesh> inside <polymesh>.
	    <polymesh>
                <mesh>
		    <v x="-1" y="-1" z="-1" />
		    <v x="1" y="-1" z="-1" />
		    <v x="0" y="4" z="-1" />
		    <t v1="0" v2="1" v3="2" />
                </mesh>
	        <colldet />
	    </polymesh>
	- res did more new renderer lighting tweaks and fixes:
	    - Added helper function to iLight to calculate an attenuation
	      vector for an attenuation type, a radius and a brightness at this
	      radius.
	    - Added helper function to find the distance from a light for a
	      brightness.
	    - Parser now recognizes a "brightness" attribute for <radius> to
	      specify what brightness a light should have at the specified
	      radius.
	    - Influence radius can be manually override using
	      <influenceradius>.
	- Eric Sunshine folded out some redundancy from configure.ac introduced
	  recently into the X-Windows check.  Also performed very minor cleanup
	  of new DirectDraw check.
	- Eric Sunshine extracted all of the useful, general-purpose utility
	  macros from CS/configure.ac, and placed them into individual,
	  re-usable utility m4 files in CS/mk/autoconf.  The new files are:
	  checkbuild.m4, checklib.m4, headercache.m4, jamcache.m4,
	  makecache.m4, mkdir.m4, split.m4, textcache.m4, and trim.m4.
14-Apr-2003
	- Philip Wyett removed makedep entry under apps/tools for Jam.  This is
	  no longer needed after recent changes.
	- Eric Sunshine made the following Jam-related changes for MacOS/X:
	    - Fixed bug: Was ignoring the "console" attribute when building
	      console applications, thus it was attempting to place console
	      applications in an .app wrapper.  Introduced a new
	      LinkApplicationConsole rule to complement the existing
	      LinkApplication rule.
	    - Fixed several problems which prevented creation of GUI
	      applications and which prevented the .app wrapper mechanism from
	      being applied properly.  I still consider this a hack, as Jam
	      only knows about the top-level .app wrapper and checks only that
	      timestamp, but at least it now works.  In the future, I think it
	      would be better for Jam to have first-hand knowledge of the .app
	      wrapper and to explicitly create the associated resources, and
	      fully track dependencies of in-wrapper files.
	    - Added APPLICATION.SUFFIX.GUI and APPLICATION.SUFFIX.CONSOLE
	      variables which are employed by the Application rule if defined.
	      These allow the gui/console application suffix to be overriden.
	      The MacOS/X port uses this feature to give GUI application an
	      appropriate ".app" suffix for wrappers, and no suffix for console
	      executables.
	    - Now exports MACOSX_DEPLOYMENT_TARGET=10.2 to the environment in
	      order to avoid the linker complaint about weak versus non-weak
	      frameworks.
	- Eric Sunshine added a Clean rule to the Jam build which overrides the
	  Jambase Clean rule in order to delete directories (the Jambase rule
	  deletes only files).  This is a hack.  It is needed for rules which
	  create entire directory trees, such LinkApplication for MacOS/X,
	  rather than a single file.  We can remove this hack once
	  LinkApplication for MacOS/X is updated so that Jam has full knowledge
	  of the generated .app wrapper.
	- Added csColliderHelper::InitializeCollisionWrapper() which initializes
	  collision detection for a mesh and all children.
	- Added iMeshObjectFactory->GetObjectModel(). This is an optional
	  method which factories can implement similar to the GetObjectModel()
	  in iMeshObject. If the factory contains the geometry for a model
	  then it is prefered that the factory has the object model. This
	  allows for better sharing of similar data between instances using
	  the same factory.
	- Genmesh now implements GetObjectModel() in the factory.
	- Spr3d now implements GetObjectModel() in the factory.
	- InitializeCollisionWrapper() will now actually check if the parent
	  factory supports GetObjectModel() and if so it will share the
	  collider.
	- Thing now implements GetObjectModel() in the factory.
	- Added note about the new InitializeCollisionWrapper() function
	  in the collision detection howto.
	- res changed mk/jam/win32.jam to manually create a .def file
	  for plugins to get rid of that "dllwrap.exe: no export definition
	  file provided" message. Also fixed missing deletion of some
	  tempoary files.
	- Matze added a workaround to the configure scripts which collapses
	  series of slashes in the prefix to a single slash. This was needed
	  because jam fails with paths like /path///to/something (ie. with
	  more than 2 following slashes).
13-Apr-2003
	- Wouter fixed mikmod sound loader, delete[]/realloc mismatch.
	- Matze cleaned some jamrules.
	- res fixed the swapped "enabled"/"disabled" in shadow debug
	  toggle notification.
	- Eric Sunshine fixed the Jam distclean target so that it once again
	  removes config.cache.  I am not sure why this was changed yesterday
	  to ignore config.cache, but it should not have been.
	- Eric Sunshine reverted Matze's change to Jamrules since it was not
	  semantically equivalent.  In the original code, use of the explicit
	  `if' conditional is desired since BUILDTOP is typically set by
	  configure in Jamfile.  Use of ?= does not provide the proper
	  behavior.
	- Eric Sunshine modified cs-config makefile so that it also installs
	  crystal.m4.  This allows people to access the crystal.m4 utility
	  macro from a CS installation, rather than being forced to grab it
	  from a source distribution (which might now be handy or available).
	- res made the following changes:
	    - removed attenuation vector and radius from lights when
	      new renderer is used. Those can be expressed with the
	      attenuation vector.
	    - Made some fixes to the influence radius calculation
	    - updated csparser to calculate the attenuation vector from
	      the att. type and radius given in the world file; added
	      another syntax for explicit attenuation vectors:
		<attenuation c="0" l="0.1" q="0" />
	- Eric Sunshine fixed the PrintHelp action in help.jam so that "jam
	  help" works even on platforms which do not have a printf command.
	- Eric Sunshine fixed inconsistencies in Jam build system which
	  resulted in failure to compile Objective-C (and Objective-C++) source
	  files.  Problem was inconsistent naming of variable and rules;
	  some times used OCc, but other times used ObjC.  Now uses ObjC and
	  ObjC++ uniformly (since those are the common and well understood
	  abbreviations).  Also added .M as registered file type for
	  Objective-C++.
	- Eric Sunshine fixed bug: configure was emitting the string
	  "CS_24BIT_PIXEL_ARGB" to volatile.h, rather than the token
	  CS_24BIT_PIXEL_ARGB.  This caused compilation of OpenGL-related code
	  to fail on MacOS/X.
	- Eric Sunshine eliminated printf() formatting warning from
	  map2cs/texfile.cpp.
	- Eric Sunshine removed makedep from the Jam build since it is neither
	  useful nor necessary.
	- Eric Sunshine fixed bug in options.jam: Failed to declare "option" as
	  a local variable.
12-Apr-2003
	- Rhad fixed a couple potential deadlock and mutex issues in
	  the ds3d sound renderer plugin. Also fixed similar issues in
	  the openal sound renderer plugin.  Added some workaround code
	  for buggy OpenAL implementations (a windows openal32.dll dated
	  9/2/2002 specifically).
	- Rhad added frequency adjustment capabilities to the software
	  sound renderer.  These changes only take effect if
	  SetFrequencyFactor() is called with a value >0.0 and !=1.0.
	- Philip Wyett fixed clean of 'CS' root dir for 'jam distclean'
	  after recent configure merge/changes.
	    - Eliminated DO_ASM redefinition in jam build.
	- Matze changed autoconf script to use ?= instead of = in Jamconfig.
	  This allows to override values on the jam commandline.
	  (Example: jam -sMODE=optimize)
	- res modified csendian.h the 3rd time to utilize CONST_INT64().
	  The configure-time int64 test did the trick.
11-Apr-2003
	- Fixed a problem with portals in combination with <hardmove>
	  and HardTransform(). The problem was that the sector and portal
	  callbacks were not cloned with the effect that the destination
	  sector of the portal would not be resolved.
	- Added Jamfiles for the new bezier mesh plugin.
	- Removed iThingFactoryState->MergeTemplate() and ReplaceMaterials().
	  These don't work correctly and are no longer needed.
	- Removed broken support for material sets ('materialselect' and
	  'matset' keywords).
	- Added new 'replacematerial' keyword which you can use in a thing
	  instance to replace the material used in the factory with another one.
	  Using this feature you can still reuse a factory even if the
	  materials are different. Note that the materials MUST have the
	  same size! i.e. if the factory uses a 64x64 material then you can
	  only replace it with another 64x64 material.
	  Currently unimplemented!!!
	- Fixed a bug with collision detection and HardTransform of a thing
	  mesh object. This is a new bug introduced with my changes yesterday
	  and it was visible in the partsys level (when traversing a portal).
	- Removed the unsupported CS_THING_MOVE_OFTEN flag. Only OCCASIONAL
	  and NEVER remain.
	- Added iPolygon3D->SetMaterial() and GetMaterial().
	- Added iThingState->ReplaceMaterial() to scan all polygons and
	  replace the material with another one (must be the same size!).
	  The new 'replacematerials' now uses this function.
	  Additionally added iThingState->ClearReplacedMaterials() to
	  reset all replaced materials to default (i.e. use from factory).
	- Philip Wyett fixed glut detection in Jam configure process.
	- Wouter Wijngaards fixed a problem with the software sound
	  renderer, where it would malfunction if multiple sounds caused
	  the maximum volume for samples to be exceeded. The results are
	  clamped, both in 16 and 8 bit mode. The speed decrease is
	  negligible.
	- Added new csColliderHelper class with static methods to help
	  implement some common collision detection functions. Currently
	  contains only one function called InitializeCollisionWrappers()
	  which will initialize collision detection (i.e. create
	  csColliderWrapper) for all objects in the engine. If the optional
	  region is given only the objects from that region will be
	  initialized. This function will create csColliderWrapper objects
	  for all mesh objects that don't already have one. It will check
	  both the factory and mesh object for an iPolygonMesh that it can
	  use (that part is not implemented yet).
	- Walktest now uses the new function.
	- Eric Sunshine modified CS/docs/support/texi2html.init so that it can
	  support multiple languages.  Added French translation of contained
	  strings from Vincent Knecht <vince@iefr.ath.cx>.
	- Eric Sunshine fixed the socket plugin so that it does not error-out
	  when csSocketDriver::NewListener() is invoked for a non-reliable
	  connection.  Problem was that it was invoking listen() which is
	  illegal for datagram sockets.
	- Eric Sunshine fixed sed invocation in CS/mk/autoconf/jam/csbuild.m4
	  which failed to work with some older sed implementations.
	- Eric Sunshine made the following changes:
	    - Merged configure.ac and configure-jam.ac.  There is now a single
	      configure script which automatically configures for both GNU make
	      and Jam.  Not only does this change eliminate the maintenance
	      headache associated with trying to keep two nearly identical
	      scripts synchronized, but it also fixes a lot of bugs with the
	      Jam configuration.  A significant number of changes which had
	      been applied to configure.ac were never propagated to
	      configure-jam.ac.
	    - Replaced CS/Jamfile with CS/Jamfile.in.  CS/Jamfile is now
	      created automatically from Jamfile.in as part of the
	      configuration process.  Consistent with the reasoning behind
	      Makefile.in, this change forces people to configure the project
	      before trying to build it with Jam.
	    - Fixed a number of problems with the Jam configuration where it
	      was performing tasks incorrectly, incompletely, or
	      inconsistently.  Also fixed some problems where variables emitted
	      to Jamconfig did not agree with those mentioned in various
	      Jamfiles.
	    - Fixed numerous issues with CS/mk/jam/clean.jam.  Renamed cvsclean
	      target to maintainerclean (for consistency with other projects).
	      Completed implementation of the Configure rule.  Fixed bugs in
	      the Autogen and Configure rules.  The distclean target now also
	      removes Makefile and config.mak.  This is necessary since the
	      united configure script configures both build systems in
	      parallel.
	    - Still to do: Factor utility functionality out of configure.ac
	      into re-usable .m4 scripts residing in CS/mk/autoconf.  Provide a
	      united crystal.m4 for external projects which works for makefiles
	      and Jamfiles.  Having two crystal.m4 scripts, as is presently the
	      case, is a bad idea and a maintenance headache.
10-Apr-2003
	- Fixed a compile error in binary XML reader. I wonder if people
	  compile after changing something...
	- Thing changes:
	    - Removed obsolete csThingBBox bounding box in csThing.
	    - Split bezier curves in separate mesh object plugin (bezier
	      plugin).
	    - Greatly cleaned up the csThingStatic stuff and moved all static
	      stuff to that.
	    - Updated API modification document.
	    - Also updated various other parts in the documentation for these
	      changes.
	    - Fixed map2cs to export curves using the new bezier plugin.
	    - Changed the way thing factories and objects work. A thing factory
	      and a mesh object no longer are the same object. So first you
	      have to make a factory and then the object. This also allows
	      sharing of factories between objects.
	    - As a consequence of all these changes the lightmap format has
	      changed again.
	    - Doing a HardTransform() on a thing mesh object will automatically
	      cause the factory of that thing to be cloned so that other
	      things sharing that factory will not be transformed.
	      Doing a HardTransform() on a thing factory will have an
	      effect on all instances created from that.
	    - Used csBlockAllocator<T> for a lot of polygon objects in the
	      thing mesh plugin. This speeds up loading/unloading and also
	      improves memory usage.
	    - Merged csPolyTexLightMap into csPolyTexture. This improved
	      both speed, memory usage, and source code readability.
	    - Thing now uses ClipBSphere() instead of ClipBBox(). This is
	      faster.
	- Reverted endian changes from res again because they cause a
	  compile error with mingw/msys.
	- res augmented the configure process to check for a working INT64_C
	  macro in <stdint.h>. It seems that it's broken on some GCC/stdint.h
	  combos. If such is detected, stdint.h is treated as 'not  present'.
	- Renamed PolyMeshHelper class in bezier mesh plugin so that it
	  doesn't conflict with PolyMeshHelper in thing plugin when doing
	  a static compile.
	- Fixed a major bug in csThingStatic::Prepare() which caused massive
	  performance degradation. Now it should be better :-)
	- Small optimization, moved GetBoundingBox() and GetRadius() from
	  csThing to csThingStatic. Less pointer dereferencing needed then.
	- Eric Sunshine fixed a bug with the INT64_C check in the configure
	  script which caused the script to crash with a shell error if
	  stdint.h was not found.
	- Eric Sunshine made the following changes to the makefiles:
	    - Converted the remaining "application" makefiles so that they
	      place their generated files in a personalized subdirectory of
	      $(OUT), rather than placing them directly in $(OUT).  This lifts
	      the monolithic restriction that all applications must use
	      distinct names for their source files.
	    - Converted the application makefiles to augment OUTDIRS with their
	      personalized output directories, rather than each having a custom
	      directory creation rule.  Not only does this simplify the
	      makefiles slightly, but it also fixes a problem where the
	      personalized output directories of plugin modules were not
	      created when an application makefile target (such as "make
	      walktest") was invoked explicitly and when the project had been
	      configured with --disable-plugins.
	    - Updated CS/mk/template.mak to reflect the aforementioned changes.
	    - Fixed formatting of help messages emitted by "make help" for
	      several makefiles.
9-Apr-2003
        - Rhad fixed OpenAL compile with compilers other than MSVC.
          - Changed FillMemory() to memset()
          - Removed some unused local variables
          - Clarified some comments
        - Boyan added boolean property "Stretched" on AWS Command Button
	- Matze made the following changes:
	    - Fixed (blindly) lots of errors when using the jambuild on
	      MacOS/X.
	    - Fixed several warnings through the whole project.
	    - Put back csSchedul, seems this class was used.
	- Fixed BugPlug so that it compiles again without the new renderer
	  enabled.
	- Fixed csArray assignment operator so that it returns a ref to the
	  caller and also is safe when doing 'a=a'.
	- Added csPolyIndexed assignment operator.
	- res changed csendian.h to utilize CONST_INT64() again. The missing
	  identifiers are fixed with a #define __STDC_LIMIT_MACROS in cstypes.h
	  prior to the inclusion of <stdint.h>.
8-Apr-2003
        - Boyan fixed error in lightning plugin.
	- Anders Stenberg fixed two cases where WaitForSingleObject used a
	  timeout value of 1ms, although 0ms is a valid argument and causes
	  it to return directly (which was intended)
	- Bart Boatwright (tulebast).
	    - Added csBaseEventHandler class.
	    - Added implicit reference cast definition for static class member
	      functions.
	    - Added AttachNew() method to csRef<T>.
	    - Added RemoveAllListeners() method to iEventQueue and csEventQueue.
	      Fix for potential memory leak should a user store a reference
	      to the event queue in an event handler, or the user is relying
	      on the queue to explicitly release an event handler.
	    - Modified csInitializer::DestroyApplication to call
	      RemoveAllListeners() method of system event queue.
	- Philip Wyett eliminated some more MSVC compiler warnings.
	    - Changed define logic in csendian.h and removed the
              unnecessary #endif
	- Fixed two bugs in dynamic ambient for things:
	    - Overflow wasn't checked so if you used a value that was too
	      high it would wrap instead of clamp.
	    - Dynamic ambient is now multiplied with 128 instead of 255. This
	      brings the dynamic ambient color range in the same range as
	      the rest of CS with 1 meaning full bright and 2 meaning
	      double brightness.
	- Matze started to merge his jam build system:
	    - Added configure-jam.ac file and changed autogen.sh to generate
	      a configure-jam as well.
	    - fixed some issues with the new jam build. It should now even
	      work with the latest stable jam 2.4 version.
	    - Fixed a problem with compiling outside source directory when the
	      sources had already been configured and contained a
	      include/volatile.h
	- res added a check to -plugin cmd line switch handler for
	  the plugin specified being registered in the class registry.
	  If not, 'crystalspace.utilities.' is added to the beginning of
	  plugin name. This makes it possible for lazy people to just
	  specify e.g. '-plugin=bugplug'.
	- res added a shadow debugging aid for the new renderer to bugplug;
	  the shadow extruder shader is swapped at runtime with a version
	  where the volume more visible.
7-Apr-2003
        - Rhad changed MSVC specific CopyMemory to memcpy() in OpenAL
          sound renderer.  Increased default sound buffer to 1.0 seconds
          due to oddities observed with short buffer durations.
        - Boyan added key/value pair to iSoundWrapper.
	- Reverted endian changes from res because they break compile
	  with MSYS.
	- Changed several modules in CS to use the virtual clock instead
	  of csGetTicks(). ALL game logic should use virtual clock instead
	  of csGetTicks() because the virtual clock is what drives the
	  game speed. If you use the virtual clock then the movie recorder
	  will be able to record the movies more correctly and it will
	  be possible to pause the game. The following modules were fixed:
	    - spr3d
	    - motion manager
	    - sequence manager
	- Additionally replaced a few csGetTicks() calls in walktest movement
	  code with the virtual clock.
6-Apr-2003
        - Rhad fixed some thread syncronization issues in the OpenAL
          and Direct Sound 3d sound renderers.
        - Rhad fixed a bug in the software sound renderer that caused
          streaming audio to be advanced twice per "cycle" instead of
          once if StartStream() was called on the handle (as it should
          have been, but probably wasn't).  StartStream() is currently
          ignored in the software renderer.
        - JTarbox Added a packet size to the event serialization protocol
        - res changed csendian.h to utilize CONST_INT64() macro in
          double2longlong()/longlong2double instead of two separate
          versions for MSVC/GCC.
        - res changed cstypes.h to properly generate (u)int64 doxygen
          documentation.
	- Wouter Wijngaards modified csSprite3DMeshObject::DrawTest to test
	  if logparent is valid, before using it. This solves a crash when
	  logparent is null.
5-Apr-2003
        - Rhad improved the Direct Sound 3d sound renderer.
          Design is similar to OpenAL renderer.
          A background thread is now used to support streaming audio
          data.
          Read the source if interested, too many changes to list here.
        - Rhad improved the OpenAL sound renderer.
          Major overhaul of implementation.
          A background thread is now used to support streaming audio
          data.
          Read the source if interested, too many changes to list here.
	- Rhad fixed some issues with oggdata.cpp.
          Initialize() member function now handles channels and frequency
          requests of default (-1).
          ReadStreamed() member function now conforms to iSoundData specs
          and only returns less than the requested number of samples if
          end of stream is reached.
        - Rhad removed double include protection from
          /include/ivideo/effects/effectstrings.h since that file needs to
          be included twice in a row with macro redefinitions to work
          correctly.  Fixes rendering errors with OpenGL using certain
          extensions.
        - JTarbox adding Rhad's fix for xmlread asserts in MSVC
	- Philip Wyett fixed compile error in ogg plugin.
	- Oktal fixed a problem with the cssocket plugin where it would only
	  send the first packet of a transmission that is split up into
	  multiple packets.
	- Fixed a bug in xmlread plugin which caused the XML reader to read a
	  few bytes beyond the end of the input buffer.
	- Philip Wyett eliminated some compiler warning(s).
4-Apr-2003
        - JTarbox altered event define's to an enum
	- Boyan added lightning loader plugin.
	- Fixed bug in the calculation of GetRadius() of genmesh and
	  spr3d. This bug could cause culling errors in some rare cases.
	- By pure luck I discovered that both frustvis and dynavis were
	  not using the correct frustum for culling. They were in all cases
	  using the top-level frustum instead of the current active
	  frustum. I fixed this to use the current frustum. The effect of this
	  is that rendering through portals is now a LOT more efficient
	  as both frustvis and dynavis will now do frustum culling on a
	  smaller frustum. For example: in one of the PlaneShift levels,
	  standing inside the temple looking outside FPS went up from 25
	  to 40 with this optimization.
	- Matze removed csutil/csqueue.h. This also is coded in a bad macro
	  style and not used anymore. Also removed schedul.h
	- Matze removed unused CS_STATIC_TABLE macro from csdef.h and added
	  DEPRECATED comments to TRUE and FALSE
	- Matze removed definition for int64_t from win32/csosdefs.h
	- res worked a bit on the movierecorder rgb2yuv code. Now calculates
	  everything by going once over the input data, instead of requiring
	  extra downsampling of U and V data. temp. buffers for those aren't
	  needed any more as well. Together with some other small things seem
	  to save a few ms.
	- res augmented the documentation to mention the GPL license of the
	  movierecorder plugon.
3-Apr-2003
	- Micah added a 'tile' texture he drew, to stdtex.zip
        - Micah added a 'plaster' texture he drew, to stdtex.zip
	- Jonathan Tarbox fixed a bug in csEventQueue with incref/decref.
	- Applied the fix that res did to the TinyXML parser (with CDATA)
	  also to xmlread.
	- Added 'xmlread' to 'make walkall'.
	- Fixed bug in xmlread with parsing of attributes values that
	  have no quotes around them.
	- Fixed a bug in spr3d plugin. It was querying the iMeshWrapper
	  from the movable instead of the logparent.
	- Micah added an alternative logo image to standard.zip.
	- Micah modified walktest to use the alternative logo.
	- Added csMeshObject implementation to cstool. This is a basic
	  base class from which other mesh objects can be easily created.
	  Martin Geisse added this.
	- Small optimization to xmlread.
	- Additional optimizations to xmlread. The first text node (which
	  is very common) is now treated specially.
	- Added level load timing code to Walktest.
	- Matze cleaned up csutil:
	    - Removed 2bitary.h bitay2d.h schedule.h.
	    - Renamed cstreend.h to tree.h.
	    - Renamed blkalloc.h to blockallocator.h.
	    - Added comments to csVector that it is deprecated now.
	    - Renamed rng.h to randomgen.h.
	    - Moved halogen code to csengine.
	    - Renamed ptrarr.h to parray.h.
	- Matze reverted the namespace stuff as this is creating unexpected
	  problems when the user declares classes and structs ahead of their
	  real declaration.
	- res modified the common GL canvas code to only allocate the
	  screenshot buffer the first time a screenshot is requested and not
	  allocate/deallocate it everytime.
	- res made the following changes to the movie recorder:
	    - Fake clock ticks are stored as float internally to reduce round
	      off errors.
	    - The tick count doesn't "jump" any more when the fake clock is
	      activated/deactivated.
	    - Waiting when frames can be rendered faster than the movie FPS
	      rate requires can now be activated/deactivated via config.
	- res #ifdef'd out #warnings. MSVC doesn't like them.
2-Apr-2003
        - Jonathan Tarbox fixed some bugs in csEvent::Flatten/Unflatten
	- Matze removed the csSome, csConstSome and uint type from cstypes.h
	- Matze added the movierecorder plugin from Micah Dowty
	  <micah@navi.picogui.org>
	- Put back uint. It is still used a lot.
	- Cleaned up the tinyxml code a lot. At least the ugly warnings
	  are now gone completely. Also removed all stuff CS doesn't need.
	- Made a new 'xmlread' plugin. This is a variant of TinyXML which
	  only supports reading. Because of that it will be able to do
	  several optimizations in data structures that are not possible
	  in the general version (these optimizations are currently not
	  done yet). To use this the simplest way is to add
	  the following line to your application config:
	  System.Plugins.iDocumentSystem = crystalspace.documentsystem.xmlread
	  Walktest already has this line now.
	- Optimized memory usage in the new 'xmlread' plugin.
	- res added CONST_I64() and CONST_UI64() macros to cstypes.h for
	  specifying 64bit constants on all platforms.
	- Changed csloader plugin to use iFile instead of iDataBuffer for
	  reading. The reason is that the new 'xmlread' plugin can save
	  considerably memory in that particular case.
	- Changed the readxml parser so that it no longer does any string
	  manipulation. Instead it gets the string data directly from the
	  XML data it is reading.
	- Matze removed some unused/rarely used function from util.h
	- Matze added some namespaces in util.h for testing
	- res made the following changes to the newly arrived movie recorder:
	    - use of CS types (uint8 etc.) instead of custom typedefs
	    - use of 64bit portability macros and some other fixes to make it
	      compile on MSVC.
	    - added mmx.h from original NuppelVideo sources.
	- Clarified csObjectPool class by making it templated and simplified
	  the code a lot.
	- Matze fixed renamed the CONST_I64 macro to CONST_INT64 to be
	  consistent with our datatypes. Also we need to define
	  __STDC_CONSTANT_MACROS if we want to use the macros from stdint.h
	- Matze fixed the movierecorder plugin. Seems the mmx stuff only works
	  on gcc 3.x
	- Oktal made some updates to the "old" network sockets driver:
	    - target and source string arguments to iNetworkDriver::
	      NewConnection() and NewListener() respectively, now take an
	      optional suffix, "/tcp" or "/udp".
	    - That means that the reliable flags are now deprecated.
	    - Switched to csPtr in appropriate places.
	- Oktal fixed WaitForConnection in the ensocket driver; it was failing
	  for UDP sockets.
	- res fixed mismatching de-/allocation of CDATA nodes in TinyXML
	  (block allocator vs. new).
	- res made following changes to render3d:
	    - Moved some features of the old texture manager over, namely:
	      mipmap sharpening, texture downsampling, anisotropic filtering,
	      use of prerendered mipmaps.
	    - Texture LOD bias can be set via cfgvar
	      Video.OpenGL.TextureLODBias.
	    - Removed unnecessary gluBuild2DMipmaps(); instead previously in
	      CreateMipmaps() determined mipmaps are used.
1-Apr-2003
        - Jonathan Tarbox Added int64 support to convert_endian.
        - Jonathan Tarbox Fixed double2longlong/longlong2double.
        - Jonathan Tarbox Finished the Flatten/Unflatten code in iEvent.
	- Reverted dllwrap change to win32gcc.mak from 4 days ago since
	  it prevents debug symbols from being present in plugins.
	- Added csBlockAllocator class. This is a templated class which
	  can do very efficient internal memory allocation of objects that
	  have the same type. It has no fragmentation and no per-object
	  memory overhead and it is very fast. It also properly constructs
	  and destructs the objects.
	- TinyXML parser now uses csBlockAllocator for text and element
	  nodes. This avoids the large number of new/delete calls which
	  seem VERY bad in some particular cases. On MSVC there are
	  locking calls every time a delete happens which makes the
	  destruction of the XML node tree very slow.
	- Applied a patch from Micah Dowty <micah@navi.picogui.org>
	  which improves the accuracy of the Unix timer (csGetTicks())
	  by using gettimeofday() instead of times().
	- The Bonez team reported a bug in the OPCODE plugin with a mismatch
	  between 'malloc' and 'delete[]'.
	- Luca Romagnoli <lucak@qubica.net> suggested a bugfix in the spr3d
	  loader with regards to <applymotion/>.
	- res made the following changes:
	    - Partly rewritten & much improved binary document system.
	    - Modified document systems makefiles according to latest
	      bugplug.mak changes.
	    - added iDocument::Changeable() which returns whether a
	      can be changed or not.
	    - added the document system makefiles to user.mak.
	- res fixed a NULL pointer access under circumstances in binary DS.
31-Mar-2003
	- Fixed a very old clipping bug with individual polygon drawing
	  in the thing plugin in case there is rendering through a portal
	  that has the <clip/> (or CS_PORTAL_CLIPDEST) flag set.
	- Fixed a significant bug in the OpenGL EffectDrawTriangleMesh()
	  function. In some particular cases when there was an early
	  exit out of that function (because after clipping no triangles
	  were visible) the clipper wouldn't get restored correctly.
	  This could cause wrong clipping for objects following later.
	- res started to add to the documentation which parts don't use the
	  LGPL.
30-Mar-2003
	- Keith Fulton enhanced maya2spr in the following ways.
	    - Attempted to fix all bugs except for the last two in
	      http://sourceforge.net/mailarchive/message.php?msg_id=4051103
	    - maya2spr now supports maya exports with no animation.
              It makes a single frame, single action sprite in this case.
	    - maya2spr now uses the initial translation and scaling
	      transformation specified in the .ma file.
	    - Hopefully it won't crash as much.  If you have problems
	      or crashes, email your .ma and your command line you tried
  	      to keith@paqrat.com and I will try to fix your problems.
	- Changed iPortal->SetMirror() to accept a plane instead of a polygon.
  	- res worked around a problem in csutil/array.h caused by the
  	  redefinition of 'new' when memory debugging is enabled.
  	- res made the following changes to levtool:
  	    - reformatted command line help
  	    - leaks fixed
        - Andrew Craig removed <conio.h> from the maya2spr tool since it
          is not a cross platform include.
29-Mar-2003
	- Oktal added double2longlong and longlong2double functions to
	  csendian.h, for converting doubles to a portable format, like
	  float2long and long2float. Commented out for now because it doesn't
	  work on all compilers.
	- Removed world space warping transformation in portals. Instead this
	  is now calculated as needed. This part is less optimal but in addition
	  I optimized the fact that the warp matrix is no longer transformed
	  if a thing moves and there is no warping.
	- Physically split csPolygon3D into csPolygon3DStatic and csPolygon3D.
	  This is the next step into separating static thing and mesh objects.
	- Several internal orginizations are caused by this in the thing
	  mesh plugin.
	- Keith Fulton committed a fix made by Andrew Mann which caused
	  socket-attached sprites to be off by 1 frame in their position
	  as they follow the parent socket.
28-Mar-2003
	- Removed internal csPolyTxtPlane class from thing and merged
	  functionality with csPolyTexLightMap.
	- Moved some static data to the static part of csPolygon3D.
	- Philip Wyett made the following changes:
	    - Added cg and mtex shader plugins to user.mak.
	    - Fixed 'DDLERROR (glrender3d): ./glrender3d.so: undefined symbol
	      gluBuild2DMipmaps' by linking plugin with GLU.
	    - Changed includes, which were not consistant to 'Cg'.
	- Eric Sunshine fixed the following problems with the ensocket driver.
	  These problems were identified via simple visual inspection (not via
	  testing).
	    - Fixed bug: In non-blocking mode, csNetworkSocket2::Recv() would
	      ignore the requested number of bytes and always read only a
	      single byte.
	    - Fixed bug: csNetworkSocket2 constructor was setting socket_ready
	      to true even if socket set up failed.
	    - Fixed bug: Closing the socket failed to clear socket_ready.
	    - Fixed bug: csNetworkDriver2 constructor was setting last_error to
	      wrong error code if if WSAStartup() failed.
	    - Fixed numerous problems where the "last error" code was being
	      mismanaged, which made it almost completely pointless for clients
	      to call csNetworkSocket2::LastError() since the result was
	      usually incorrect.
	    - Fixed bug: csNetworkSocket2::Send() was not honoring contract;
	      failed to return -1 in all cases upon error.
	    - Fixed several problems with incorrect checking of return codes
	      from socket functions; was mixing up -1, 0, 1 as return codes.
	    - Fixed bugs where csNetworkSocket2 read/write methods immediately
	      reported failure for datagram sockets if the socket was not
	      "connected", even though these operations are valid for
	      non-connected datagram sockets.
	    - Fixed bug: csNetworkSocket2::Accept() was leaking a file
	      descriptor.
	    - Fixed bug: csNetworkSocket2:Connect() ignored requests to connect
	      a datagram socket even though this operation is valid.
	    - Fixed bug: In blocking mode, csNetworkSocket2::ReadLine() failed
	      to respect then buffer size specified by the client, and would
	      happily trash memory beyond the end of the supplied buffer.
	    - Fixed bug: In non-blocking mode, csNetworkSocket2::ReadLine()
	      would only read a single byte of data per invocation.  Now it
	      consumes as much data as available (up to end-of-line) before
	      returning.
	    - Eliminated unnecessary copying of received "line" in
	      csNetworkSocket2::ReadLine().
	    - Performed some refactoring of the code to simplify and eliminate
	      redundancy.
	    - Purged unnecessary junk from headers which polluted the global
	      namespace.
	    - Repaired a lot of Doxygen comment problems in headers.
	    - Added missing `const' qualifiers.
	    - Eliminated the convoluted and obfuscated fd_maskset and fd_list[]
	      instance variables and related logic from csNetworkSocket2.
	      These were an unnecessary complication.
	    - Eliminated the unnecessary sin_size, addr_len, and host_ent
	      instance variables.
	    - Fixed bugs reported by David van Laatum <david@daboyz.dyndns.org>
	      where csNetworkSocket2 methods were not taking EWOULDBLOCK into
	      account for non-blocking connections.  Instead, EWOULDBLOCK was
	      being interpreted as a "disconnect" error.
	    - Applied behavioral change, from David van Laatum: Accepted
	      connections now inherit the blocking mode of the parent rather
	      than being set to block unconditionally.  (This matches the
	      behavior of the older `socket' driver in
	      CS/plugins/net/driver/socket.)
27-Mar-2003
	- Paul Garceau modified win32gcc.mak to eliminate the use of deprecated
	  "dllwrap" for generation of "plugins"
        - Jonathan Tarbox int64 support added to iEvents
	- Several fixes to make CS compile again, at least on mingw.
	- Changed map2cs so it no longer outputs planes using the plane
	  addon loader. Instead texture mapping is directly specified in
	  every polygon.
	- Removed -splitpoly and -analyzep from levtool since those are not
	  useful.
	- Added -planes option to levtool to convert a map file that uses the
	  plane addon so that the planes are integrated with the polygon
	  itself.
	- Updated API mod doc with regards to this new change.
	- Syntax service loader no longer supports loading of planes. It now
	  gives an error saying you must use levtool -planes.
	- Removed all texture mapping plane related stuff from
	  iThingEnvironment.
	- Removed the plane loader and saver addon from the thing loader
	  plugin.
	- Removed iPolyTxtPlane interface and fixed thing plugin related to
	  that. This should already speed up things a tiny bit.
	- Andrew Craig made some more fixes to make CS compile again under
	  windows.
	- Eric Sunshine fixed problem with 10-Mar-2003 patch to bugplug.mak and
	  iso.mak which allowed them to create their output directories in a
	  timely fashion when USE_PLUGINS=no.  Problem with that patch is that
	  it caused all object files to be rebuilt each time "make bugplug" or
	  "make iso" was invoked.  New solution augments $(OUTDIRS) to achieve
	  proper behavior.
	- Philip Wyett eliminated the makefile systems warnings introduced in
	  changes earlier today. Also commented out and marked some unused
	  variables.
	- Eric Sunshine reverted Philip's incorrect changes to bugplug.mak and
	  iso.mak.  Instead, fixed the problem correctly by eliminating the
	  duplicate directory-creation rules from these two makefiles, and by
	  upgrading the OUTDIRS creation rule in cs.mak to use MKDIRS rather
	  than MKDIR.
	- Eric Sunshine fixed uninst.mak so that it creates its output
	  directory even when invoked implicitly via the "install" target.
	  Fixed using same technique as used for bugplug.mak and iso.mak.  We
	  need to apply this fix to all such makefiles (presently, all
	  application makefiles).
	- Fixed Python plugin for latest thing changes.
	- Eric Sunshine corrected a few problems in simpmap.txi pointed out by
	  MikeL <mike@lutterinteractive.com> and Jimmy Malone
	  <James_Malone@email.sae.org>.
26-Mar-2003
	- Fixed a bug with the new OpenPortal() implementation in OpenGL
	  renderer.  It was not setting/restoring the stencil in all cases.
	- Fixed flarge so that the door now uses zuse. This is now possible
	  due to the fix above.
	- Matze fixed csgfx which was making the wrong assumption that uint32
	  is always unsigned long.
	- Matze changed definition from uint32 and int32 from long to int.
25-Mar-2003
	- Changed API of OpenPortal() to accept a G3DPolygonDFP instead
	  of a 2D polygon. I need z-information.
	- First version of OpenGL implementation of OpenPortal().
	- Added CS_PORTAL_FLOAT option for portals. This will enable the
	  portal to use the new OpenPortal() code.
	- Added <float> flag to the portal loading code to enable this new
	  flag. Currently this new feature is not yet working properly.
	  Needs more testing and fixing.
	- Optimized the polygon drawing structures in graph3d.h a little.
	- Fixed a bug in spr3d. When there one action had only one frame
	  and that action was selected then tweening would be disabled
	  permanently. Now it is only disabled for that action.
	- Fixed a few stencil related init bugs in the OpenGL renderer.
	  These could cause some clipping errors in some cases.
	- Disable stencil in BeginDraw() now. That solves a problem with
	  the new OpenPortals() feature.
	- The new floating portal feature appears to be working mostly.
	  The door in flarge now has a transparent surface. Mirrors nicely
	  especially when it is opening (move close to the door).
	- Matze added support for 64 bit integers to Crystal Space. You can
	  use the int64 and uint64 type now.
	- Marten Svanfeldt fixed:
	    - Rendering in new renderer after Jorrits changes to thing
	    - Made some performance-increases by caching and reducing state-
	      changes in new opengl renderer.
	    - Fixed some codingstandard issues in render3d.
24-Mar-2003
	- Cleaned up indentation in new event code. Note to Jonathan:
	  a tab == 8 spaces. Indentation == 2 spaces.
	  Also put curly opening brace on following line.
	- Added iGraphics3D->OpenPortal() and ClosePortal(). These new
	  functions (currently unimplemented) will be used for more specialized
	  portal clipping where a portal wants to restrict drawing to a
	  certain area AND also keep current Z-buffer contents into account.
	- Fixed pysimp.py for latest API changes with things and also fixed
	  python plugin in general for this.
	- Started working on OpenGL version of OpenPortal() (unfinished).
	- Eric Sunshine added French translation for texi2html titles and
	  month names contributed by Vincent K <vince@iefr.ath.cx>.
	- Eric Sunshine made the following changes to project configuration:
	    - Fixed configure.ac bug: Was adding cs_gl_plat_cflags,
	      cs_gl_plat_lflags, and cs_gl_plat_libs flags one time extra for
	      GLU, GLUT, and GLX tests.
	    - Made the OpenGL-related checks in configure.ac more orthogonal.
	      Previously, there was no clear distinction as to whether it was
	      checking for existence of a library (libglx, libglu, etc.) or
	      existence of a facility (GLX, GLU, etc.).  Now, all tests check
	      for existence of a facility and will correctly recognize
	      facilities even if built into the OpenGL library.  For example,
	      GLX is usually built into libGL.a these days.  Previously, the
	      GLX check would fail because there was no separate libglx.a, but
	      now the GLX check will succeed.  This change also fixes a problem
	      where the GLX "extensions" check failed to run if GLX was built
	      into libGL.a.
	    - Now that GLX.AVAILABLE has a meaningful value even when GLX is
	      built into libGL.a, this variable is used to control building of
	      glx2d rather than GL.AVAILABLE.
	    - Now checks for upper- and lowercase OpenGL-related library names
	      rather than assuming that GL, GLU, and GLX should be uppercase.
	      This should help to identify these libraries on platforms where
	      they appear as libgl.a, libglu.a, and libglx.a.
	    - Moved config.guess, config.sub, and install-sh from CS/bin to
	      CS/mk/autoconf.
	- Eric Sunshine added missing forward reference for csPlane3 to
	  ivaria/dynamics.h.  Ben Thomas <trickster@wickedstudios.com> noted
	  this omission.
	- Eric Sunshine applied a patch from Jochen Moench
	  <jochen.moench@de.thalesgroup.com> to GLFontCache::Write() in
	  gl2d_font.cpp to allow it to output the full range of 8-bit
	  characters (by using unsigned rather than signed character indexes).
	  Also important, this patch prevents negative-indexed accesses of the
	  glyphs[] array.
23-Mar-2003
	- Jonathan Tarbox Added initial Flatten/Unflatten code, don't
	  expect it to work just yet.
	- Jonathan Tarbox Fixed a bug in the csEvent::RemoveAll() and the
	  csEvent::~csEvent()
	- Oktal updated the network manager API and fixed a few problems in
	  the plugin, including a redundant call to Poll() and a segfault.
	- Oktal implemented mouse and joystick movement binding in the
	  csInputBinder.
20-Mar-2003
	- Split iThingState with iThingState and iThingFactoryState.
	- Renamed GetPolygonStatic() to GetPolygon().
	- Moved alpha and MixMode from csPolyTexLightMap to csPolygon3D.
	- Moved csLightMapMapping (mapping) from csPolygonTexture to
	  csPolygon3D.
	- Removed the no longer functional DO_HW_UVZ define and all code
	  related to that. If we still need that we're going to have to
	  solve that differently anyway.
	- Matze removed his libxml2 plugin again. The tinyxml plugin improved
	  alot lately, so it doesn't make sense to keep the half-finished
	  libxml2 plugin. (We can still revive it from attic when someone
	  wants to use it)
19-Mar-2003
	- Removed a few unused flags from csPolygon3D.
	- In order to be able to make real thing factories (that don't use
	  up enourmous amounts of memory) I started redesiging the API of
	  things a bit. The first step is the creation of a csLightMapMapping
	  structure which defines the static mapping of the lightmap on the
	  polygon. iPolygonTexture uses that now instead of the direct
	  values. This should improve efficiency a bit as well as there
	  are less virtual function calls needed now.
	- Split iPolygon3D into iPolygon3D and iPolygon3DStatic. The static
	  part contains all information that is static and could be in
	  a factory. Several functions (like iThingState->CreatePolygon)
	  will now return an iPolygon3DStatic instead of an iPolygon3D.
	- Eric Sunshine fixed bug in texi2html reported by Vincent K.
	  <vince@iefr.ath.cx> which caused language translation of "reserved
	  words" to fail.
	- Eric Sunshine fixed typographical error in ensocket.txi pointed out
	  by Adrien Constant <adrien@gamerinstinct.com>.
18-Mar-2003
	- Added two entries to the faq about scaled objects.
	- Some Doxygen improvements on iMovable and iMeshWrapper.
	- Moved csTriangle from ivideo/graph3d.h to csgeom/tri.h.
	- Added copy constructor, assignment operator and a few other useful
	  functions to csTriangle.
	- Moved out csTriangleMesh code from genmesh and sprite3D to
	  include/csgeom/trimesh.h.
	- Added 'const' version of GetArray() to csGrowingArray.
	- MatzeB fixed ossdrv makefile, so that the target has the same name
	  as the plugin.
	- Oktal added a couple of overloaded constructors to
	  csHashIteratorReversible and fixed some const-correctness issues of
	  csHashMapReversible.
17-Mar-2003
	- Fixed scale issue with dynamic ambient. Dynamic ambient brightness
	  was divided by 1.5 but that's not needed.
	- Added csRGBpixel::SafeAdd(). Lightmap code now uses that.
	- Cleaned up lightmap code a bit with regards to dynamic ambient and
	  pseudo-dynamic lightmap updating.
	- Reinstated patch from Greg Block on lightmap loading. Apparently
	  there must have been another issue preventing proper lightmap
	  loading.
	- Rewrote 'smooth' option for things. The routine to calculate normals
	  is faster, uses less memory, and should be more correct now.
	- Removed the USE_MEMORY_COPY from OpenGL renderer seens it appears
	  to be not useful on MacOS/X. At least the optimization to
	  DrawPolygonSingleTexture helped.
	- Optimized thing smoothing a little.
	- Matze applied a patch to unix.mak to work around problem with
	  recent Gentoo Linux in which some libc symbols were not resolved when
	  loading plugin modules.  Specifically, LFLAGS.DLL now sends -shared
	  directly to gcc (g++) rather than to the linker (-Wl,-shared).
	- Matze fixed a typo in netmtest makefile.
15-Mar-2003
	- Greg Block fixed lightmap loading and saving on
	  non-Intel-endian systems.
	- Reverted the lightmap changes as it prevented proper loading of
	  lightmaps on intel-endian systems.
	- res made the following changes:
	    - commented out the XML test code in csparser and added it to the
	      TinyXML docsys plugin instead.
	    - added a document system multiplexer.
	    - changed in mkverres.sh '(c) 2003' to 2002  .
	    - map2cs used to write sky info twice if there was only the default
	      sector.
	- res fixed csTinyXmlAttributeIterator which caused an error when the
	  attribute count was 0.
14-Mar-2003
	- Eric Sunshine corrected spelling mistake in Doxygen comment for
	  iMovable which was noted by <shri@vitalstate.co.uk>.
	- Eric Sunshine corrected a copy/paste error in snow.txi pointed out by
	  Tim <tirobu@gmx.de>.
	- Eric Sunshine fixed problem with milk2spr when on Unix it failed to
	  convert models which had been created/saved on Windows or older
	  MacOS.  Problem was that it was explicitly looking for LF terminator
	  without taking into account CRLF (Windows) or CR (Macintosh).
	- Added a new 'accurate' flag to iVisibilityCuller->IntersectSegment()
	  and iSector->HitBeam(). This flag is false by default (old behaviour)
	  but when you set it to true HitBeamObject() is used instead
	  of HitBeamOutline(). So this should give more accurate results.
	- TinyXML improvements: only elements and document can have children
	  now. This saves some memory again.
	- Some cleanup and memory savings in TinyXML parser again.
	- Made ReadText() more robust in case the text happens to be bigger
	  then the fixed amount of the buffer. In that case we will
	  start reallocating automatically.
	- Further optimizations and cleanup. Text and CData nodes will now
	  also use interned strings.
	- Boyan added some additional features to the lightning plugin and
	  also extended lightningtest app to show them.
	- Jonathan Tarbox adding in the initial event system update
	- Eric Sunshine corrected a couple package names in cygwin.txi as
	  reported by Ian Walker.
	- res made the following changes:
	    - Added iterators for csStringHash and csStringSet.
	    - Added some sorting functions to csRefArray.
	    - Enhanced levtool so iDocumentSystem plugins can be specified for
	      reading or writing world files.
	    - Changed levtool to just write from input to output docsys if one
	      of those and no other operation is specified.
	    - Levtool reports times for some actions.
	    - Levtool used to make backups even on operations which did not
	      modify a world.
	    - Added a simple TinyXML wrapping document system plugin.
	    - Added a binary document system plugin.
13-Mar-2003
	- Received some documentation fixes with regards to 3D sprites
	  from Simon Posnjak <simon.posnjak@siol.net>.
	- Fixed a bug in csEngine::RemoveObject(). That function would not
	  correctly remove objects from the region they were in. It would
	  only remove objects from the region if the region happened to be
	  the current region.
	- Implemented an experimental patch to the OpenGL super lightmap
	  cache. To enable this you have to enable the USE_MEMORY_COPY
	  define (i.e. set to 1) which you can find in
	  plugins/video/renderer/opengl/ogl_txtcache.h. With that flag set
	  to 1 the lightmaps are copied to a memory buffer before one
	  glTexImage2D() will send them to the card. With that flag set
	  to 0 (default) glTexSubImage2D() is used instead. Since
	  glTexSubImage2D() is faster on linux and windows I will keep it
	  disabled for now. But someone on MacOS/X should try to set this
	  flag to 1 to see if it helps performance for fastmesh objects.
	- Another patch to DrawPolygonSingleTexture in the OpenGL renderer.
	  Previously the lightmap for that polygon would also be placed
	  on a 256x256 texture. Since transfering that texture to the hardware
	  seems to be slow in some cases (i.e. MacOS/X) it seems worthwhile
	  to have at least two other texture sizes to use here. So I added
	  a 64x64 and 16x16 texture on which smaller lightmaps will fit.
	  On linux this doesn't seem to have any effect at all on performance
	  but perhaps it will help on MacOS/X.
	- Fixed a compile error with TinyXML on MSVC.
	- Made SetValue() on elements in TinyXML a bit more relaxed in case
	  the given value == NULL. Previously it would crash there.
	- Optimized TinyXML loader a tiny bit.
	- Got a new energy.jpg from Boyan. Looks much better.
	- Eric Sunshine made the following changes:
	    - Corrected the Doxygen comments in iutil/binder.h and
	      csutil/binder.h.
	    - Removed useless `inline' and `extern' from csutil/binder.h.
	    - Fixed problem in csutil/binder.cpp where it was not initializing
	      its full set of instance variables.
	    - Fixed logic bug in csEvBind where it failed to release its
	      iInputBinderBoolean reference at destruction time.
	    - Added explicit logic to csInputBinder::HandleEvent() to prevent
	      it from ever treating an iInputBinderPosition as an
	      iInputBinderBoolean (and vice versa) to ensure that it does not
	      call methods of the one interface when actually dealing with a
	      reference to the other.  (Beware of `union'.)
	- Eric Sunshine applied a couple corrections to aws/quick.txi reported
	  by <shri@vitalstate.co.uk>.
	- Oktal implemented csTinyXmlDocument::Parse(iFile*).
	- Marten Svanfeldt fixed an error the CData support in TinyXML.
12-Mar-2003
	- Added csArray::ShrinkBestFit() routine. This routine will set
	  the capacity of the array exactly to the current length. This
	  routine is useful when you know you're not going to add new
	  items to the array and when you want to preserve memory.
	- Completely rewrote the way TinyXML parser reads attributes. Instead
	  of using a double linked list it now uses csArray. This saves a
	  LOT of memory for huge levels.
	- Implemented reverse mapping in csStringSet so that going back
	  from an ID to a string is now fast too.
	- Attribute names are now stored in a string set in the TinyXML
	  parser. This again removes a lot of memory usage.
	- Parsing of attributes in TinyXML faster: less new/delete.
	- Cleaned up TinyXML code a bit. Still messy though.
	- Another optimization in TinyXML. My god! This is crappy code! :-)
	- Added a lightning mesh object plugin from Boyan Hristov
	  <boyan_hristov@newmail.ru>. There is also a lightning test
	  application to try it out. Added energy.jpg to standard.zip.
	- Names of nodes are now also interned. Had to reorganize TinyXML
	  a bit for that. Saves some memory again.
	- Added the ability for csStringSet and csStringHash to have an
	  additional size parameter (just like csHashMap) to control the
	  initial size of the registry used inside. By default this registry
	  is 211 long.
	- Made the string table in the TinyXML parser use 431 entries instead
	  of 211. Might improve parsing performance a bit.
	- Removed 'type' variable from TinyXML nodes.
	- Oktal Changed the csInputBinder API from handling references to
	  integers to handling pointers to classes which hold a private
	  integer or boolean (depending on type) with accessor functions.
11-Mar-2003
	- Fixed a leak in the prepare textures code of regions. It was
	  forgetting to reset the image pointer to NULL. This means
	  lots of images remained in memory all the time.
	- Also added FreeImages() to walktest in case region loading is used.
	- csPolygon3D and csThing no longer inherit from csObject. This added
	  unneeded overhead (especially in the case of polygons). The
	  QueryObject() function has been removed. However it is still
	  possible to set names on polygons. To do that you can use
	  SetName() and GetName().
	- res fixed a map2cs crash when a map w/o sectors is converted.
	- res fixed a case where map2cs wrote things w/o polys.
	- Eric Sunshine eliminated several compilation warnings from
	  lghtmap.cpp.
	- Eric Sunshine fixed bug: imgplex was not in the imgplexall pseudo-
	  target.
	- Daniel Duhprey fixed mesh collisions again and fixed the physics
	  loader.
10-Mar-2003
	- Added a few timing printfs in region code to debug long load times.
	- A few optimizations in the spr2d plugin to make particle systems use
	  a bit less memory.
	- Eric Sunshine fixed a couple problems with iso.mak and bugplug.mak in
	  "static" and "profile" modes:
	    - The personalized "out" directory for each these modules was not
	      getting created if the module was being built indirectly as a
	      dependency of some other modules (as opposed to getting built by
	      direct invocation via "make iso" or "make bugplug" which worked
	      correctly).
	    - The static link library generated in place of the plugin module
	      was being emitted in the personalized "out" directory rather than
	      the global "out" directory, but there was no -L directive telling
	      the linker to look for the library in the personalized directory,
	      thus linking failed.
9-Mar-2003
	- Marten Svanfeldt made the following changes:
	    - Moved setting of lightposition from meshplugin into engine
	    - Added caching of shadowvolumes to genmesh
	    - Added usage of MMX-instructions when building shadowvolumes.
	      This is only for MSVC7 at the moment. If you use new renderer,
	      in combination with MSVC7 and a non-mmx capable machine, comment
	      out those sections as it doesn't properly check for mmx-
	      compatibility yet.
	    - Made the new renderer clear the texture state cache on BeginDraw
	      to correct the font-drawing.
	- Anders Stenberg fixed VAR support in new renderer, along with
	  some minor fixes.
	- Andrew Mann fixed a typo in the RAPID collision detection code.
	  This bug must have been there since the RAPID plugin was created
	  and could occasionally cause collision detection errors.
	- res fixed map2cs so skyboxes get the <moveable /> flag.
7-Mar-2003
	- Philip Wyett fixed some old legacy instructions reported
	  by 'Sqee' (docs mailing list) in the MSVC7 build documentation,
	  still around from before we had MSVC7 projects files in CVS.
	- Moved the kdtree code from Dynavis and Frustvis to csgeom. That
	  way the code can be shared and used for other purposes too.
	- Removed '.cvsignore' and thus 'lib3ds' dir as it's not needed.
	- Fixed Map2cs. Please people: don't use stricmp! That's not portable.
	  Use strcasecmp instead.
	- Eric Sunshine applied a patch suggested by Ben Thomas
	  <ben.thomas@wickedstudios.com> to work around a problem where
	  cssysdef.h including <windef.h> (but not <windows.h>) coupled with
	  use of ZLIB_DLL in CS/include/win32/volatile.h was causing
	  compilation errors when zlib/zconf.h was included since the FAR macro
	  was not defined.  The work-around was to remove ZLIB_DLL from
	  volatile.h.  This macro is only needed when building the zlib.dll
	  itself, thus it was superfluous for volatile.h to define it.
	- res made the following changes to map2cs:
	  - Fixed: output of things w/o polys
	  - Hopefully fixed texture alignment/rotation this time.
	- res fixed the GL renderer so polys w/ keycolor textures are lit
	  properly again
6-Mar-2003
	- Reworked the notion of curve templates. The iCurveTemplate has
	  been removed and it's functionality has moved to iCurve itself.
	  The notion of curve templates has always been a bit curious
	  as a curve template is just a list of nine vertex indices. So
	  it didn't make sense to separate it. As a consequence of this
	  change the bezier addon loader has been removed. A curve like this
	  in the past:
		<addon>
		    <plugin>crystalspace.mesh.loader.thing.bezier</plugin>
		    <params>
		        <name>b1</name>
		        <material>mosaic</material>
			<v>0</v> <v>1</v> <v>2</v>
			<v>3</v> <v>4</v> <v>5</v>
			<v>6</v> <v>7</v> <v>8</v>
		    </params>
		</addon>
		<meshfact name="tunnel">
		    <plugin>crystalspace.mesh.loader.factory.thing</plugin>
		    <params>
			<curvecenter x="0" y="0" z="0" />
			<curvescale>80</curvescale>
			<curvecontrol x="5" y="2" z="0" u="1" v="0" />
			...
			<curve name="bez">b1</curve>
		    </params>
		</meshfact>
	  should now become:
		<meshfact name="tunnel">
		    <plugin>crystalspace.mesh.loader.factory.thing</plugin>
		    <params>
			<curvecenter x="0" y="0" z="0" />
			<curvescale>80</curvescale>
			<curvecontrol x="5" y="2" z="0" u="1" v="0" />
			...
			<curve name="b1">
		            <material>mosaic</material>
			    <v>0</v> <v>1</v> <v>2</v>
			    <v>3</v> <v>4</v> <v>5</v>
			    <v>6</v> <v>7</v> <v>8</v>
			</curve>
		    </params>
		</meshfact>
	- Fixed map2cs to output the new curve format.
	- res made the following changes to map2cs:
	    - Fixed a bunch of bugs he introduced with the converison to
	      iDocumentSystem.
	    - Improved handling of keycolored HL textures.
	    - A sky portal can now be created by assigning the "sky" texture
	      to a brush face.
	    - Less <part>s, more <meshobj>s are written.
	    - Can now be instructed to specify dynavis as the culler (through
	      Hammer)
	    - Lighmap cell size can now also be specified in the map file.
	    - Various other small tweaks.
	- res made the following changes to crystal.fgd:
	    - Fixed some problems he introduced.
	    - Added some new settings, like Dynavis activation.
	- res fixed a possible endless loop in mesh ie multiplexer.
	- res added csImageMemory::SetKeycolor() and ::ClearKeycolor()
5-Mar-2003
	- Worked a bit further on blocks: now no longer uses gouraud shaded
	  polygons.
	- Completely changed the way polygons can be shaded. Now it is only
	  possible to use lightmaps. Previously it was also possible to use
	  gouraud shading but for that it is better to use genmesh (this
	  support was never very good anyway). The <shading> keyword
	  has been changed to accept a boolean instead of NONE, FLAT, GOURAUD,
	  and LIGHTMAP. With this you can enable/disable texture mapping.
	  Several API calls in iPolygon3D has been modified for this.
	  Additionally all iPolyTex* interfaces have been removed.
	  The functions from iPolyTexNone and iPolyTexLightMap have moved
	  to iPolygon3D.
	- Did some further optimizations in the polygon class with regards to
	  memory usage and also time efficiency. A single polygon now
	  takes considerably less memory.
	- Removed iPolygon3D->GetPolygonID() since this ID was not used
	  and not useful. Also removed iCurve->GetCurveID().
	- Removed cosinus factor API calls from iPolygon3D and moved them
	  to iThingState instead. Now it is only possible to control this
	  on a per-thing level. This change also reflects in the thing
	  loader.
	- Remove csPolyPlane and merged all planes into the polygon class.
	  This saves on object creation and speed (less pointer indirection).
	- Removed some fields from csPolyTexture.
	- Cache data in csPolyTexture is now allocated on demand. This
	  makes the structure smaller at the expense of a little more
	  memory usage for software renderer alone. Only the software renderer
	  uses this cache data.
	- Also removed the camera space plane from the polygon structure.
	  This camera space plane is now computed as needed (this was
	  happening anyway).
	- Created new API doc appendix for 0.96 to 0.98.
	- Removed several more fields from csPolyTexture. Bringing down
	  memory usage again.
	- Removed ambient lighting counter and instead use the light counter
	  to check if a lightmap needs recalculating. Saves some memory and
	  is also faster to check.
	- Fixed python plugin for latest changes. Also fixed css.h.
	- res made the following changes to the Hammer FGD file:
	    - some "Under Development" stuff was commented out
	    - some things that are uncertain to work were commented out
	    - added some convenience stuff, mostly choices for 0/1 integers
	- res made the following changes to map2cs:
	    - now uses the iDocumentSystem to output the converted level
	    - when using manual sectors map2cs also wrote out the polys of the
	      sector brush, which were rendered over the 'real' surfaces and
	      causes heavy z-fighting
	    - the size of textures in zip/pk3 files is now determined correctly
	    - converted HalfLife textures are written out as PNG instead of BMP
	- res changed csImageMemory so it isn't limited to truecolor images only
4-Mar-2003
        - Andrew Craig fixed coordshow text drawing in walktest.  If you had
          a long sector name it was often cut off.
	- Fixed a bug in the OpenGL canvas text drawer where the
	  state of GL_TEXTURE_COORD_ARRAY was not properly queried.
	- Fixed another mixup in the OpenGL canvas text drawer where
	  the GL_COLOR_ARRAY state was restored incorrectly.
	- Both fixes above make sure isotest in OpenGL shows lighting again.
	- The thing plugin will now try to skip the lightmap data for
	  a single polygon or curve in case there is a failure. That way
	  following polygons may still attempt to load their lightmap
	  data without errors.
	- If the -verbose commandline option is given then the thing plugin
	  will report accurate errors explaining why the lightmaps failed to
	  load.
	- If the -verbose commandline option is given then the genmesh plugin
	  will report accurate errors explaining why the lighting info failed to
	  load.
	- The thing object type now maintains a real reference to G3D. This
	  is needed because when polygons are removed they clear themselves
	  from the G3D cache so G3D has to stay in memory until the thing
	  object type itself has disappeared. This bug was not easy to
	  reproduce but it happened.
	- Removed csReversibleTransform tr_o2c from genmesh object. This
	  is a big transform class that adds too much memory for every
	  object without being needed. Made sure SetObjectToCamera() is
	  called in DrawTest() now even for new renderer.
	- Implemented HardTransform() for genmesh objects (and not only
	  for factories). This is slightly less efficient as an additional
	  transform is used when rendering now.
	- Started converting blocks to use genmesh instead of thing for
	  the blocks. Not fully finished yet.
	- Eric Sunshine fixed a number of problems introduced into bugplug.mak
	  yesterday.  (Yesterday's conversion of this makefile was incomplete.)
	- Eric Sunshine fixed a problem in win32gcc.mak which caused plugin
	  makefiles to fail when USE_PLUGINS=no.  Problem was that win32gcc.mak
	  was setting DO.PLUGIN.POSTAMBLE rather than
	  DO.SHARED.PLUGIN.POSTAMBLE.
	- Fixed genmesh so that when you transform a mesh object the bounding
	  box and sphere will be correct.
3-Mar-2003
	- Philip Wyett added libxml2 link flag for msvc project file.
	- Philip Wyett removed 'divx' dir and '.cvsignore' file from
	  'CS\include\cssys\win32'. Also updated .cvsignore to take account
	  of latest msvc_libs changes those in 0.97dev001 and the
	  upcoming ones in 0.97dev002.
	- Fixed a bug I introduced yesterday in csHashMap::Delete().
	- Philip Wyett updated links to the msvc_libs packages in the docs.
	  Added xml2 plugin to MSVC build process and updated MSVC project
	  files.
	- Removed csRGBpixel::UnsafeAdd(csRGBcolor) because it is unsafe
	  to use. csRGBcolor is only three bytes and the value of the fourth
	  byte is undefined. So it is not legal to try to add that to
	  a csRGBpixel which is four bytes (alpha). Instead of using this
	  one should convert the csRGBColor to csRGBpixel with alpha set
	  to 0 and then use UnsafeAdd(csRGBpixel) instead.
	- The fix above may fix some issues with wrong lightmaps after
	  a pseudo-dynamic light changed intensity.
	- Added iThingState->Prepare(). This function will prepare the thing
	  to be ready for use. Normally this doesn't have to be called as the
	  engine will call this function automatically as soon as the object
	  is rendered. However, to avoid the (sometimes long) setup time for
	  an object while walking around an application can choose to call
	  this function manually in order to increase load time but decrease
	  the time need to setup things later.
	- Added a -regions commandline option to walktest so that when you
	  load multiple maps every map is loaded in a separate region and
	  lighting information is taken from that map zip file.
	- Added a -prepare commandline option to walktest. When you give this
	  option all things are pre-prepared (using the iThingState->Prepare()
	  I added above). This increases load time but might improve
	  jerky movement during running.
	- Eric Sunshine moved crystal.fgd from scripts/worldcraft to
	  scripts/hammer at the request of its author.
	- Extended iLoader->LoadMapFile() with a fourth 'checkDupes' parameter.
	  By default this is false. But when it is set to true the loader
	  will not load textures, materials, and mesh factories for which
	  another same-named object is already in the engine (ignoring regions).
	  This can be useful in cases where you have multiple map files
	  which need to share objects but which also need to be able to
	  work standalone.
	- Added '-dupes' commandline option to walktest which enables this
	  option.
	- Fixed an uninitialized variable in the OpenGL benchmark routine.
	- Removed userData pointer in tinyxml node structure. We are not using
	  it and the XML data is already taking way too much memory. So this
	  is four bytes less memory for every XML node.
	- res made the following changes to bugplug:
	    - Now uses a config file to read certain settings.
	      Right now these are the name of the keybinding file and some
	      screen capture options.
	    - Slightly changed appearance of the "Press key" box
	- res fixed a bug in stdrep where format qualifiers contained in
	  messages output via console or nativewm where errorneously
	  expanded.
	- res changed the bugplug makefile to be in the same style as the
	  ISO plugin after ES' recent changes.
2-Mar-2003
        - Rudolf Potucek updated makefiles in the apps/ directory to remove
	  vpath and generate object files in individual subdirectories of
	  $(OUT).  This should allow identical filenames to coexist in
	  different directories of the build tree.  Also added a rule to remove
	  the console output *.txt files generated on the windows platform.
	  There may be an issue for the following files:
	    apps/demo/demo.mak
	    apps/tests/netmtst/netmtst.mak
	    apps/tests/perl5tst/perl5tst.mak
	    apps/tools/tbconv/tbconv.mak
	    apps/video/video.mak
	  as the filename and the internal build name differ and I cannot
	  test which name the *.txt file will be given.
	- Greg Block committed changes to the MacOS/X gl canvas to correctly
	  support the necessary CS interfaces for loading extensions and being
	  recognized as the correct SCF type.
	- Philip Wyett added OpenAL plugin to MSVC build process. He also
	  updated msvc_libs and the links too msvc_libs in the docs.
	- Eric Sunshine committed the CS/scripts/worldcraft/crystal.fgd
	  submission from Leandro Ezequiel Lovisolo <lovisolo@datafull.com>.
	- Eric Sunshine fixed a memory leak in csGetPluginPaths() for MacOS/X.
	  An invocation of csStrNew(), which should have been eliminated in the
	  previous commit, was left in place.
	- Matze changes pkg-config test to look for libxml-2.0 instead of xml2.
	- Marten Svanfeldt added a fix which improves quality in new renderer
	  by texture-mipmap level biasing.
	- Eric Sunshine converted the ISO engine makefile so that object-files
	  for that module are placed in a module-specific object-file
	  directory, rather than in the common out/PLATFORM/CPU/mode directory.
	  This change corrects the broken and monolithic design limitation of
	  the makefile system where no two source files in the entire project
	  can have the same name even if they reside in different module
	  directories.  This change can be used as a template for anyone else
	  who wants to help augment the makefiles.
	- Eric Sunshine worked around a problem in the configure script in
	  which tests based upon CS_BUILD_IFELSE() (or its descendents) failed
	  when run under Bash 1.14.  The culprit was the one-liner
	  "cs_build_ok=yes break" which, although it works correctly with every
	  other Bourne or compatible shell the world over, fails with Bash
	  1.14.  In particular, Bash 1.14 failed to set cs_build_ok to "yes"
	  and instead left the old value ("no") in place.
	- De-obfuscated a loop in csHashMap::Delete().
	- res made the following changes to the Win32 port:
	  - csGetInstallPath() now always returns a path without trailing
	    delimiter.
	  - all plugin directories are added to the PATH env var on startup.
	  - the install path is cached between calls to csGetInstallPath().
1-Mar-2003
	- Greg Block changed the makefile for the xml documentsystem plugin to
	  not override the values for the link flags to use when linking libxml
	  now that configure.ac has a test for it that provides those values
	  in config.mak
	- res fixed his latest fix: he changed struct csScanSetup in scan.h
	  but not scan.ash, causing funky colors and crashes for those using
	  the asm scanline drawing routines.
	- Fixed a bug in iEngine->GetNearbyObjects(). A recent fix to that
	  function prevented recursing to already visited sectors. However
	  this check was forgotten for the first sector. So the starting
	  sector could be visited twice (but not more).
	- Marten Svanfeldt made these changes
	    - Added caching of shaderpasses
	    - Temporarly fixed textdrawing in new renderer. This needs a better
	      solution.
	    - Added a flag to meshwrapper to force object to be drawn last in
	      the scene. This should later be replaced with proper
	      implementation of render-priorities.
	    - Improved the routine which calculate the influence-radius for
	      lights.
	    - Fixed a bug in the loading of <casthardwareshadow> tag.
	    - Improved the csGLRender3D::ActivateTexture and
	      csGLRender3D::DeactivateTexture methods.
	    - Reverted Duhpreys changes to genmesh as they don't work.
	- Marten Svanfeldt fixed a bug in glshader_mtex which made a shader
	  valid even if it had to many layers.
	- Rudolf Potucek picked up where Eric Sunshine left off and converted
	  the remaining makefiles in CS/apps so that object-files for a module
	  are placed in a module-specific object-file directory, rather than in
	  the common out/PLATFORM/CPU/mode directory.  This change corrects the
	  broken and monolithic design limitation of the makefile system where
	  no two source files in the entire project can have the same name even
	  if they reside in different module directories.
28-Feb-2003
	- Eric Sunshine instructed Doxygen to ignore include/volatile.h.  Since
	  its contents are specific to each person's installation, thus it does
	  not belong in the generated documentation.
	- Eric Sunshine changed the jng plugin so that MNG_DLL is defined only
	  for MSVC.  This was done in preparation for the new csmingwlibs
	  package.
	- Eric Sunshine eliminated a compilation warning in ensocket driver.
	- Eric Sunshine fixed a compilation error in glstates.h which occurred
	  when CS_USE_NEW_RENDERER was not defined.
	- Eric Sunshine moved -lstdc++ to DO.PLUGIN.POSTAMBLE in win32gcc.mak.
	  This ensures that this library will appear after any other special
	  libraries a module might require.  This fixes a problem with the
	  odedynam plugin not linking following the earlier work around to get
	  dllwrap working on Win9x and WinME.
	- Fixed glwin32 canvas so it compiles again. The reason was usage
	  of GL_TEXTURE_3D and GL_TEXTURE_CUBE_MAP in glstates.h. But that's
	  an OpenGL 1.2 feature.
	- Eric Sunshine re-implemented the "imgplexall" makefile target the
	  proper way: modularly, rather than monolithically.
	- Fixed a bug with hierarchical objects not culling correctly.
	  If the parent object is invisible then the children were not
	  rendered. This should now be solved.
	- Eric Sunshine eliminated compilation warnings in ieplex.cpp.
	- Eric Sunshine reverted Frank Richter's changes to the software
	  renderer since they were causing bizarre texture mapping problems
	  for some people and caused frequent crashes.
	- Fixed a bug in csMovable which updated the 'is_identity'
	  flag after the listeners were fired. That way the listeners would
	  potentially use wrong information.
	- Added some additional asserts in dynavis and frustvis for
	  debugging purposes.
	- Matze Braun added copy constructors and = operator to csArray.
	- Daniel Duhprey updated genmesh with the UpdateLighting cache
27-Feb-2003
	- res fixed the "shifted alpha map" bug in the software renderer.
	- Marten Svanfeldt once again fiddled with the light/shadow culling.
	  Still it isn't failsaife though, but works in most cases.
	- Added iVisibilityCuller::VisTest() version which takes a set of
	  planes and returns all objects that are (partially) inside the
	  volume formed by the intersection of the planes. Added (untested)
	  implementation in dynavis and frustvis.
	- Philip Wyett fixed redefintion of i in 'for' loops under MSVC6 in the
  	  DDS image plugin.
	- Eric Sunshine fixed compilation error in ddsloader.cpp.  Was
  	  returning false as a csPtr<iImage>.
	- There was supposed to be an optimization in frustvis and dynavis
	  with regards to frustum clipping in order to avoid doing too many
	  plane tests. Unfortunatelly it appears that this optimization has
	  never worked properly. Fixed now so frustvis and dynavis should
	  now be a little faster.
	- Marten Svanfeldt fixed the light/shadow culling using the new version
	  of VisTest.
	- Marten Svanfeldt / Anders Stenberg made these changes
	    - The way buffers are activated. Now you use
	      iRender3D::ActivateBuffer.
	    - The way textures are activated. Added iRender3D::ActivateTexture.
	    - Streammapping in the shaders.
26-Feb-2003
	- Christian Bayle added some missing dependancy to enable to compile
  	  libs as shared
  	  Closed two debian bugs to compile and exec on all arch
  	  Still problem with compile of libs as shared, because soname contains
  	  path, and this doen't seems to me to be trivial to correct in build
  	  system
	- Eric Sunshine made the following changes to the configure script:
	    - Fixed bug: The utility variable cs_optimize_flags was being
	      constructed incorrectly, with the result that it was always
	      empty, rather than containing the detected optimization flags.
	    - Removed the bogus qsqrt(1)==0 test which was supposed to detect
	      buggy gcc 3.2.x.  It turns out that Matze made an error in his
	      trials (printing a float with an int format directive), thus his
	      results were invalid.
	    - The special-case -fPIC directive for the qsqrt() check is now
	      used only if the compiler understands -fPIC.
	    - Documented Matze's -fPIC assumption.  (Please keep the comments
	      up-to-date.)
	    - The libpng test now employs -lm (if available) since it is
	      reported that RedHat 8.x requires this library.
	- Eric Sunshine committed an update to the map2cs tutorial from
	  Leandro Ezequiel Lovisolo <lovisolo@datafull.com>.
	- Eric Sunshine made the following changes to csConsoleBuffer:
	    - Fixed bug: SetLength() was accessing uninitialized memory.
	    - Fixed bugs: Several methods potentially were deleting the
	      csString referenced by the `empty' member and other "empty"
	      lines, thus allowing those other references to access a deleted
	      object.
	    - Fixed bug: SetCurLine() had bogus logic.
	    - Fixed bugs: A significant number of boundary (one-off) errors
	      were present.
	- Eric Sunshine eliminated compilation warnings from tinystr.cpp.
	- Eric Sunshine patched win32gcc.mak to work around problem on Win9x
	  and WinME where "dllwrap --driver-name=g++" results in the error
	  "dllwrap.exe: installation problem, cannot exec g++".
	- Eric Sunshine removed the unused libs/cssys/general/instpath.cpp.
	- Eric Sunshine made the following changes to the configuration-path &
	  plugin-paths function in the MacOS/X port:
	    - Fixed bug: csGetPluginsPath() was leaking char[1024] buffer.
	    - Cleaned up implementation files.
	- Eric Sunshine changed the socket support check in the configure
	  script so that it no longer includes both <winsock.h> and the Unix
	  socket-related headers at the same time even if both are present.
	  This works around a problem with Cygwin where including <winsock.h>
	  and Unix socket-related headers causes the test to fail because the
	  same functions and structures are defined differently between
	  <winsock.h> and the other headers.
	- Eric Sunshine changed the <winsock.h> check in the configure script
	  so that it no longer uses AC_CHECK_HEADERS's "default-includes" when
	  checking for presence of this file.  This works around a problem on
	  Cygwin where structures and functions are defined differently between
	  <winsock.h> and <sys/types.h> and <unistd.h>, all of which are
	  present with Cygwin.
	- Matze fixed socket problems on cygwin where winsock.h redefines
	  fdset. You can define __USE_W32_SOCKETS before including any headers
	  to avoid this problem.
	- Anders Stenberg made the following changes related to the new
	  renderer.
	    - Fixed a bug in mtex plugin causing crashes at shutdown
	    - Fixed an erroneous buffer release in the renderer causing VAR
	      to crash. VAR still doesn't release buffer correctly, and can't
	      be used yet.
	    - Made the windows GL canvas force alpha in framebuffer when using
	      new renderer. Probably something similar needs to be done in
	      other canvases.
	    - Fixed some errors in shader loading. Shaders wasn't prepared
	      correctly.
	    - Added possibility to override blendmode per shader pass, and a new
	      blendmode in new renderer. (DESTALPHAADD)
	    - Added two example PPL-shaders. They both need some special
	      attenuationmaps and material setup.
	    - Fixed a bug in genmesh anonymous stream loading.
	- Gregory Block did the following:
	  Checking in a fix for gcc 3.1 users whose cpp will *not* behave as
	  expected as requested by this shell script.
	  For gcc 3.x users, please enable the option below, and disable the
	  cpp line.
25-Feb-2003
	- Marten Svanfeldt made these changes:
	    - Fixed a bug in the light/shadow culling.
	    - Added a flag to make objects not cast hardarebased shadows.
	    - Added a (temporary) fix to avoid the mip-mapping errors in
	      new renderer.
	- Matze Braun added a .dds image file loader (only loading so far)
	  and extended iImage with a HasMipmaps functions which indicates if
	  the image contains precalculated mipmaps.
	- res added csImageFile::HasMipmaps() which Matze seems to have
	  forgotten.
	- res fixed a division by zero in the DDS loader.
	- res changed the mipmap creation code in the OpenGL texture
	  renderer to take better advantage of precalculated mipmaps.
24-Feb-2003
	- Marten Svanfeldt made these changes:
	    - Modified the light/shadow culling algoritm.
	    - Changed the way to mask color and alphawrites in new renderer.
	    - Added the posibility to specify color and/or alphamasking from
	      shaders.
	- Andrew Craig fixed error in csMeshMeshList::FreeItem() where the
	  meshes were not being unprepared from sectors.
	- Added some asserts in spr3d to check if cur_action is not NULL.
	- Eric Sunshine removed the recently added empty mottest.cfg and
	  instead fixed the problem of Debian installation failing by repairing
	  the broken mottest.mak so that it no longer refers to a non-existent
	  file.
23-Feb-2003
	- Christian Bayle fixed menu in Debian package.
	- Eric Sunshine made the following changes:
	    - Fixed mk/autoconf/pkg.m4 so that it no longer aborts
	      configuration and abuses the user just because an optional
	      package is absent.
	    - Fixed bin/autogen.sh so that it cleans up after itself.
22-Feb-2003
	- Christian Bayle made change in Debian build
	  Moved config files in /etc and added proper symlink
	  Added a build dependancy on libode-dev
	  Now build static lib without -fPIC to respect policy
	- Philip Wyett removed multiple declerations of csTextureHandleOpenGL,
	  iTextureHandle and csTxtCacheData from 'FlushDrawPolygon ()'.
	  Philip Wyett also performed some variable decleration moves to within
	  the scope they are used. Also performed a minor code cleanups.
	- Matze Braun added mk/autoconf dir for autoconf macros and added a
	  script to regenerate configure (bin/autogen.sh).
	- Matze Braun added a check for the libxml2 plugin.
	- Matze Braun fixed a typo in csdemo makefile which caused csdemo not
	  getting installed by "make install"
	- Matze Braun added a test for qsqrt. Seems we can detect buggy
	  compilers by compiling qsqrt with -fPIC (this triggers internal
	  compiler errors on them)
	- Philip Wyett fixed xml plugin makefile and errors in make depend.
21-Feb-2003
  	- Andrew Craig changed iEngine->GetNearbyObjects() to take a bool
	  parameter crossPortals.  If you want to limit the search to the
	  currentSector and not cross portals pass in false (default is true).
	- Wyatt Miler suggested a work around for what seems to be a
	  gcc 3.1 compiler bug which triggers on MacOS/X (PowerPC) in
	  the tiny XML parser.
	- Fixed a bug in iEngine->GetNearbyObjects(). This bug could cause
	  infinite loops in cases where there is a portal from A->B and
	  then another portal back from B->A which is also visible from
	  the viewpoint of the center.
	- Dynavis now only reports about the first six none-closed
	  objects instead of all.
	- Thing no longer reports that it is using FASTMESH.
	- I had to make the epsilon that is used for checking valid uv
	  coordinates for a polygon a bit bigger. This means that there will
	  now be more warnings about 'bad UV coordinates for poly ...'.
	  The reason I had to do this is that with the current epsilon it
	  was possible that lightmaps were generated that were incompatible
	  between optimize/debug compiled versions of CS.
	- Wyatt Miler suggested a work around for what seems to be a gcc 3.1
	  compiler bug which triggers on MacOS/X (PowerPC) in the tiny XML
	  parser.
	- Fixed a bug in iEngine->GetNearbyObjects().  This bug could cause
	  infinite loops in cases where there is a portal from A->B and then
	  another portal back from B->A which is also visible from the
	  viewpoint of the center.
	- Eric Sunshine augmented the configure script so that it uses libm.a
	  (if available) when testing for GLU, since apparently some GLU tests
	  (such as RedHat 8.0) fail without it.
	- Philip Wyett removed ddraw8 canvas from win32gcc build process.
	- Fixed lightmap reader so that it will still warn if it couldn't
	  load lightmaps for some polygons of a thing but it will still try
	  to load the other polygons of that thing.
20-Feb-2003
	- Anders Stenberg fixed a bug in shader loader causing fragment
	  programs not to load.
	- Apparently in some cases AWS calls g2d->SetClipRect() with a clipping
	  rectangle that goes outside of screen boundaries.  This can cause
	  crashes when using the software renderer and when drawing primitives
	  that actually go beyond the screen boundaries but stay in the
	  clipping rectangle.  I don't know enough about AWS to fix this bug in
	  AWS itself but for now I fixed the problem by clamping the clip rect
	  in g2d to the size of the screen so it is now impossible to make the
	  clip rect go outside screen boundaries.
	- The engine no longer crashes if the camera has a NULL sector.
	- Removed the totally unused csWireFrame class from the engine.  It was
	  not even possible to use it since there was no SCF API to access it.
	  And it doesn't belong in the engine anyway.
	- Removed the obsolete and broken map commands in walktest.
	- Fixed a bug in the engine where it would forget to load the default
	  culler in one of the IntersectSegment functions.  So if the sector
	  was not visited then this could cause a crash.
	- Matze removed the really unfinished plugins in
	  plugins/mesh/spr3d/persist/impexp and
	  plugins/mesh/thing/persist/impexp.
	- Matze removed comments about 8.3 filenames from CS docs.  Even djgpp
	  (which isn't supported anymore) was able to use long names in win9x.
	- Matze removed invalid dependencies from netmtest and perl5tst
	  makefiles.
19-Feb-2003
	- Marten Svanfeldt fixed a bug introduced when adding the new
	  light-parameters for the new renderer due to a missing
	  #ifdef CS_USE_NEW_RENDERER.
	- Marten Svanfeldt changed the way lights are handled in new renderer:
	    - Lights now have a influence radius which is different from the
	      normal radius.  Influence radius is the distance at which the
	      light have 1/256 (or 1/512, 1/1024 it is configurable) of the
	      intensity in the center.  Influence radius is used to determin
	      wheter i light needs to be used or not to draw on a specific
	      spot.
	    - The way culling of lights and objects work is changed.  An more
	      in depth description of how it's done is in a comment in
	      Sector::Draw().
	    - Shadows now use depthfail shadows if we are in the shadow-volume.
	- Fixed a memory leak in the OpenGL renderer.
	- Philip Wyett updated configure script from 0.96 to 0.97dev.
18-Feb-2003
	- Philipp Aumayr updated bugplug for render3d api changes and
	  "repaired" history.txt for Philipp Wyett (wrong indent :o)
	- Philip Wyett removed commiter related info from flex skeleton file to
	  remove it from being generated into skinlex.cpp and creating cvs
	  changes and conflict.
	- Applied a patch from Anders Reggestad <anders@pvv.ntnu.no> which does
	  the following:
	    - Fixed the windows implementation of csGetTicks() so it is MT
	      safe.
	    - Fixed the unix implementation of csGetTicks() so it no longer
	      overflows (there was currently an overflow every eight hours).
	    - Fixed the MacOS/X implementation of csGetTicks() so it is MT
	      safe.
	    - Fixed a wrapping bug in the virtual clock.
	- Light ID's are now MD5 keys instead of simple numbers.  This is done
	  to solve a bug with multiple regions and light id's not matching with
	  the cached light id's in the lightmap cache.  This fixes a bug with
	  pseudo-dynamic lights not working if they are loaded differently from
	  when they were loading at relighting time.
	- Changed iEngine->FindLight(id) to iEngine->FindLightID().
	- Changed the engine so it now reports the first 4 objects for which it
	  couldn't load lighting.
17-Feb-2003
	- Steven Geens reports: milk2spr now mentions apps/tests/mottest as its
	  code example.
	- Matthias Braun added libxml2 parser.  The code only reads xml at the
	  moment and lacks some autoconf macros and msvc setup...
	- Fixed a problem in the spr3dldr.cpp with 'char*' being used instead
	  of 'const char*' to store the result of GetAttributeValue().
	- Greg Block fixed MacOS/X load library paths.
	    - We support loading from the install path, "components"
	      subdirectory (as configured by build)
	    - We also attempt to load from the current working directory.
	    - This, technically, means that app-wrapped applications can
	      include plugins in their <app>/Contents/MacOS of the app bundle.
	    - A more complete review of wrapped app-loading issues needs to
	      take place in the future, to support application-bundled versions
	      of CS.
	- Christian Bayle made Debian package build ok, but it remains some
	  problems with csdemo that is not installed by make install and
	  segfault in walktest -video=software (building with gcc3.2.2)
	- Eric Sunshine fixed problem reported by <groton@gmx.net> where
	  awstxtbx.cpp could invoke cursor-- even when cursor==0 when DEL was
	  pressed.
	- Daniel Duhprey did the following to the new renderer:
	    - Moved the lighting parameters into the MeshObject
	    - Added capped volumes specified via a flag in iMeshObject
	    - Changed renderer to support Carmack's Reverse for capped volumes
	    - Removed itoa in trade for sprintf in gmeshldr
16-Feb-2003
	- Significant optimization in the dynamic/pseudo-dynamic lighting
	  system for things. In the past, when a dynamic light or
	  pseudo-dynamic light hit a thing then all polygons would be
	  marked as being dirty (so this would require a loop over all
	  polygons, setting the polygon as dirty). Now this has been
	  changed by adding a 'light_version' number to the thing and also
	  a 'light_version' number to all polygons. This is similar to the
	  'ambient_version' number that's already there. This saves a lot
	  of flag setting overhead and significantly increases speed
	  of pseudo-dynamic and dynamic lights for big levels.
	- Philipp Aumayr optimized font drawing code to use vertex arrays.
	- Philipp Aumayr extended gmeshldr to support general streams
	  for new Renderer.
	- Reverted latest font drawing optimization because it messed
	  up with the OpenGL renderer. It is currently illegal to
	  set client states outside the OpenGL renderer because the
	  renderer has a state cache for this. We need to find a better
	  way to solve this.
	- Removed an unneeded 'if' before a delete. C++ guarantees checking
	  for NULL pointers with 'delete'. No need to test.
	- Philipp Aumayr optimized font drawing code to use vertex arrays
	  again. This time correctly queries the client states.
	- Daniel Duhprey fixed shadermgr: one too many passes. This is why
	  I lost half my FPS.
	- Matthias Braun removed const from some functions in
	  iDocumentAttribute, this makes it considerably easier to implement
	  them when you have to construct the elements first from some cache
	  thing. Also fixed spr3dldr.
	- Matthias Braun added libxml2 loader, unfortunately has several
	  problems:
	    - Only loading part implemented so far.
	    - Strings which are returned are only valid till the next call to
	      the loader. This breaks several CS plugins which store the
	      string pointer longer than allowed.
	    - No configure test yet.
	    - The worst I'll probably not have time to hack on CS till next
	      weekend, so perhaps someone wants to finish this?
	- Daniel Duhprey fixed gcc based compiler warnings/problems with
	  render3d.
	- Daniel also fixed genmesh to handle anonymous buffers as well as
	  make the vertex buffers slightly more efficient.
	- Daniel changed which stream to use for shadows.
	- Christian Bayle did some other Debian related changes.
15-Feb-2003
	- res checked if the image IO plugins work properly and fixed them
	  if necessary:
	    - TGA saving was botched
	    - JNG saving didn't work right where sizeof(csRGBcolor) != 3
	    - JNG loader works better with single-frame MNGs
	    - BMP didn't honor the padding of scanlines to a multiple of 4
	- res augmented gfxtest to add an alpha channel if none is present.
 	- res changed csImageFile::convert_pal8() to ensure the image palette
 	  has at least 256 entries.
	- Added 'openglcanvas' target which compiles the OpenGL canvas
	  relevant for the given OS (similar to 'softcanvas').
	- Make 'walkall' will now compile the OpenGL renderer instead of
	  the software renderer.
	- Matthias Braun fixed another config issue.
	- Wouter Wijngaards fixed containerbox in emit, works now also for
	  non-alpha particles. Added rotation to the star-sphere in partsys,
	  removed the rotation-key (which did not work for me anyway) using
	  the new fieldspeed feature.
	- Matthias Braun fixed blocks.cfg not getting installed.
	- Daniel Duhprey added arbitrary stream component for genmesh.
	- Christian Bayle did several fixes to the Debian packages.
14-Feb-2003
	- Extended iVertexBuffer and iPolygonBuffer with a bounding box.
	  The renderers can use this to optimize clipping.
	- Fixed a bug in the OpenGL polybuffer implementation for things
	  that don't have lightmaps.
	- ClassifyForClipTriangleMesh() in OpenGL renderer now uses bounding
	  box to avoid too many classify tests on vertices. Doesn't seem
	  to give a dramatic fps improvement though.
	- Added iEngine->GetRenderPriorityCount() and GetRenderPriorityName()
	  to be able to query the render priorities currently in the engine.
	- Added 'frain' command to walktest to test a rain mesh object
	  that follows the camera around (as opposed to 'rain' which just
	  makes a rain mesh object that is in the current sector completely).
	- Huge optimization with CastShadows implementation of Dynavis
	  and Frustvis. It now actually looks at the radius of the light.
	  This has a big impact on speed for recalculation (recalculating
	  lighting for flarge went from 7.5 to 2.7 seconds) and it also helps
	  a lot in case pseudo-dynamic lightmaps or genmeshes need to be
	  updated.
	- Optimized the creation of pseudo-dynamic lightmaps a bit more.
	  Now a pseudo-dynamic lightmap will only be created if the light
	  REALLY affects the polygon and not when it theoretically could
	  affect it due to distance.
	- Fixed a few printf related bugs in map2cs. Thanks to Wouter
	  for reporting this.
	- Added new IntersectSegment() routine to iVisibilityCuller which
	  returns all objects that are intersected by the segment.
	- Mesh objects used to have an old system where a particle system
	  could remove itself by returning true with WantToDie(). However
	  this system is slow since the engine has to check this flag
	  every frame. I replaced this with a new function in the engine
	  (which is also called WantToDie()). With that function objects
	  (like particle systems) can schedule themselves so that they are
	  deleted the next frame. The engine will only have to check if
	  there are any sheduled deletions every frame. Much faster...
	- Anders Stenberg fixed a missing ';' in genmesh.cpp.
	- Philip Wyett turned CS_USE_NEW_RENDERER after #endif into a c++
	  comment as it should be and eliminated compiler warning.
	- Marten Svanfeldt added default attenuation vector and fixed
	  loading of attenuation vector.
	- Marten once again fixed texturemanager (hopefully). It needs some
	  more testing with 1d, 3d and cubemaps though.
	- Matthias Braun fixed problems in cspython.cpp after config changes.
	- Matthias did a fix for aws.mak to not double object files - older
	  compilers don't like that.
	- Matthias added a touch to get timestamp up. Some older bisons don't
	  work otherwise.
	- Wouter Wijngaards did the following:
	  Added features to emitter particle system:
	    - Field speed EmitGen3D can be specified: based on the position
	      of the particle, each frame, the speed can be calculated for
	      the particle.
	    - Field accel EmitGen3D can be given, as above, but for the
	      acceleration.
	    - ContainerBox can be specified: particles outside this box are not
	      rendered. They are also not respawned, because I'm afraid it would
	      create too many short-aged particles, and destroy the look of it.
	    - The loader has XML format for these features.
	    - The saver writes something sensible, but since the loader
	      does not read this format at all, and any old converter would not
	      support these new features, these values are more for human
	      consumption, I'm afraid.
	    - Note there is currently no testcase in partsys yet for these
	      features.
	- Marten Svanfeldt optimized shader variable system.
	- Marten also added fixes to the way the new texture manager handles
	  cubemaps.
	- Paul Garceau noted a known bug with Win98/ME platforms having to do
	  with the use of dllwrap.exe under Msys/Mingw (win32gcc.mak).  This
	  bug has been relegated to the area of a systems platform specific
	  bug.  It does not affect any other build platforms, including Cygwin.
13-Feb-2003
	- Added another trivial case to csRect::ClipLine() making it a little
	  bit safer again.
	- Dynavis tiled coverage buffer now uses ClipLine(). This greatly
	  cleans up the code and makes it a lot more robust.
	- Made a new counter system in BugPlug. Using this system it is now
	  a lot easier to manage counters that should count something every
	  frame. Basically the application only has to do
	  bugplug->AddCounter("countername") to increase a named counter
	  and BugPlug will do the following at the end of every frame:
	      - Show the last value.
	      - Show the total value accumulated over several frames.
	      - Show the average per frame.
	  The user of these counters doesn't have to take care of clearing
	  them every frame and displaying them.
	  There are two types of counters: normal counters and enum counters.
	  An enum counter keeps track of 10 different values and calculates
	  relative percentages. To use an enum counter an application or
	  plugin can do bugplug->AddCounterEnum ("countername", enumval).
	  enumval should be between 0 and 9.
	- Added commands 'counterfreeze', 'counterreset', and 'counterremove'
	  to BugPlug. With 'counterfreeze' the counters stop counting and
	  you can examine the current values of the counters more easily.
	  With 'counterreset' all counters are reset to initial values.
	  With 'counterremove' all counters are removed. Commands
	  are assigned as follows:
	    - shift-p: counterfreeze
	    - ctrl-p: counterreset
	    - alt-p: counterremove
	- A few minor optimizations to Dynavis in the tiled coverage line
	  drawer.
	- Converted tinyxml string class (TiXmlString) to use malloc/realloc.
	  This should speed up things a tiny bit.
	- Fixed a bug in all the particle systems. They were not correctly
	  updating their change number when the shape of the particle system
	  changed. This *can* potentially lead to culling errors.
	- In addition to the bug above the particle systems were also not
	  calling FireListeners() to notify cullers about possible changes.
	- Got a patch from James Baicoianu <james@baicoianu.com> which
	  implements iPolygonMesh for the ball mesh object so it can be used
	  for collision detection
	- Removed the very inefficient 'light_statics' from walktest. This
	  function needs to be done differently (i.e. DeferUpdateLighting()
	  should be automatic). On large levels (i.e. PlaneShift levels) this
	  function was second in the top (profiling).
	- When you specify the <localshadows/> tag with a genmesh object
	  it will no longer use the DeferUpdateLighting() system but instead
	  it will be lit using the same system that is used for things.
	  This means that lighting will be calculated during -relight
	  and cached just like with things. At this moment there is no
	  shadow information yet. So if a light touches a genmesh it will
	  be fully lit by that light. So the cache on disk basically involves
	  a list of all lights that affect the mesh and nothing more. In
	  future we will cast real shadows on genmeshes.
	  Using this system also ensures that the genmesh lighting will be
	  automatically updated when a light changes (pseudo-dynamic or
	  dynamic) even without having to call DeferUpdateLighting().
	- Christian Bayle did some more Debian stuff.
	- Philipp Aumayr added support for attenuation 3 for new renderer. Also
	  added parsing for this.
	- Matthias Braun renamed aws flex and bison files to more standard
	  extensions.
12-Feb-2003
	- Performed several optimizations on the tinyxml parser. Hopefully
	  it is now a little faster.
	- Added three clipping routines to csRect. All three clip a line to
	  a box:
	    1. ClipLineGeneral: general clipping routine. Doesn't check for
	       any trivial cases and is not safe for large coordinates
	       (bigger than 15 bit int).
	    2. ClipLine: general clipping routine. Checks for trivial cases
	       (line fully outside box, vertical line, horizontal line)
	       but is also not safe for large coordinates.
	    3. ClipLineSafe: Checks for trivial cases and is safe for very
	       large coordinates. This function will automatically switch
	       to ClipLine() if the given coordinates are small enough.
	  Thanks to Steven Geens for making the base algorithm.
	- Matthias Braun did the following:
	  Changed the way CS looks for the install path a bit:
	    - Remove csGetInstallPath function and added csGetConfigPath
	      and csGetPluginPaths.
	    - Changed Win32, Unix and MacOS/Ximplementations accordingly.  All
	      three compile and the win32 and unix one run fine for me.
	      However I'm not able to test the macos one, as the shell server
	      can't run any graphical app (and also not vsh for some reason).
	    - Changed some #includes: When the include file is on the same
	      directory don't do #include "walktest/walktest.h" but only
	      #include "walktest.h"
	    - There is no need to link the physics loader with ODE.
	- res updated Doxygen documentation for iEvent.
	- Daniel Duhprey did the following:
	    - Added a function to terrbig to convert arbitrary float data (vs
	      image data which has a granularity of 1/255).
	    - Also a fix from John Harger for msvc.
	- Anders Stenberg did some additional fixes for cubemaps.
11-Feb-2003
	- Fixed lightning command in walktest to also work if there is no light
	  called 'l1'.
	- Fixed lightning sequence in flarge a bit.
	- Added iSequenceManager->GetDeltaTime().  This time should be added to
	  GetMainTime() if you want to know the current main time when NOT in
	  an operation callback!  If you are in an operation callback then you
	  should use the delta time that is given to you as a parameter
	  instead.
	- The sequence manager now fires in the 'final' stage
	  (cscmdFinalProcess) instead of cscmdPostProcess.  The engine sequence
	  manager now fires in the cscmdPostProcess stage instead of
	  cscmdPreProcess.  This is to ensure that the following order of
	  execution is guaranteed for every frame:
	    1. Frame is rendered.
	    2. Engine sequence manager fires and performs remaining timed
	       operations.
	    3. Sequence manager fires and performs operations.
	  We REALLY need a better event priority system so that we don't have
	  to depend on those ugly 'pre', 'final', and 'post' things.
	- Eric Sunshine fixed documentation booboo (<texture> was used instead
	  of <texmap>) in thing.txi which was reported by Oroszi Balazs
	  <oroszib@vpg.sulinet.hu>.
	- Eric Sunshine repaired some poor wording in csutil.txi.
	- Eric Sunshine rewrote the "Typed Arrays" section in csutil.txi.  In
	  addition to other changes, it now provides much clearer warning about
	  which classes are preferred, and which should be avoided.
	- Eric Sunshine eliminated `hbox' warnings from the Texinfo files
	  reported by TeX.
	- Marten Svanfeldt changed render3d so that Philipp Aumayr's new texture
	  manager is default.
	- Marten also fixed a loading bug in shadermgr.cpp.
	- Marten fixed multi-texturing in new shader plugin.
	- Marten did a small fix for constants in texture.h and fixed a missing
	  pre-definition.
	- res reports: openal test in configure now also tests if linking with
	  -lalut is needed.
	- Norman Kramer make the first page visible on first appearance for
	  the AWS notebook.
	- Anders Stenberg fixed some errors concerning leaving wrong texture
	  util activated.
	- Anders also fixed some errors with cube mapping.
	- Christian Bayle added the pre-version of the 0.96 package for Debian.
10-Feb-2003
	- Marten Svanfeldt fixed various bugs in TextureManager and hopefully
	  fixed the VAR-buffer manager.
	- Philipp Aumayr added new TextureManager for Render3D with support
	  for 1D, 3D and CubeMap Textures. iTextureManager and iTexture
	  interface was extended to do so (#ifdef CS_USE_NEW_RENDERER).
	- Anders Stenberg did a hack to prevent CG from ruining cached states.
	- Philip Wyett removed duplicate CS_REPORTER_SEVERITY_DEBUG, which
	  caused perftest to output results twice.
	- Philip Wyett moved the flicker-note texture into 'stdtex.zip',
	  updated the world accordingly and removed the texture from the
	  'data/flarge' directory.
	- Fixed a 'cs-config' typo in creating external app docs, reported
	  by David Calkins.
	- Reverted a change to the image loader multiplexer because it was
	  EXTREMELY slow.
	- Added the ability to bugplug to hide the selected mesh. With
	  ctrl-d h the selected mesh will be removed from all sectors.
	  With ctrl-d shift-h the last removed mesh will be put back (works
	  only once).
	- Fixed a bug in Dynavis debugging module. The code was changed
	  to use csRef but the DecRef() wasn't removed.
	- Extended state dumping in Dynavis a bit.
	- Fixed a bug in Dynavis which could cause wrong culling. The
	  problem is that making tiles empty works by setting a flag.
	  The actual initialization of the tile only happens when somebody
	  wants to update the tile. However, a few of the testing functions
	  didn't properly test for this flag.
	- Removed the state dump code in Dynavis in optimize mode.
	- Fixed a bug in Dynavis occluder clamping (for individual polygons).
	- Worked around a bug in Dynavis caused by the bad polygon drawer
	  with have in the coverage buffer. This polygon drawer cannot
	  cope well with large integer coordinates for the given polygons.
	  Worked around this by increasing Z=.1 to Z=.2 so that the perspective
	  corrected coordinates don't get as big.
	- Dynamic ambient wasn't working correctly for objects using
	  DrawPolygonMesh (fastmesh objects).
	- res updated the DirectSound renderer to use smart pointers and fixed
	  a DecRef() on a smart pointer there.
	- res did the following:
	    - Changed map2cs so mirrors get their own renderpriority after
	      sky, but before wall which is drawn f2b. in map2cs tut6 this
	      reduces the z-fighting problems, but doesn't solve them.
	    - Cleaned .scf file loading (no need for version key any more).
	    - Fixed possible crash in csparser (char* could've been NULL
	      but was unconditionally delete[]d).
	- Matthias Braun changed scfreg to allow creation of .scf files
	  (default now).
9-Feb-2003
	- res augmented flarge to contain a notice that the flickering in
	  the street is intentional.
	- Philip Wyett extended Cygwin docs to cover installation of MNG
	  and the Open Dynamics Engine (ODE) libraries.
	- Fixed map2cs so that it takes the current directory for fetching
	  the config file if CRYSTAL is not set.
	- Fixed a compile error in csArray. Unfortunatelly this also breaks
	  csArray as the destructor is no longer called for elements in the
	  array. Needs a better fix.
	- Renamed csArray::Delete(int n) to DeleteIndex() since otherwise
	  it is impossible to make csArray<int> instances (since you then
	  get a conflict with the two Delete() functions).
	- Eric Sunshine fixed a silly synatx error in csutil/array.h.
	- Eric Sunshine fixed CS/scripts/cs-config/Makefile.template so that
	  the `clean' target now deletes the generated executable,
	  makefile.dep, and csconfig.mak.  David Calkins <dcalk@verizon.net>
	  reported this shortcoming.
	- res further worked on XMLifying map2cs.
	- res changed the image, sound and model converter multiplexer to
	  lazily load plugins.
	- res additionally did the following:
	    - csMultiplexImageIO::SetDithering() improved.
	    - Fixed model converters/sound loaders after interface change.
	- Matthias Braun fixed csArray with older gcc2.9x compilers.
8-Feb-2003
	- Reverted the changes of res for packed rgb struct since they
	  don't appear to work on linux (png image loader crashes).
	- Fixed a memory overwrite bug in the tiled coverage buffer of
	  Dynavis. This could cause crashes at exit or even during running.
	  Added an assert to protect for future equivalent bugs.
	- Fixed a bad bug in cs2xml which I introduced yesterday.
	- The parsing of LEN now actually works with cs2xml.
	- Anders Stenberg added actual support for different meshtypes
	  in new renderer. (Triangle strips, quads, points, lines, etc.)
	- Anders also did a small fix to rndbuf.h.
	- res did some minor changes in csendian.h to be better accessible via
	  the api docs.
	- res did some minor API documentation changes.
	- res did a recommit of jpg/png loader w/ packed pixel routine
	  utilization; png loader crash bug w/ grayscale images fixed.
	- Marten Svanfeldt added very early version of shader-loader including
	  a simple sample.
	- res XMLified map2cs. Still needs some work. And cleanup. map2cs
	  seems to have quite a few features not mentioned anywhere and
	  probably unknown to everyone.
7-Feb-2003
	- Fixed levtool so that by default it now gives usage information
	  instead of the -list option. That way people will not forget
	  to add -dynavis.
	- Possibly fixed the bug in map2cs which adds <moveable /> to the
	  same object that has <vistree />. Wasn't able to test this due
	  to not having a map file.
	- Possibly fixed the bug in cs2xml with converting of LEN keyword
	  in a polygon. Didn't test this yet.
	- Fixed a bug in the OpenGL renderer which causes one of the objects
	  in flarge to disappear. It was related to the rendering of
	  transparent polygons not cleaning up properly. Unfortunatelly
	  this doesn't seem to fix all bugs in this area. Some of the
	  PlaneShift levels still suffer from disappearing objects and
	  I'm sure it isn't caused by wrong visibility culling.
	- Eric Sunshine cleaned up the pthread and qsqrt() tests in
	  configure.ac.
	- res enhanced the map loader so that when loading a <library>
	  a VFS->ChDir() into the lib's dir is performed so that relative
	  paths in the library are work as expected.
	- Jorrit then proceeded to revert the automatic VFS dir setting.
	  This takes away control from the application and that is not good.
	- Made the sprite loader a bit more robust. It now checks if the
	  factory is given before using the state.
	- Philip Wyett fixed -fs switch under Windows GL and poor fps
	  in fullscreen mode.
	- Eric Sunshine augmented the qsqrt() test in configure.ac so that it
	  also now checks for bogus results from qsqrt() in optimize mode,
	  rather than only testing if it compiles.  This is needed because some
	  versions of gcc 3.2.x return incorrect results in optimize mode, such
	  as qsqrt(1)=0.
	- Eric Sunshine augmented the lib3ds test in configure.ac so that it
	  checks for a sufficiently recent lib3ds containing lib3ds/io.h which
	  is required by the 3ds plugin but which is not present in older
	  versions of lib3ds.
	- Eric Sunshine made the following changes to the user manual:
	    - Updated MacOS/X build/run instructions to tell user how to switch
	      to software renderer.  (This used to explain how to use OpenGL,
	      but OpenGL is now default.)
	    - Updated Mingw build instructions to mention that csmingwlibs must
	      be re-installed whenever a newer version of MSYS is installed.
	    - Fixed `hbox' warnings from TeX.
	- Eric Sunshine augmented the lib3ds check in configure.ac so that it
	  works in two phases.  First it checks for lib3ds.  Second, it checks
	  if the installed lib3ds is sufficiently recent.  This approach will
	  provide better feedback and debugging information for a user than the
	  old approach where the checks were combined.
	- Eric Sunshine applied a patch to ogl_g3dcom.cpp from Daniel Schubert
	  <daschubert@web.de> which resolves several int versus GLenum issues.
	- Eric Sunshine changed configure.ac so that --without-x is now the
	  default on Windows.  This should work around the problem on Cygwin
	  where the compilation process was finding the Cygwin X11/OpenGL
	  headers instead of the Win32 OpenGL headers.  This was problematic
	  because the Cygwin headers lack __stdcall, which results in link
	  errors when linking against opengl32.lib (libopengl32.a).
	- res did the following:
	    - Added routines for packed RGB/RGBA vs. csRGBcolor/csRGBpixel
	      conversions; should work correctly on platforms where
	      sizeof(csRGBcolor) != 3 or sizeof(csRGBpixel) != 4.
	    - Minor documentation changes.
	- Matthias Braun did a little code cleanup in cs-config and made it
	  compatible with jam build.
6-Feb-2003
	- Removed Video.OpenGL.Caps.MaxTexWidth, MaxTexHeight, MinTexWidth,
	  and MinTexHeight options in opengl.cfg. Instead there is now the
	  Video.OpenGL.Caps.MaxTextureSize option. By default this is set
	  to -1 which means the OpenGL renderer will autodetect maximum
	  texture size.
	- Apparently there are drivers when getting the maximum texture size
	  with GL_MAX_TEXTURE_SIZE fails. The OpenGL renderer now detects
	  this case and will issue a warning when that happens. In that case
	  it will assume 256x256 max. You can then use the above option
	  to set the real maximum size.
	- Eric Sunshine added FT_UINT_MAX and FT_ULONG_MAX defines to freefont2
	  "make depend" flags to work around problem reported by David Calkins
	  <dcalk@verizon.net>.
	- Eric Sunshine applied a patch to ensocket plugin from Frank Michler
	  <Michler@students.uni-marburg.de> fixing a problem where the return
	  value from accept() was being misinterpreted.
	- Eric Sunshine fixed the following bugs in
	  csNetworkSocket2::SetSocketBlock() in ensocket plugin:
	    - On Unix, was ignoring the blocking flag and always setting the
	      socket to non-blocking.
	    - On Unix, was erroneously sending O_NONBLOCK to setsockopt() as
	      though it was a socket-option.
	    - On Windows, was erroneously sending the error constant
	      WSAEWOULDBLOCK to setsockopt() as though it was a socket-option.
	- Eric Sunshine applied a patch from Gregory Block
	  <gblock@ctoforaday.com> to pngimage.cpp which fixes PNG loading
	  errors for platforms/compilers where csRGBPixel is not four bytes.
	  Prior to this patch, the PNG loader made the dangerous and fragile
	  assumption that csRGBPixel was always four bytes.  The patch works
	  uniformly by converting all input formats to 24-bit.
	- Matthias Braun enabled qsqrt again as it seems to compile for me
	  without problem and according to Jorrit it's important for
	  performance. configure switch still is in of course.
	- Matthias also removed an unneeded #define from the pthread test.
5-Feb-2003
	- Philip Wyett bumped version to 0.97rdev.
	- Anders Stenberg added better matrix support in CG plugin.
	- Anders updated thing and bugplug to comply to changed meshobject
	  interface for new renderer.
	- Anders fixed some bad indentation in genmesh and also made
	  shadow generation work without <autonormals />.
	- Matthias Braun added a Clear() function to the list iterator.
	- Matthias Braun also changed recursive mutex test to define
	  _GNU_SOURCE first this seems to be needed on older linux
	  distributions to get the recursive extension. Also rewrote the posix
	  mutex code a bit.
	- Matthias did a fix for pthread stuff.
	- Marten Svanfeldt fixed a memoryleak due to the sorted render
	  queues not being destructed when using render3d.
	- Marten also updated the OpenGL extensionheader creator in the
	  python plugin.
	- Matthias Braun disabled qsqrt by default as it seems to trigger
	  compiler bugs in latest gcc although our test succeeds.
	- Marten Svanfeldt added a renderbuffer manager for
	  ATI_vertex_array_object. Fixed the NV_vertex_array_range buffer
	  manager so that it hopefully works. Fixed the discardingsystem.
	- Marten also began implementing shader loading.
4-Feb-2003
	- Release of CS 0.96r002.
	- Eric Sunshine augmented the ODE check in configure.ac so that it
	  works in two phases.  First it checks for libode.  Second, it checks
	  if the installed libode is sufficiently recent.  This approach will
	  provide better feedback and debugging information for a user than the
	  old approach where the checks were combined.
	- Eric Sunshine enhanced the "recursive pthread mutex" check in
	  configure.ac so that it recognizes both PTHREAD_MUTEX_RECURSIVE and
	  PTHREAD_MUTEX_RECURSIVE_NP, rather than only recognizing the _NP
	  variation.  The detected macro, if any, is now properly employed by
	  cspthrd.cpp.
	- Matthias Braun reports: apparently on some bitched strange installs
	  (redhat 7.3 :-/) recursive mutexes compile with gcc but don't
	  compile with g++ :-/
	- Marten Svanfeldt did the following:
	    - Changed the way we pass lightinformation to vertex-programs
	      from using glLight tracking into using variables.
	    - Added a 4-component vector. This is almost a copy of
	      csVector3/csDVector3 with small changes due to the 4th-component.
	    - Added support for csVector4 to shader variables.
	    - Added so that default-color is white when using new renderer
	      (this is needed due to how the new renderer handles lighting).
	- Anders Stenberg moved the implementation of csShaderVariable.
	- Daniel Duhprey optimized shadow volumes from 9x per light to 2x per
	  light. Also changed the shadow calculation to depth pass for now
	  (almost twice as fast).
	- Daniel also added light parameter to DrawShadow() for optimization
	  purposes.
3-Feb-2003
	- Eric Sunshine replaced fabsf() with fabs() in terrbig plugin for
	  improved portability since not all platforms have fabsf().  (An
	  alternate solution would be to check for fabsf via configure.  We
	  will probably want to do this in the future.)
	- Eric Sunshine fixed bugs in the new pthread RECURSIVE_NP check which
	  was recently added to configure.ac:
	    - Was incorrectly using "==" rather than "=" in a `test'
	      conditional.
	    - Was passing incorrect flags to CS_CHECK_BUILD().
	- OpenGL: Removed the unlit superlightmap. This is not needed anymore.
	- OpenGL: Added code to detect the optimal size for the super lightmap.
	- Removed the ExtraBright option in opengl.cfg. Wasn't working anyway.
	- OpenGL renderer now listens to the -verbose commandline option too.
	  If that option is given it will print out information (at close
	  time) about super lightmap cache usage.
	- Split the super lightmap cache in four queues. Queue 0 is for
	  the largest super lightmap size (by default 256x256), queue 1
	  is for the next smaller size (128x128) and so on. When building
	  super lightmaps for DrawPolygonMesh the best queue is selected
	  then. This greatly improves super lightmap cache usage with the
	  same amount of texture memory on the card.
	- Changed Video.OpenGL.SuperLightMapNum to SuperLightMapNum0,
	  SuperLightMapNum1, SuperLightMapNum2, and SuperLightMapNum3.
	  With these you can set the sizes of the four queues.
	- Software renderer implementation of DrawPolygonMesh now does
	  backface culling. This makes it a LOT faster and now performance
	  compares to old style single-polygon drawing.
	- Because of this optimization I reduced the FastMeshThresshold to
	  10 by default now.
	- Eric Sunshine made the following changes to configure's OpenGL tests:
	    - Now checks for opengl32 and cousins before libGL and libMesaGL.
	      Hopefully this will work around problems experienced by Cygwin
	      users who have Mesa installed.  The problem is that Mesa seems to
	      be compiled without __stdcall, yet the header found by CS
	      contains __stdcall.  This mismatch leads to linkage errors.
	      Also, Cygwin users report that using opengl32 works properly.
	    - On Unix, now prefers the vendor's OpenGL over Mesa.  Hopefully
	      this will work around some problems reported by users when Mesa
	      was used rather than the vendor's implementation.
	    - Now uses the pthread flags if present when attempting to resolve
	      the OpenGL library since some users have reported that Mesa's
	      OpenGL library references pthread functions.
	- Eric Sunshine made the following changes:
	    - The configure script now checks for "-framework OpenGL" and
	      cousins before checking for libGL, etc.  This ensures that it
	      will find the built-in OpenGL.framework on MacOS/X before finding
	      the optional Mesa libraries which some people have installed via
	      Fink.
	    - Removed hard-coded OpenGL build flags from macosx.mak.
	    - Augmented OpenAL check in configure script to also recognize
	      OpenAL.framework on MacOS/X.
	    - Augmented OpenAL check in configure to automatically deduce need
	      for dsound.lib on Windows.
	    - Ported OpenAL renderer (plugins/sound/renderer/openal) to
	      MacOS/X.  Works correctly with OpenAL.framework.
	- Philip Wyett worked around #define MNG_DLL for Cygwin port, who's
	  default build of MNG is static.
	- Matthias Braun did a fix to cs-config so that --help works without
	  CRYSTAL being set. Also updated ODE test to look for some new
	  0.035 functions and improved check for recursive mutexes.
2-Feb-2003
	- Optimization with polygon buffers (DrawPolygonMesh) in OpenGL
	  renderer. They use less memory now and they are also more efficient.
	- Cleaned up some unused code in ogl_g3dcom.cpp.
	- Fixed a crash bug with fog when clipping is needed.
	- With Z-plane clipping (OpenGL) we now only switch to exact clipping
	  if the NeedScreenClipping flag is set in opengl.cfg.
	- Fixed bug in OpenGL fog handling. Was broken after a recent
	  optimization.
	- Eric Sunshine eliminated unnecessary and fragile "darwin6.3" alias
	  from vfs.cfg.
	- Eric Sunshine modified tutorial/intro.txi so that it gives the full
	  name of SCF and features a hyperlink to the SCF section.
	- Eric Sunshine updated the comments in configure.ac to more fully
	  inform the reader about the Autoconf bugs which configure.ac works
	  around.
	- Removed redundant number of triangles in the polygon buffer.
	- Cleaned up OpenGL polybuf code a bit more.
	- Removed an unneeded IncRef() on iPolyTexture in the polygon buffer
	  implementation.
	- Eric Sunshine made the following changes to the new csArray template:
	    - Fixed bad bug: Public SetLength() allowed client to
	      indiscriminately add and remove elements from the array without
	      proper construction/deletion.  This unsafe method has been
	      replaced with safe methods Truncate() and SetCapacity().
	    - Fixed bad bug: Pop() was returning a destroyed object.
	    - Fixed non-portable constructs which would fail with some
	      compilers.
	    - Added several new useful methods.
	    - Generally cleaned up and unified the code.
	- Updated documentation about the new csArray class.
	- Added iPolygonBuffer->Prepare() function to make it easier to
	  manage optimal super lightmap calculation.
	- Fixed a bug in csGrowingArray<T>->SetLimit(). It would not
	  adjust the length of the array if the new limit was smaller than
	  the length.
	- Now lightmaps are sorted on biggest dimension before we start
	  choosing a super lightmap. By doing this we can significantly
	  reduce the number of needed super lightmaps for some of the larger
	  objects.
	- Anders Stenberg added first version of CG shader plugin.  It can
	  currently handle both vertex and fragment programs, and use textures
	  supplied by the material.  Shader variables can be bound to CG
	  variables.  Features missing include:
	    - Better handling of passing matrices into CG
	    - Fetching "global" textures directly from the engine by name
	    - Effective code (totally unoptimized now)
	- Anders Stenberg fixed stencil clipping for new renderer again.  It
	  should now work even with shadows.
	- Anders also fixed shader plugins to be up to date with minor
	  changes in the shader interface.
	- Eric Sunshine updated the extremely outdated "External Utilities /
	  Libraries" page on the web site and fixed broken links.
	- res fixed a crash in JNG saving.
	- Matthias Braun rewrote the list template:
	    - Function names are more uniform to rest of CS templates now
	      (Yes, we should use STL but the function names used before are
	      neither STL nor CS standard...)
	    - Internal implementation of csListElement is now correctly hidden
	      and only exposed through the Iterators.
	    - Improved implementation of PushFront and PushBack a bit.
	    - Replaced some const T with const T& to make the copy
	      constructors more efficient.
	    - Fixed gl_varbufmgr for the list changes.
	- Matthias Braun finally found the memory error: an unitialized
	  variable in the ogg reader...
	- Matthias added helper class for scoped mutex lock. Also renamed
	  ScopedMutex to ScopedMutexLock.
	- Matthias changed CS mutex code to support recursive mutexes. Also
	  added check for pthread implementation allowing recursive
	  mutexes.
	- res commented out a csMutex::Create() to make it compile again
	  and Matthias then fixed it for real.
1-Feb-2003
	- Marten Svanfeldt completly rewrote the renderbuffer manager using
	  the VAR extension on Nvidia-cards
	- Marten Svanfeldt added a very lightweight template for a double
	  linked list.
	- Marten Svanfeldt renamed iShaderRenderInterface::GetObject to
	  GetPrivateObject to avoid a error with #define GetObject GetObjectA
	  which exsists somewhere in the windows-headers.
	- Marten Svanfeldt renamed iRenderBufferManager::GetBuffer to
	  CreateBuffer to better show what it does.
	- Lightmaps with DrawPolygonMesh were not correctly aligned. This
	  is a very old bug that was fixed for normal lightmap rendering
	  but not for DrawPolygonMesh.
	- Fixed a bad bug with curved surfaces and pseudo-dynamic lighting.
	  This caused crashes.
	- Work around to a division by zero bug that sometimes happens in emit.
	  Don't know what causes this and I don't understand the emit code
	  so I cannot give a real fix.
	- Fixed a very bad bug in the thing mesh plugin. When a lightcell
	  size was selected different from the default 16, all shadow
	  calculations would go wrong because the shift value (4) wasn't
	  updated. This bug was introduced when I moved thing to a separate
	  plugin.
	- Matthias Braun applied patch from damage-list@freenet.de.
	  This patch fixed some crashers in csgrid and tries to close a memory
	  leak in palettes. (I modified the patch a bit as it contained a
	  mismatched malloc/delete).
31-Jan-2003
	- Another small optimization in the super lightmap cache. This time
	  avoid virtual function calls.
	- Another small optimization. If nothing was drawn during the
	  unlit texture mapping then no lightmaps are drawn either (for
	  DrawPolygonMesh).
	- Cleaned up super lightmap code a little more.
	- Started work on new optimization in the super lightmap cache. Not
	  operational yet.
	- Made the super lightmap cache in the OpenGL renderer a lot faster.
	  There is now a cost associated with every super lightmap (based
	  on number of lightmaps that are in it) and also a timestamp which
	  says when that super lightmap was last needed. When selecting a
	  new super lightmap this information is used to make sure that
	  useful super lightmaps stay in memory.
	- Fixed a bad bug in the exact clipper used by DrawPolygonMesh. This
	  bug was introduced yesterday and caused lightmaps to be wrong
	  if exact clipping was needed.
	- res fixed MSVC assertion in csString::Collapse() if the string
	  contains characters >= 0x80.
	- Eric Sunshine worked around an internal compiler error on MacOS/X by
	  slightly reorganizing csGraphics3DOGLCommon::ClipTriangleMesh() in
	  ogl_g3dcom.cpp.  Also eliminated a significant number of compilation
	  warnings.
	- Matthias Braun fixed plugin linking with custom lflags for various
	  plugins. Also fixed dependency generation.
30-Jan-2003
	- Greatly modified the DrawPolygonMesh and polygon buffer
	  code in the OpenGL renderer. This is still very experimental
	  so I'm going to continue working on this. There are also no
	  substantial performance improvements yet.
	- Additional small optimization in the super lightmap cache handling.
	- Matthias Braun made plugin makefiles using the CFLAGS from external
	  libraries (3ds, mikmod, ogg/vorbis, openal, ode plugins)
	- Eric Sunshine fixed problem in the various OpenGL renderer and canvas
	  plugins in which GL.LFLAGS was being applied to the `ar' invocation
	  for static builds.
29-Jan-2003
	- Matthias Braun fixed ogg loader crash when sound hasn't been
	  initialized.
	- Matthias Braun also fixed the problem with streamed sounds getting
	  looped regardless of their flags (software sound renderer).
	- Marten Svanfeldt fixed the confusion in the contribution section of
	  the documentation about who did what with the new renderer.
	- Release of CS 0.96r001.
	- The software implementation of DrawPolygonMesh was not at all
	  behaving well in case polygons go beyond the Z-plane. Fixed this now.
	- Philip Wyett updated the msvc_libs links in the documentation.
	- Marten Svanfeldt fixed an error made when rewriting the statecache.
28-Jan-2003
	- Removed iGLStateCache. Instead csGLStateCache is used. This is
	  possible because csGLStateCache doesn't do any memory allocation
	  in any of its methods. This means that the functions of
	  csGLStateCache don't have to be virtual anymore. This gives another
	  small speed increase with the OpenGL renderer.
	- Made r3dtest spit out a useful error message if it cannot find
	  a test level.
	- Most CS applications will now use OpenGL by default instead of the
	  software renderer.
	- Reset use_lazy_clipping in OpenGL renderer to false again by default.
	  Setting this to true has bad effect on performance because then
	  lazy clipping is forced in all cases.
	- Keith Fulton fixed a bug flipping the do_tweening flag on saving
	  of binary spr3d's.
	- Fog now works for DrawPolygonMesh (OpenGL version).
	- OpenGL/DrawPolygonMesh now respects the flag to disable lighting.
	- Eric Sunshine changed the Linux joystick test in configure.ac so that
	  it now reports its results to the user.  Also cleaned up the logic.
	- Eric Sunshine disabled the annoying, abusive message in aclocal.m4
	  about missing FreeType2 library.  We don't need to abuse the user
	  when an optional library is absent.
	- Apparently EffectDrawTriangleMesh() in OpenGL doesn't correctly work
	  with fog enabled. As a temporary work around I switch to
	  OldDrawTriangleMesh() in case fog is enabled.
	- Eric Sunshine fixed a double-delete[] bug in win32/loadlib.cpp on
	  Cygwin reported by Dan Mahoney <domahoneyii@users.sourceforge.net>.
	- Eric Sunshine fixed a bug recently introduced into csconfig.mak where
	  it failed to invoke the build.cs-config target in the sub-make
	  invocation.
	- Added a new setting to the engine with which you can control the
	  number of polygons after which CS_THING_FASTMESH is automatically
	  enabled for things (use DrawPolygonMesh then). The default value
	  is 500:
	      - Added Engine.FastMeshThresshold config option.
	      - Added SetFastMeshThresshold() function to iEngine.
	      - Added GetFastMeshThresshold() function to iEngine.
	      - Added <fastmesh> keyword to the <settings> block.
	  Currently this will only work for things that have no portals and
	  no curves.
	- Set the fastmesh thresshold in flarge to 10. That causes a few
	  objects to use fastmesh now.
	- Matze Braun added configure tests for: libmikmod, libogg, libvorbis,
	  libvorbisfile, lib3ds, libode, libopenal, libfreetype2, a switch for
	  linux joystick drivers.
	- Matze Braun tweaked the list of apps "make install" installs and
	  added a call to "cslight" with flarge and partsys to the end of the
	  install process.
	- Eric Sunshine fixed the lib3ds test in configure.ac so that it no
	  longer assumes unconditionally that libm.a is present.  Not all
	  platforms have libm.a
	- Eric Sunshine removed scftutor for lack of obvious usefulness.
	- Eric Sunshine hacked the cslight run in install.mak to work with
	  MacOS/X.
	- Eric Sunshine protected 3ds2lex.mak inside 3DS.AVAILABLE conditional
	  to prevent "make install" from trying to install it on platforms
	  which do not have lib3ds intalled.  Also added it to "all" and "apps"
	  pseudo-targets.
	- Eric Sunshine added "3DS.AVAILABLE=yes" to MSVC.MAKE.FLAGS in
	  msvcgen/required.mak in order to ensure that app3ds2lev project files
	  get built.
	- The OpenGL halo code was bypassing the state cache.
	- Eric Sunshine fixed botched OSS.AVAILABLE available test which was
	  just added to configure.ac.  The botched test only covered two of the
	  three cases.
	- Small optimization in the OpenGL superlightmap cache.
	- Eric Sunshine updated the CS version number in csver.h, version.txi,
	  and configure.ac (configure) in prepration for the 0.96 release.
	  Also rebuilt the documentation with the new version number.
	- Keith Fulton fixed opposite logic bug in binary sprite saver which
	  was saving the opposite setting for tweening from what was actually
	  set.
	- Philip Wyett did the following:
	    - Changed so release build is now the default one loaded when you
	      open csall.dsw.  This will hopefully help those who are unsure
	      and build the for developers only extensive memory debug build.
	      Note: Those who already have builds should be sure to delete
	      csall.ncb and .opt from 'CS\mk\visualc' or the change will not
	      take effect.
	- Matthias Braun did the following:
	    - Fixed make install rules I introduced yesterday.
	    - Added message to make install.
	    - Only build oss driver if soundcard.h is available.
	    - Only build xfree86vm plugin if that extension has been detected.
	- Philip Wyett fixed crasher in g2d.cpp under MSVC and Cygwin.  (And
	  then Eric Sunshine reverted the fix since it treated the symptom
	  rather than the cause, and it broke several other facilities.)
27-Jan-2003
	- Restored number of super lightmaps in OpenGL to 10 again.  Apparently
	  16 was too much for cards with less texture memory.  We have to find
	  a better way to discover how many super lightmaps we can really use.
	- Made sure that csTinyXmlNode->GetContentsValueAsInt() and
	  GetContentsValueAsFloat() now return 0 if the contents is actually
	  illegal. Previously they would simply return a random value.
	- Fixed a bug in the OpenGL renderer with EffectDrawTriangleMesh.
	  That function was enabling and disabling several client states by
	  using the OpenGL functions directly but that is illegal since the
	  OpenGL renderer itself keeps a cached state of this. So you should
	  always go through the cache instead. This fixes a bug where
	  enabling DrawPolygonMesh for the car in the street of flarge would
	  cause the snow to become too bright.
	- The OpenGL polygon buffer now stores an array of triangles for fog.
	  Not operational yet.
	- Completely removed the slow general EnableState/DisableState
	  functions in the OpenGL state cache and replaced them with specific
	  enable/disable functions for various states. The hashmap is thus
	  no longer needed. This change gives a small but noticable performance
	  increase.
	- res did the following:
	    - Some sequences reference themselves. Added comments to
	      world file about that fact (and only those comments this
	      time).
	    - Fixed some leaks in genmesh and freefnt2.
	    - Fixed mottest crash.
	    - Updated todo.txt about that fact.
	- Matthias Braun did the following:
	    - Updated and fixed null 3d renderer and canvas.
	    - Update to todo.txt about working null renderer.
	    - Install phystut, csdemo, viewmesh and cslight.
	    - Improved current make install process a bit by doing a
	      cslight run on the installed levels.
	    - Improved dependencies for cs-config.
	    - Fixed cs-config .cex files handling when CS has been
	      installed.
	    - Don't install g2dtest and gfxtest.
	    - Added a check for libmikmod to configure script.
	    - Added tests for freetype2, openal, libogg, libode, and
	      lib3ds.
	    - Added a --enable switch for the linux joystick module.
	- Norman Kramer did the following:
	    - Added dependency on pythoncs.i in makefile.
	    - cspace now includes the iDocumentSystem related interfaces.
	    - Before you can query the iDocumentSystem interface you
	      have to put it in the registry by
	      csInitializer.RegisterDocumentSystem (object_reg).
	- Philip Wyett did the following:
	    - Changed simplecloth to use GL by default. With no way
	      seemingly of getting it working correctly for 0.96 under
	      software, will avoid alot of error reports for a problem
	      we already know about.
	    - Fixed some warnings in GL under MSVC release build.
	    - Removed the extra ; from the ends of some lines of code
	      in bcterr.h.
	    - Wrapped up newly added 'shadowmat' code in genmesh for new
	      renderer as a short term measure to fix crashers in
	      default cvs tree i.e. isotest and isomap.
	      Members of the team working here just search for @@@ to
	      find where the temporary modifications have been made.
26-Jan-2003
	- Norman Kramer did the following added updates to cspython by
	  Rene Jager <renej.frog@yucom.be>:
	    - Attached a tgz file with include/ivaria/cspace.i which
	      %include's at the end ivaria/pythoncs.i (ifdef SWIGPYTHON)
	      or ivaria/perl5cs.i (ifdef SWIGPERL5); is extendible of
	      course ;-)
	      Most of the python specific stuff is now in
	      ivaria/pythoncs.i, but some "#ifdef SWIGPYTHON" code
	      remains, although very little. Result: 40% of previous
	      cspace.i is now in pythoncs.i
	      Also updates for cspython.mak and missing cspymod.cpp
	      (needed for using CS as a python module).
	      Update of scripts/python/pysimpcd.py (now sound on
	      collision).
	      Next thing to tackle is the duplicate list with
	      interfaces...
	    - I received the code from Mark Gossage and he states that
	      the smart pointers (read csRef) cause extra (unneeded)
	      code... he's right...  this resulted in preventing SWIG
	      handling csRef by ysing appropriate typemaps; result:
	      less generated code and clear usage in python (hence
	      no __deref__) necessary ;-)
	- Norman Kramer also did the following:
	    - Changed +value in enums to value (without the '+' sign)
	      this caused SWIG trouble (swig bug report has been filed)
	      (this change is small enough to make it here than to write
	      a dozen lines in swig to run around it).
	    - Updates by Rene Jager <renej.frog@yucom.be>:
	      Test examples for using CrystalSpace from within Python.
	      simpcd.py now plays sound on collision.
	- Frank Richter noted that some sequences reference themselves.  Added
	  comments to world file about that fact.
	- Added a missing call to SetMirrored() in the old OpenGL renderer
	  in EffectDrawTriangleMesh(). This fixes a few problems with
	  DrawPolygonMesh and DrawTriangleMesh in mirror mode.
	- Optimization in DrawPolygonMesh so that RecalculateDynamicLights
	  is only called when the polygon buffer is marked as dirty.
	- Optimization in DrawPolygonMesh: the OpenGL transforms are only
	  setup once for one DrawPolygonMesh call as opposed to several
	  times for every internal DrawTriangleMesh call.
	- Eric Sunshine fixed bug in walktest.mak.  The "walkall" target was
	  not declared .PHONY.
	- Eric Sunshine eliminated some compilation warnings from the project.
	- Eric Sunshine update vfs.txi to reflect present reality.
	- Eric Sunshine eliminated TeX `hbox' warnings from the user manual.
	- Eric Sunshine added missing `#ifdef CS_HAS_MEMORY_MAPPED_IO' to
	  csutil/mmapio.cpp.  Problem reported by Robert Stewart
	  (rmsgrey@users.sourceforge.net).
25-Jan-2003
	- Gregory Block added an alias for MacOS X to vfs.cfg.
	- Philip Wyett added newline a end of file gfxtest.cpp.
	- Matthias Braun did the following:
	    - Changed name csconf target to cs-config to be conform with
	      rest of CS and to fix install.
	    - Removed scf.cfg from CSTOOL.CFG as it already was in CSUTIL.CFG
	- Frank Richter fixed -1 bug in win32.cpp reported by Anders Stenberg.
24-Jan-2003
	- Philip Wyett fixed redefinition of i in for loops under MSVC 6 in
	  shadermgr.cpp.
	- Philipp Aumayr updated metaballs for new renderer.
	- Added the notion of 'camera' flag to a render priority. When this
	  flag is true the engine will scan all objects in this render
	  priority to see if any of them has the CS_ENTITY_CAMERA flag set.
	  If that's the case it will automatically correct the position of
	  that object based on the current camera position (during rendering).
	- Added various API functions in CS to get/set this render priority
	  flag.
	- Added <camera> keyword for parsing render priorities so that you
	  can manually set this flag. If you don't specify render priorities
	  in your map then the 'sky' render priority will automatically have
	  this flag set.
	- When a mesh object with CS_ENTITY_CAMERA is added to a sector it
	  will automatically cause the render priority of that object
	  to be tagged with the correct do_camera flag. This is done to ensure
	  backwards compatibility.
	- When rendering the sector will now scan all objects that are in
	  a render queue with camera flag set and that have CS_ENTITY_CAMERA
	  set and will move them to the new location. At this moment this
	  only works for objects that are always at 0,0,0 position. This
	  is also usually the case. This solves the bug in csdemo.
	- Bugplug no longer depends on the existance of the font server.
	- OpenGL canvases no longer depend on the existance of the font server.
	- Cleaned up csSector a bit. Added PrepareDraw().
	- Eric Sunshine changed csconf.mak so that it now extracts sections
	  delimited by <cs-config> and </cs-config> directly from the
	  platform-specific makefile and inserts them verbatim into the
	  generated cs-config script for the --makevars option.  This replaces
	  the fragile $(subst) magic in csconf.mak which was attempting to
	  protect $@ in emitted variables, and also generally prevents
	  clobbering of other makefile special variables, such as $*, and
	  special functions, such as $(notdir), $(basename), etc.
23-Jan-2003
	- Matthias Braun updated todo_1.0.txt regarding memory leaks.
	- Daniel Duhprey did the following:
	    - Fix in terrbig to improve compile option for mingw.
	    - Optimization to volumes for new renderer.
	    - Small change for transformations in genmesh (needed for
	      the optimization).
	- res did the following:
	    - Replaced ilogb() with csLog2() in terrbig.
	    - Leaks fixed in terrbig.
	    - Walktest now properly cleans up if initialization fails.
	    - Put static vars from csDynaVis::UpdateCoverageBuffer() into
	      CS_IMPLEMENT_STATIC_VAR() to fix leaks
	- Fixed genmesh so it compiles again.
	- Fixed effects plugin so it compiles again.
	- Fixed an initialization error with the new mesh_tri_normals in
	  genmesh.
	- Fixed bug in dynamic lighting of curves. Hitting 'L' in walktest
	  would trigger the bug if the donut in the street was visible.
	- Removed 'effects' plugin from walkall again and instead added
	  'effects' to 'drivers' and 'drivers3d' targets.
	- Sound loaders are no longer listed in the 'drivers' and 'snddrivers'
	  target. Those are not drivers.
	- Fixed a bug in the OpenGL renderer where a 'modified' flag was not
	  exactly set in the right way.
	- Fixed a bug in DrawPolygonMesh() with regards to lightmaps (in the
	  OpenGL renderer).  The bug was that GL_RGBA8 was used in case the
	  super lightmap was not in the cache and GL_RGBA was used otherwise.
	  Now GL_RGBA is used in all cases.
	- DrawTriangleMesh() and EffectDrawTriangleMesh() initialized
	  use_lazy_clipping to false.  It was never set to true.  However lazy
	  clipping is very good for performance so it is best to set that to
	  true initially and only set it to false when it is required (OpenGL
	  renderer).
	- Increased the number of super lightmaps from 10 to 16 for OpenGL.
	- Improved setting of use_lazy_clipping flag a bit.
	- Fixed the memory leak in csPolygonMeshTools for real using the proper
	  CS_IMPLEMENT_STATIC_VAR instead of the non-portable dependency on
	  global constructors/destructors.
	- Made sure that for outer and optional clippers the '0' (software)
	  clipper is never selected (OpenGL renderer).  Instead it is replaced
	  with 'N' (lazy clipping).
	- Eric Sunshine made the following changes:
	    - Restored debug symbols for plugins in Mingw/Cygwin.  Apparently,
	      the technique of using -shared to create plugins produced
	      inconsistent results: some plugins displayed debug symbols in
	      gdb, while others did not.  (Note that --export-all-symbols had
	      absolutely no effect.)  Reverted to using dllwrap for plugin
	      creation, as this seems to give more reliable results with debug
	      symbols in gdb.  Also now uses dlltool to create the .def file
	      rather than dllwrapwrap.sh.
	    - Also had to work around problem caused by console-support main()
	      function in win32.cpp.  Unfortunately, dllwrap tried resolving
	      the symbols referenced by this function, even though it is not
	      used for plugins, but the referenced symbols (_cs_main and
	      ApplicationShow) do not exist in plugins.  Consequently, had to
	      dummy up these symbols in CS_IMPLEMENT_PLATFORM_PLUGIN().
	- Eric Sunshine changed DO.SHARED.PLUGIN.CORE in win32gcc.mak so that
	  it now creates the .def file manually rather than using dlltool.
	  This was necessary to work around a bug/problem with dlltool where it
	  fails to recognize and insert into the .def file exported symbols
	  from static libraries.  In this case, the SCF goop symbols from
	  csengine library failed to make it into the engine plugin.
22-Jan-2003
	- Philip Wyett did the following:
	    - Fixed delete vs. delete[] mismatch in aws.
	    - Fixed CR/LF reading problem under Cygwin (engine.cfg).
	- res did the following:
	    - Some line endings were messed up in loadlib.cpp.
	    - Effects system now returns smart pointers in some cases.
	    - Fixed some memory leaks in the effects system and GL state
	      cache.
	    - Removed PNM code from gfxtest.
	    - Gfxtest can output a list of supported image formats.
	    - Bmp loader now reports 32bit RGBA support.
	    - Attempt to fix leak in csPolygonMeshTools::CalculateEdges().
	    - Fixed leaks in DynaVis unit test.
	    - Sequences which contained a 'recurse' kept a reference to
	      themselves preventing proper clean-up.
	- Matthias Braun did the following:
	    - Marking the simpvs bug as fixed.
	    - Some more updates and notes in todo_1.0.txt.
	- Anders Stenberg added working shadows for the new renderer.
	  (Requires closed meshes for now.)
	- Daniel Duhprey did the following:
	    - Vertex Program to extrude shadow volumes to infinity.
	    - Fixed some buffer issues with the dirty flags in genmesh
	      (Could cause some problems if people arbitrarily change
	      the triangle buffer without changing the others) Also
	      fixed so trinormals is computed regardless of the
	      autonormal flag.
	    - Fixed a memory leak and a problem with open geometries
	      in genmesh.
	    - Compatibility fix with old renderer for genmesh.
	    - Attempt to fix lighting in terrbig. Add some error
	      checking on the input file.
	- Made iEngine->CreateDynLight() a bit more efficient by avoiding
	  the SCF_QUERY_INTERFACE.
	- Lights (dynamic and static) now keep a real reference to the lighting
	  infos they store in their maps. That way there will be no crash
	  if objects get deleted before the lights are deleted. This fixes
	  crash at exit if you press L and then quit walktest.
	  I think this also fixes the crash at exit that sometimes occurs
	  with Blocks.
	- Eric Sunshine committed a patch to win32/loadlib.cpp from John Harger
	  <john_h@selectpath.com> which hopefully will resolve the problem on
	  Cygwin where vfs.dll failed to load (or any other plugin which has an
	  implicit dependency upon DLLs in Cygwin's /bin directory).
	- Philip Wyett did the following:
	    - Fixup in msmodel.cpp to match new CS_ALLOC_STACK_ARRAY.
	- res did the following:
	    - Win32Assistant IncRef()'d the object registry but did not
	      DecRef() it.
	    - Plugins won't be unloaded w/ MSVC extensive memdebug
	      (otherwise source file info for leaked objects gets lost).
21-Jan-2003
	- Keith Fulton moved the maya2spr converter from the Planeshift
	  cvs to Crystal Space.
	- Made a makefile for maya2spr and fixed it so it compiles cleanly.
	- Marten Svanfeldt did the following:
	    - Fixed a bug which made statecache segfault on destruction. It
	      should not be a csRef but just an ordinary pointer.
	- Matthias Braun did the following:
	    - Worked around a bug in aws: aws won't work if there isn't a
	      iGraphics2D registered at the time aws is loaded. Changed
	      loading order in vidprefs.cpp to fix a bug reported by Eric.
	    - Added check an warning message about iGraphics2D to aws.
	- res did the following:
	    - walktest: default font is loaded if user-specified one fails
	    - Renamed ALLOC_STACK_ARRAY to CS_ALLOC_STACK_ARRAY. Flipped
	      order of var & type parameters so it matches the C++ variabel
	      declaration (type first, then name).
	    - Win32: console windows are only hidden after an app window was
	      created.
	    - Win32: plugins now export a function which returns the used
	      compiler. If it doesn't match the app compiler the plugin isn't
	      loaded (so mixing MinGW & MSVC binaries will cause an error
	      report instead of just a crash).
	    - Added iCommandLineParser::GetBoolOption().
	    - A few leak fixes.
20-Jan-2003
	- Marten Svanfeldt did the following:
	    - Added two methods to iRenderBuffer allow discardable buffers.
	    - Modified genmesh to correctly handle buffers which can be
	      discarded.
	    - Fixed indexbuffer lockingproblems when using multiple
	      texturepasses.
	    - Updated glshader_mtex.cpp to follow newest interface. Added
	      iRenderMesh* to Deactivate.
	- Norman Kramer renamed PLUGINS.DYNAMIC to PLUGINS in win32gcc.mak.
	- res did the following:
	    - Small change to the LoadLibrary error reporting: instead of
	      GetLastError() calling twice, its return value is now stored
	      (theoretically, FormatMessage() could change the last error
	      code, so a wrong error number would be used in the sprintf()).
	    - Reduced number of spaces in csPrintLibraryError() (caused
	      linebreaks at least for german 'file not found'... two should be
	      enough for visual grouping of the messages).
	- Christian Bayle did more Debian updates.
	  Smaller icons to respect policy.
	- Removed the obsolete and non-working iRenderView callback system
	  and the associated iEngine->DrawFunc().
	- Eric Sunshine reverted the recent change to the general
	  csFindLoadLibrary() which caused it to throw away potentially useful
	  diagnostic information when a plugin failed to load.  Unconditionally
	  throwing away this information was unacceptable.  Instead, the
	  verbosity of error messages from the plugin loader is now controlled
	  by the new command-line option "-verbose".  When -verbose is used,
	  error messages present detailed information about the load failure.
	  When not used, a simple message is printed saying that the load
	  failed and that the user should use "-verbose" for more details.  For
	  debug builds, -verbose is the default.  For optimize builds, it is
	  not.
	- Andrew Craig fixed a problem with unreleased references in the
	  Windows OpenGL canvas. RestoreDisplayMode() set is_open to false
	  but this prevented the superclass Close() to properly do the
	  cleanup. In addition fixed the call to the parent Close() so that
	  it calls csGraphics2DGLCommon::Close() instead of
	  csGraphics2D::Close().
	- Eric Sunshine committed an update for win32/loadlib.cpp from John
	  Harger <john_h@selectpath.com> which implements error reporting.
	  Previously, win32/loadlib.cpp simply threw away all diagnostic
	  information, which made it impossible to debug plugin load failures
	  on Windows.
	- Eric Sunshine augmented jobber.pl so that it emits "USE_PLUGINS=yes"
	  to the config.mak file which it fakes up.  This fixes the problem in
	  which scftutor.mak was misbehaving and adding dog.cpp and worm.cpp to
	  the appzoo project.  (These files should have appeared only in the
	  plgdog and plgworm projects.)
19-Jan-2003
	- Philip Wyett fixed mismatched delete vs. delete [] at
	  destruction of 'nTerrainInfo' (terrbig).
	- Christian Bayle added new Debian package files mostly moved
	  from Debian to deb dir.
	- Marten Svanfeldt did the following:
	    - Made csGLTextureCache a interface so that shaderplugins can
	      access it.
	    - Added so that
	      eiShadercsGLRender3D::eiShaderRenderInterface::GetObject
	      returns the texturecache.
	    - Completed multitexturing plugin, including the loader.
	    - Added examplefile for multitexturing plugin.
	- Anders Stenberg adding the first steps towards lighting to the
	  new renderer. Also added support for stream mapping in the
	  vertex program plugin.
	- Anders also cleaned r3dtest up some more.
	- Philip Wyett fixed for MSVC generation failure (simplevp.mak).
	- Fixed a problem where RemoveObject() would not properly remove
	  objects from the sectors so memory leaks would occur.
	- Changed the way the mesh, factory, light and sector lists are
	  implemented so that it is no longer possible to misuse them (the
	  array has been made private).
	- Eric Sunshine began converting the makefiles so that object-files for
	  each module are placed in a module-specific object-file directory,
	  rather than in the common out/PLATFORM/CPU/mode directory.  This
	  change corrects the broken and monolithic design limitation of the
	  makefile system where no two source files in the entire project can
	  have the same name even if they reside in different module
	  directories.
	- Eric Sunshine made a small change to CS_TEXT_CACHE_OUTPUT() in
	  configure.ac, as suggested by Matze, which obviates the need for
	  CS_ESCAPE().  Also removed CS_ESCAPE().
18-Jan-2003
	- Daniel Duhprey optimized terrbig (about 10%).
	- Anders Stenberg did some optimizations in the new render3d OpenGL.
	- Anders also improved error reporting in vertex programs.
	- Norman Kramer did the following:
	    - Included util.h in cspython.cpp for csStrNew declaration.
	    - Commented out shader.h and associated definition from
	      cspace.i, so no conflict between new and old renderer
	      anymore which means the plugin compiles with
	      US_NEW_CSPYTHON_PLUGIN.
	- Marten Svanfeldt fixed multitexturing shaderplugin.
	- Fixed the engine so it no longer tries to load the thing_type
	  immediatelly in initialization. Instead it tries to load it
	  the first time really required. This solves a bug with awstest
	  which loaded the engine plugin manually.
	- Fixed a problem in cslight. It would not request the fontserver
	  at init time. This caused a crash when cslight was used with
	  the OpenGL renderer since the OpenGL renderer requires the font
	  server.
	- Fixed the sky procedural texture so that the sky is back in the
	  sky where it belongs (demosky app).
	- Fixed an assert error at exit when cleaning up materials in the
	  iso engine. This fixes crash at exit for isotest and isomap.
17-Jan-2003
	- Marten Svanfeldt did the following:
	    - Added DrawLine to render3d interface.
	    - Cleaned up shader interface.
	    - Added prepare step.
	    - Extended bugplug to compile under render3d.
	    - Fixed dynavis to compile with render3d.
	    - Fixed a small error in VAR buffer manager.
	    - Added first version of opengl-multitexturing pseudo-fragment
	      program.
	    - Fixed compilation error related to shaders with old renderer.
	    - Fixed an error which caused render-stall.
	- Philip Wyett did the following:
	    - Removed appgui.tpl due to problems it's re-insertion is
	      causing.
	    - Removed EAX plugin. Those needing it, which seems to
	      be virtually none can manually re-generate it back into
	      the build process.
	    - Fix for Cygwin in sockets.h.
	    - Added include dir for DirectX headers that get installed
	      into Cygwin. This will hopefully be part of the autoconfig
	      eventually.
	- Fixed a bug in the OpenGL renderer where attempts were made to
	  clip fog information even if no fog is present. This resulted
	  in valgrind errors (use of uninitialized variables) and also
	  results in unneeded clipping work (not as efficient as it could
	  be). Unfortunatelly this does not yet fix the bug that people
	  experience when turning right in the main hall of flarge.
	- Fixed an initialization error in csEngine. The cache_mgr variable
	  was not initialized to NULL. I guess we were just lucky that nobody
	  hit this :-)
	- Moved the initialization of the state cache in the common code
	  of all OpenGL canvases to before the font cache is created. Otherwise
	  there would be an access to an uninitialized fields since the font
	  cache is already trying to use the state cache.
	- Fixed the crash bug in OpenGL when turning right in flarge.
	  The reason appeared to be that the code to update procedural
	  textures with a texture not in the texture cache wasn't working
	  very well in all cases (not exactly sure why). I fixed this by
	  making sure that the texture is always in the cache before it is
	  being updated.
	- The spr3d, ball, and genmesh mesh objects will now respect
	  static ambient (from the engine) and dynamic ambient (from the
	  current sector) when their lighting is updated
	  (DeferUpdateLighting()). This ambient+dynamic ambient is added
	  to the base color that is already set. This may mean that if
	  you manually set the ambient on such a model then the object
	  can be too bright now. In that case use black as the base color.
	- In optimize mode the general library loader will print out less
	  threathing warnings in case some dll's cannot be loaded. In debug
	  mode the warnings are still as descriptive as before.
	- Fixed glrender3d and shadermgr so they compile on gcc.
	- Fixed r3dtest so it compiles with old renderer too. Easier
	  to compare performance that way.
	- Fixed an initialization bug with bounding box creation in genmesh
	  for new renderer.
16-Jan-2003
	- Philipp Aumayr killed char mod_name[strlen(name)]; bug in
	  cspython.cpp.
	- Marten Svanfeldt fixed a small bugg in GetBuffer which caused
	  buffers to be regenerated each call (genmesh).
	- 'reverse_action' in 3D sprites was not initialized to false.
	- Fixed odedynam plugin so it compiles again.
	- Fixed ie3ds plugin so it compiles again.
	- Eric Sunshine removed the -ggdb check from configure.ac since it
	  breaks the MacOS/X Jaguar port (assembler barfs on generated
	  assembly), and it wasn't really used/needed anyhow.
	- Keith Fulton added csColor and csVector3 types to iSharedVariable.
	- Keith Fulton added ability to reference an iSharedVariable
	  from a <setambient> sequence command using a color_var attribute.
	  Walktest now sets the ambient in the large room to the color of
	  light on the stairs at the moment you hit Ctrl-L to start the
	  lightning.
	- Fixed a memory leak in the shared variable implementation.
	  Changed prototype of New() (for creating a new shared variable)
	  to return a csPtr instead of a normal pointer.
	- Fixed error handling in parsing of shared variables and
	  imposter settings.
	- Changed syntax for variables. Now it is like:
	    <variable name="color"><color red="..." /></variable>
	  or:
	    <variable name="float" value="1.3" />
	- Changed prototype of iSharedVariable->SetVector() so that it
	  expects a vector instead of three floats.
	- Added 'const' to a few methods in iSharedVariable.
	- Updated the FAQ a little bit.
	- Updated a bit of the engine documentation.
	- Eric Sunshine fixed a problem with the Autoconf configure script
	  where it was emitting the obsolete "MINGW_LIBS+=-lmingwex" rather
	  than the newer "LIBS.SYSTEM+=-lmingwex" for older versions of Mingw
	  which require explicit mention of libmingwex.a.  Problem was
	  discovered based upon bug report from Calvin Finch
	  <calvinfinch@shaw.ca> in which he noted that link failed to resolve
	  opendir(), readdir(), closedir().
	- Eric Sunshine applied patch from John Harger <john_h@selectpath.com>
	  to mdltool.cpp to work around MSVC6 internal compiler error.
	- Eric Sunshine eliminated some compilation warnings.
15-Jan-2003
	- Anders Stenberg did various small fixes and updates for the new
	  renderer.  Also cleaned up r3dtest a bit, and added more "FPSish"
	  camera control.
	- Christian Bayle updated the Debian scripts.
	- Peter Amstutz converts csObjVector to csRefArray in ODE dynamics
	  plugin.
	- Started removing a few csVector usages and replacing them
	  with typed versions. In particular changed:
	    - csCrysBall
	    - csCollection
	    - csMeshWrapper
	    - csSector
	    - csAnimationTemplate
	- Removed csObjVector (replaced with csRefArray in most places).
	- Fixed terrfunc so that it correctly calculates the bounding box.
	  This fixes an assert in dynavis/frustvis.
	- Eric Sunshine removed the old ad-hoc "make platform" configuration
	  mechanism.  The new Autoconf configure script is now the only way to
	  configure the project.
	- Eric Sunshine updated the configure script so that it emits the
	  makefile variables COMP and OS to config.mak, and also now emits
	  DEPEND_TOOL=cc if makedep is missing or has the incorrect version.
	- Eric Sunshine eliminated compilation warnings from the cloth plugin.
	- Eric Sunshine fixed bugs in md32spr.mak.
14-Jan-2003
	- Keith Fulton fixed a bug in csPArray and csRefArray where DeleteAll()
	  would not set the limit to 0.
	- Keith also fixed FindByName() and GetIndexByName() in
	  csRefArrayObject when the name of the object was NULL.
	- Fixed a bug in csGrowingArray where DeleteAll() would not set
	  the limit to 0.
	- Added csPDelArray. This is similar to csPArray but it will
	  delete elements that are removed from the array.
	- Replaced all occurrences of CS_DECLARE_TYPED_VECTOR with
	  csPDelArray.
	- Removed the CS_DECLARE_TYPED_VECTOR defines.
	- Removed the CS_DECLARE_TYPED_IBASE_VECTOR defines.
	- Changed the return of csRefArray<T>::Pop() from csRef<T> to
	  csPtr<T>. This is a lot safer since you can assign a csRef<T>
	  to a normal pointer and that error isn't detected by a compiler.
	  But you cannot assign a csPtr<T> to a normal pointer. You are
	  forced to use a csRef<T> then.
	- Fixed mdltool to use a csRef<T> to catch the Pop().
	- Fixed compile error in thing plugin (curve templates). Put the
	  DecRef() back in since it is needed. It will now work correctly.
	- csMovable now uses a csRefArray for the listeners. Previously
	  it wouldn't do that with potentially bad results (i.e. it would
	  keep no refs to the listeners).
	- Fixed the documentation on typed vectors and added documentation
	  for all new templated arrays.
	- Got a fix from res so that the console on Win32 works again
	  (in debug mode).
	- Fixed a bad bug in the OpenGL renderer (wrong usage of
	  csGrowingArray) which could cause severe crashes when using
	  large triangle meshes.
	- Andreas Busch modified the documentation for map2cs and texmap
	  from old syntax to XML.
	- Added InsertSorted() and FindSortedKey() to csPArray and
	  csPDelArray. Fixed motion plugin with that.
13-Jan-2003
	- res did the following:
	    - Fixed 'entry point not found' for MSVC6/ExtMemDebug config.
	    - Reverted commit of my 'personal' csall.dsw.
	- Philip Wyett fixed MSVC templates.
	- Steven Geens fixed msmodel.cpp so that a 0,0,0 normal is not used.
	- Andreas Busch modified meshobj documents from old syntax to XML.
	- res did the following:
	    - Re-added appgui MSVC template. The difference is just in
	      Release buils; creates a GUI subsystem app instead of a
	      binary app.
	    - Changed way console/GUI subsystem apps are detected.
	    - Hack: console window for GUI apps is kept open when command
	      line -help is wanted.
	    - Milk2spr: ALLOC_STACK_ARRAY instead of GCC-style stack
	      alloc.
	    - Walktest: csInitializer::DestroyApplication() inserted after
	      cmd line help (required so console window is kept open after
	      help).
	    - Commented out a DecRef() which seemed to cause a crash in
	      csThingObjectType::FindCurveTemplate().
	- Keith Fulton did the following:
	    - Fixed bug in DeleteAll of csPArray and csRefArray which
	      prevented the freed vector from being realloc'd if the array
	      was used again.
	    - Fixed crash on unnamed objects in csRefArrayObject.
	- Further work on XML doc.
	- Added support for <key> in mesh factories and collections.
	- Enhanced the new XML document a lot. Also some other smaller
	  documentation fixes.
	- Renamed csPtrArray to csPArray because csPtrArray may confuse
	  people into thinking it stores csPtr instances.
	- Added csRefArrayObject. This is a templated subclass of csRefArray
	  which is intended for objects that implement iBase and have
	  a QueryObject() function. It adds functionality to look for an
	  object by name (FindByName() and GetIndexByName()). Eventually it
	  is designed to replace CS_DECLARE_OBJECT_VECTOR.
	- Added PushSmart() to csPArray and csRefArray.
	- Removed all usages of CS_DECLARE_OBJECT_VECTOR in CS. Consequently
	  removed that macro.
	- Added QueryObject() to iSharedVariable.
	- CS_DECLARE_OBJECT_VECTOR_NOREF was not used in CS so I removed it.
	- Replaced usage of CS_DECLARE_RESTRICTED_ACCESS_OBJECT_VECTOR with
	  csRefArrayObject<T> and consequently removed the vector.
	- Removed the now unused csNamedObjectVector.
	- Thing plugin now uses csRefArrayObject for curve templates and
	  planes instead of csNamedObjVector.
	- Ode dynamics plugin now uses csRefArrayObject instead of
	  csNamedObjVector.
	- Iso engine uses csRefArray instead of csNamedObjVector.
	- Removed csNamedObjVector.
	- Fixed a small bug in the Insert() function of csRefArray and csPArray.
	- Added csGrowingArray. This will be a replacement for
	  CS_DECLARE_GROWING_ARRAY. csGrowingArray is only for objects that
	  don't require constructors and not for pointers (for pointers use
	  csPArray or csRefArray).
	- Replaced all occurrences of CS_DECLARE_GROWING_ARRAY with
	  csGrowingArray. Consequently removed the GROWING ARRAY macros.
	- Andreas Busch modified the documentation for all meshobjects
	  from old syntax to XML. The thing documentation needs a big
	  review.
	- Eric Sunshine augmented the configure script to emit
	  CS_UNIX_PLUGIN_REQUIRES_MAIN to volatile.h for Unix platforms.  Note
	  that it emits this based upon the broad assumption that Unix
	  platforms will require it.  In the future, we need to perform a real
	  check.
	- Eric Sunshine repaired overfull hbox warnings reported by TeX in
	  xmlfmt.txi.
12-Jan-2003
	- Steven Geens reports:
	  milk2spr now uses the normals given by milkshape.
	  Because CS only allows one normal per vertex the amount of
	  vertices, I had to add multiple vertices with same coordinates.
	  The amount of vertices is nearly tripled.
	  This results in much larger model files.
	- Andreas Busch modified documents from old syntax to XML.
	- Started work on new map format document.
	- Eric Sunshine silenced some warning messages from ActiveState Perl
	  during configuration process.
	- Steven Geens made milk2spr add normals to the vertices.
	- Andreas Busch modified the documentation for spr2d/spr3d/cal2cs
	  from old syntax to XML.
	- Eric Sunshine fixed some Texinfo mark-up errors and eliminated a
	  number of overfull and underfull hbox warnings reported by TeX.
11-Jan-2003
	- Keith Fulton added GetReverseAction() to get whether the current
	  action is operating in reverse or not.
	- res did the following:
	    - Memdebug.cpp compiles again on MSVC.
	    - MSVC6 projects now have 'ExtensiveMemDebug' configuration as
	      well.
	    - Added facility to msvcgen to support DLL delay loading.
	    - JNG plugin now checks first 8 bytes of the supplied data for
	      the MNG/JNG sig before invoking libmng.
	    - Some comments about delay loading to MSVC templates.
	- Fixed a problem in genmesh where
	  iObjectModel->GetPolygonMeshColldet() was not returning the
	  polygon mesh implementation of the object.
	- Also fixed Doxygen comments in iPolygonMesh for the two new
	  methods (deformation).
	- Fixed the unit tester in csgeom for the new methods.
	- Fixed the rapid plugin for the new methods.
	- Fixed various outdated information throughout the documentation.
	  Still a lot of work to do however. Some of the modifications I did:
	    - Removed all mention of 8-bit display support since CS
	      no longer supports that.
	    - Modified all map file examples from old syntax to XML.
	    - Used csRef where appropriate.
10-Jan-2003
	- Charlls Al'Quarra started better indenting of cloth plugins.
	- Charlls also added 2 methods to iPolygonMesh:
	    virtual bool IsDeformable () const = 0;
	    virtual uint32 GetChangeNumber() const = 0;
	- Philip Wyett did the following:
	    - Fixed clothobj.cpp - No more comment as this is just not
	      paying attention!
	    - Changed lib MSVC links with from png.lib to libpng.lib.
	    - Updated docs to reflect a new versions of msvc_libs.
	    - Fixed xwindow.cpp.
	- Made the calling of the movable callbacks safe so that they now
	  can delete themselves from the movable. This basically amounts
	  to walking the callback list in reverse order.
	- Changed the loops in all iLightCallback functions to go in reverse
	  order instead of the solution that is now used.
	- Added iLight parameter to the functions in iLightCallback. That
	  way you can use the same callback instance for listening to
	  multiple lights at once.
	- Added iObjectWatcher interface. This is a new system so that you
	  can easily watch a number of objects at the same time. Currently
	  this system supports lights and movables.
	- Added iEngine->CreateObjectWatcher(). This will create an empty
	  object watcher for your own personal use.
	- Added csPtrArray. This is a templated array similar to csRefArray.
	  The main difference is that no reference counting is used.
	  The difference with csVector is that csPtrArray is type-safe.
9-Jan-2003
	- Fixed a bug in the iLight version of IsDynamic(). This caused
	  pseudo-dynamic lights to be broken since the recent move of thing
	  outside the engine since that forced the system to use iLight
	  instead of csLight.
	- Fixed a bug in the genmesh object. It would potentially write
	  outside array bounds if the number of vertices in the factory
	  changed after objects made from that factory were being used.
	  Now the objects will constantly check if the factory is still ok.
	- Keith Fulton did the following:
	    - Added SetOverrideAction, which allows the sprite to run a
	      named animation one time, then auto-reverts back to
	      whatever action was going on before.
	    - Also added SetSingleStepAction, which forces the frame
	      advancing to never skip key frames no matter how slow the
	      CS framerate is. This feature already existed, but it was
	      using the looping flag as the flag on when to single-step
	      the anim also, which is wrong.
	    - Added another menu of Actions to viewmesh to view anims
	      usign SetOverrideAction, which allows the sprite to run
	      a named animation one time, then auto-reverts back to
	      whatever action was going on before.
	- res changed param 'type' to 'value' in
	  iDocumentNode::GetNode[s].
	- res changed configuration name "ExtensiveDebug" to
	  "ExtensiveMemDebug".
	- Philip Wyett fixed iso engine and viewmesh.
	- Charlls Al'Quarra added GetBitArray() to csBitArray to get the
	  full array so specialized (sequential) manipulations/reading
	  can be done without the overhead of calling for individual bits.
8-Jan-2003
	- res did the following:
	    - Moved shellstuff.h from include/cssys/win32 to
	      libs/cssys/win32.
	    - Put #ifndef around #define CSIDL_PROGRAM_FILES.
	    - BMP plugin can now read/write 32bit w/ alpha files.
	    - INC.SYS_CSSYS makefile var.
	- Philip Wyett did the following:
	    - Removed shellstuff.h.
	- Paul Garceau did the following:
	    - Eliminated CFLAGS.INCLUDE in win32gcc.mak.
	      Moved /directx -I references to ddraw.mak, ddraw8.mak.
	    - Relocate -I /directx references for Win32gcc (Mingw-Msys).
	- Peter Amstutz fixed negative array index crash in awsgbl.cpp.
	- Committed a 'backwards compatibility' set from Rene Jager for the
	  Python plugin and SWIG 1.1. The new cspython plugin is built when
	  USE_NEW_CSPYTHON_PLUGIN=yes during make. It is now put in
	  mk/local.mak.
	- Fixed frustvis/dynavis for completely flat objects.
	- Keith Fulton fixed a bug in frame anim of sprite3d's when going
	  from a time delayed frame to a space displacement frame.
	- Fixed a memory leak in the light callbacks (for color changes)
	  that were added some time ago to the lighting class. The code
	  used a csVector to store the light callbacks but csVector doesn't
	  automatically DecRef() the contents when destructed. Now uses
	  csRefArray instead.
	- Added OnPositionChange() to iLightCallback. This is called when
	  the position of a light changes.
	- Added OnSectorChange() to iLightCallback. This is called when
	  the sector of a light changes.
	- Added OnRadiusChange() to iLightCallback. This is called when
	  the radius of a light changes.
	- Added GetLightNumber() to iLight. This can be used to check if
	  a light has changed position, color, sector, or radius since last
	  time you called that function.
	- Bounding box was not correctly updated after doing HardTransform() on
	  a 3D sprite.
	- Added OnDestroy() to iLightCallback.
	- The comments in iLightCallback indicated that it was safe to
	  remove the callback from inside the callback itself. But this
	  was actually not true. Changed the loops in light code to make
	  it really safe.
7-Jan-2003
	- Matthias Braun added macos/x rules to jam build.
	- Philip Wyett did the following:
	    - Fixed caltocs so it compiles again.
	    - Manual update of MSVC 6 project files.
	- Keith Fulton added SetReverseAction to the Sprite3d so that
	  they can walk backwards without defining a new action.  Call this
	  just after setting the action.  Also he made it reset to forward
	  each time SetAction is called, so the old behavior will still
	  work normally, except when the the programmer explicitly tells
	  it to go backwards.
	- Eric Sunshine made another patch to the configure script to allow it
	  to work with Jorrit's eerie hybrid installation on Windows where he
	  has mismatched headers.  Now ensures that int32 is known prior to the
	  windows.h test.
	- Eric Sunshine added the new makefile variable MSVC.MAKE.FLAGS to
	  CS/mk/msvcgen/required.mak and msvcgen.mak.  This variable allows one
	  to give additional options to the child "make" invocation during the
	  synthesis process.  It is most useful for providing additional make
	  variable definitions.
	- Eric Sunshine set MSVC.MAKE.FLAGS in required.mak to define HAS_CAL3D
	  to "yes".  This will allow the synthesis process to build the
	  `caltocs' application.
	- Eric Sunshine updated configure.ac so that it normalizes the value of
	  CS_PLATFORM_NAME which is emitted to volatile.h.  This is necesary
	  because that value is used to make selections from vfs.cfg and
	  joystick.cfg.
	- Eric Sunshine updated vfs.cfg and joystick.cfg to agree with the new
	  normalized CS_PLATFORM_NAME.
	- Eric Sunshine updated NASM URL in user manual.
	- Eric Sunshine updated aged entries in Contributors section of user
	  manual.
6-Jan-2003
	- res did the following:
	    - Removed ChangeDisplaySettings() from win32.cpp.
	    - Added code to glwin32 canvas to prevent unnecessary mode
	      switches, as inspired by Ben Thomas
	      <ben.thomas@wickedstudios.com>. DirectX seems to be smart
	      enough to avoid them on its own.
	    - Inserted ALLOC_STACK_ARRAY so python compiles on MSVC.
	- Wouter Wijngaards did the following:
	    - Possible fix for a bug (reported by Michael O'Shea). The
	      haze mesh object would cause a stack overflow in the
	      recursive DrawPolyAdapt routine. Fix is to clamp the max
	      recursion depth, since I can't reproduce.
	- Norman Kramer did the following:
	    - Made system includes instead of project includes (jng plugin)
	      ( <> vs. "" ) now "make dep" shuts up about missing zlib.h
	      and libmng.h.
	- Fixed a stupid bug in Dynavis. Dynavis wasn't correctly updating
	  the kdtree when objects moved. The reason was that UpdateObjects()
	  wasn't called when needed. Frustvis didn't suffer from this
	  problem.
	- Eric Sunshine added an Autoconf `configure' script to CS.  This is
	  now the preferred way to configure the project.  The old
	  configuration mechanism ("make platform") will continue to exist in
	  parallel with the new mechanism for a short time as a fallback in
	  case some problems are detected with the new mechanism.
	- Eric Sunshine made the following changes to the configure script:
	    - Added work around to OpenGL check for Jorrit's bizarre hybrid
	      installation on Windows where he has mismatched headers.
	    - Worked around issue reported by Wouter with g++ 3.2 where
	      compiler complained about extra -I/usr/local/include flag
	      (something about order of system search path order being
	      changed).
	    - No longer refreshes makefile cache twice if the cache already
	      existed prior to run of configure (and if config.mak changed).
	    - No longer tries to be smart about locating makedep in the CS
	      directory.  This caused problems because the path was not
	      properly recorded and would fail if the user did not have "." in
	      PATH.
	- Eric Sunshine updated the "build" instructions in the user manual to
	  mention "configure" rather than "make platform".
	- Eric Sunshine added libmng to "external libraries" section of user
	  manual.
	- Eric Sunshine updated jobber.pl so that it no longer uses the
	  old-style "make linux" in preparation for its processing.
	- Eric Sunshine made the following changes to the configure script:
	    - Fixed bug: Failed to emit X11.AVAILABLE makefile property when
	      X11 was available.
	    - Fixed bug: Was emitting X_CFLAGS, X_LIBS, X_PRE_LIBS, and
	      X_EXTRA_LIBS makefile properties only if VideoMode extensions
	      were available, but should have been emitting them whenever X11
	      was present.
	    - The -I/usr/local/include viability test is now performed only if
	      /usr/local/include is present on the build host.
5-Jan-2003
	- Andreas Busch did some minor typographical corrections on
	  md32spr.txi.
	- Applied a patch from Rene Jager (renej.frog@yucom.be) which does
	  the following:
	    - Added include/ivaria/cspace.i which is a SWIG 1.3 version of
	      include/ivaria/cs.i (which is for SWIG 1.1).
	    - Made the Python plugin SWIG 1.3 compatible.
	    - A few fixes on the OPCODE plugin so that it works a lot better
	      now (almost as good as the RAPID plugin).
4-Jan-2003
	- Andreas Busch removed duplicate #include lines from various
	  source files and correcty named the multiple-include-protection
	  define in shadervar.h.
3-Jan-2003
	- Philip Wyett did the following:
	    - Added forceable build settings for the following cpu/arch
	      - Athlon XP, Pentium 3, Pentium 4. Note, compiling for
	      these specific platforms make your binaries non-backward
	      compatible.
	    - Removed allocations to MNG.LFLAGS in jng makefile, which
	      cause recursion error.
	- Eric Sunshine made the following changes:
	    - Configuration phase now detects libmng automatically.  Added
	      bin/chkmng.sh.
	    - Configuration phase now determines proper linker flags for
	      sockets.  Removed the now obsolete LIBS.SOCKET.SYSTEM makefile
	      variable.  Added chksockt.sh.  Removed chkheadr.sh.
	    - The following modules are now enabled automatically by user.mak
	      if their prerequisite facilities are available:
		- filesys/vfs
		- video/renderer/opengl
		- video/loader/png
		- video/loader/jpg
		- video/loader/mng
		- net/driver/socket
		- net/driver/ensocket
		- cscript/cspython
	    - Eliminated the unused SOUND_LIBS makefile variable.
	    - Changed the SVGALIB detection script so that it no longer
	      enables the svgalib canvas.  It is now the makefile's
	      responsibility to enable this plugin when the SVGA.AVAILABLE
	      variable is set to "yes".
	    - Added new CS_HAS_SVGALIB macro to volatile.h.
	    - Removed all dependence upon OS_LINUX, OS_BSD, OS_SOLARIS,
	      OS_BE and __NetBSD__ from the project.
2-Jan-2003
	- Eric Sunshine changed the OpenGL-related configuration script and
	  makefiles so that it is now the responsibility of the configuration
	  script to figure out the appropriate compiler and linker flags,
	  rather than having this complicated logic replicated in every
	  OpenGL-related makefile.  chkogl.sh now publishes the makefile
	  variables GL.AVAILABLE, GL.CFLAGS, and GL.LFLAGS; it no longer
	  publishes OPENGL_PATH.
	- Eric Sunshine made the following changes:
	    - The chkperl.sh configuration script is no longer responsible for
	      creating the glue file csperlxs.c.  This is now the
	      responsibility of the csperl5.mak makefile.  A happy side-effect
	      of this shift of responsibility is that the transient csperlxs.c
	      is now created within the CS/out directory hierarchy, rather than
	      within CS/include/cssys where it did not belong.
	    - Removed the ugly hack from cs.mak which was responsible for
	      cleaning up csperlxs.c.  This is no longer needed since
	      csperlxs.c is only now created when the csperl5 module is enabled
	      and only when required; rather than being created by the project
	      configuration phase.
	    - Added the new makefile variable OUTDERIVED to cs.mak.  This
	      variable defines the location where transient derived sources
	      should be placed.  For example, static.mak places cslibref.cpp in
	      OUTDERIVED, and csperl5.mak places csperlxs.c there, as well.
1-Jan-2003
	- Philip Wyett eliminated a uninitialized variable warning in
	  prsseq.cpp, under optimize build.
	- Eric Sunshine merged cygwin.mak into win32gcc.mak.  Now there is a
	  single makefile configuration target for Cygwin and Mingw users.

Please see "history.old" for less recent historical entries.
