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.

22-Jun-2004
	- Jorrit corrected the fps timings for csbench to use a constant.
	- Eric Sunshine augmented jamtemplate so that it creates a
	  well-commented full skeleton application object based upon
	  csApplicationFramework and csBaseEventHandler.  The skeleton even
	  properly instructs SCF to also scan for CEL plugins if the user chose
	  to enable CEL support.
21-Jun-2004
	- Jorrit attempted to add new tests to csbench to try out a shader
	  with various techniques. Not sure if it works correctly yet though.
	  Needs more testing.
	- res fixed the shader technique test in csbench. A wrong "shader type"
	  parameter was passed to iMaterial->SetShader().
	- Jorrit attempted to extend csbench to also test the light_bumpmap.xml
	  shader. For this I had to create a new renderloop in code. The
	  visual effects seems weird so I'm not sure it is actually working.
	- res changed csbench to attach a normal map to the material used for
	  testing.
20-Jun-2004
	- Christian Bayle adapted debian scripts to the new configuration
	  options
	- Rhad added a radius_changed flag to csParticlesObject which allows
	  radius changes to have an effect without recreating the system.
	- Eric Sunshine made some small corrections to the Plugin HOWTO.
	- Luca added the support to replace a material on a polygon of a 
	  thing mesh object. Actually to use this new support, it is needed
	  to define the symbol __USE_MATERIALS_REPLACEMENT__ at the top of 
	  the file thing.cpp . This has been done to prevent any difficulty
	  due to this change of the source code of the thing mesh plugin. In
	  the future (after more testing and devs feedback) the symbol will
	  be removed and the new source code will be the "default" one. This
	  change has been tested successfully with OR and NR anyway.
	- Luca modified the AWS manager so that when the focus belongs to a
	  hidden component, the keyboard events are not forwarded to it.
	- Jorrit extended iShaderCompiler with a function to get all
	  priorities that a technique supports. Also added a function
	  to force compiling of a specific priority technique in a shader.
	  These new functions will be used by csbench so that it can try
	  out different techniques of a shader.
	- Keith added SetDefaultIdleAnim to sprcal3d, which allows multiple
	  idle anims to be selected from by the caller for use in
	  SetVelocity(0) calls.
19-Jun-2004
	- Rhad fixed a typo in the ode and simple physics plugins for particles
	  that was swapping the green and blue components of constant colors.
18-Jun-2004
	- Eric Sunshine added a bunch of missing 'const' directives to csSpline
	  and its subclasses.
	- Eric Sunshined fixed bug in csGetPluginPaths()
	  (csutil/generic/pluginpaths.cpp).  "jam install" places plugin
	  modules in $prefix/lib/crystal, but csGetPluginPaths() was never
	  referencing that location, so SCF would not find those installed
	  plugins.
	- res fixed csdemo after the csSpline constness changes.
	- Jorrit added a new 'csbench' application. The purpose of this
	  application is to collect benchmark and usability statistics about
	  the NR OpenGL renderer. To do that it will create a simple room with
	  a high poly object and then it will render that room for five seconds
	  with various settings for the NR GL renderer. For every run it
	  will print out the performance and also make a screenshot. All
	  this information is collected in 'csbench_report.zip'.
	  This application is not finished yet. The basic framework is there
	  and it currently also does two tests already but more tests will
	  follow.
	- Jorrit added a new iGraphics3D->SetOption() so that you can set
	  renderer specific options from within the application. Implemented
	  the "StencilThreshold" option for the NR GL renderer.
	- res fixed a compile error in the glwin32 driver detection on some 
	  older MinGW versions.
17-Jun-2004
	- Jorrit changed g3d->ClosePortal() to also have a new use_zfill_portal
	  flag. When this flag is set the renderer will zfill the portal area.
	  Only the NR renderers do this. With OR it is the engine itself
	  that will zfill the portal area so the OR renderers ignore this
	  flag.
	- Jorrit fixed a compilation error with OR GL renderer.
	- Jorrit fixed several issues with the rotating door in flarge so that
	  it now works perfectly in OR (these issues have to do with
	  setting up the correct render priorities and zmode flags).
	- Jorrit fixed a bug in the NR OpenGL clipper which prevented
	  z-plane clipping from working correctly in case the plane clipper
	  was not selected for the portal. This fixes the rotating door in
	  flarge for NR too.
	- Jorrit fixed 'flame' command in walktest so that it puts the
	  flame particle system at the correct position.
	- res made the following changes:
	    - Worked around non-working "inverted fog" (used by the fixed 
	      terrain shaders) on certain GeForce FX cards.
	    - Improved memory usage of bindoc a bit.
	    - Fixed 'int' data handling in bindoc.
	    - Changed csMemFile to not use realloc() to work around problems
	      on VC.
	    - csConfigDocumentIterator now properly handles a 0 subsection.
	- aarobber added an anonymous union to csVector3 to allow for easier
	  accessing/storing of float* data to a csVector3
	- aarobber reverted a wrongly committed r3dopengl.cfg
	- res augmented the glwin32 canvas to also determine the version of 
	  the GL driver DLL. This version can be used for comparisons in the
	  driver database.
	- aarobber extended csSpline to allow for specifying/accessing of data
	  per control point and not just per dimension.
16-Jun-2004
	- Jorrit cleaned up stencil clipping in the NR/OpenGL renderer.
	  Now mask 128 is used for both stencil clipping and floating portals
	  and mask 127 is used for stencil shadows. Also when a floating
	  portal is active normal stencil clipping is no longer used.
	  This fixes several bugs with floating portals (not enough to actually
	  fix the rotating door in flarge but in simpler cases it is working
	  very well now). Note that this is not finished yet. If there is
	  another portal (floating or not) behind the floating portal then that
	  other portal clip area is currently fully ignored. This is something
	  we have to fix too.
        - Matze made the following changes:
            - Fixed some warnings in csHashMap::Iterator.
            - Did a blind fix to csString::RTrim. It was obviously wrong and
              icc reported that. Didn't test it though.
            - Fixed some more pointless consts in tinyxml code.
            - Fixed warnings in csProcCaps.
            - Some more small warning fixes for icc.
	- Jorrit changed g3d->OpenPortal() so that it is now called for
	  every portal instead of only for floating portals. There is a new
	  'floating' parameter which indicates if the portal floats or not.
15-Jun-2004
	- Jorrit fixed two serious problems with the NR floating portals
	  implementations (csGLGraphics3D::SetupClipPortals()):
	    - First SetupClipPortals() (which is being called by DrawMesh())
	      itself calls DrawMesh() which can cause bad things to happen.
	    - Second, SetupClipPortals() simply ignored the portal/polygon
	      normal for setting up the stencil. This means the z-buffer
	      contents of the portal would be incorrect.
	  Unfortunatelly both fixes don't yet solve floating portals completely
	  with NR. Have to investigate further.
	- Jorrit applied a patch to walktest from Pascal Kirchdorfer
	  (kirchdorfer@users.sourceforge.net). This patch makes sure walktest
	  again correctly resizes when the window is resized. This was broken
	  when this resizing functionality was added to csView by Pascal.
	- Jorrit added a missing clipportal_dirty = true to the NR GL renderer
	  BeginDraw() implementation.
	- Jorrit added dumping of material and textures to bugplug
	  'dumpeng' command.
	- Jorrit extended iLoader->LoadLibraryFile() so that it now also
	  has a checkDupes parameter (default false). Also the checkdupes
	  parameter from LoadMapFile() is passed along to LoadLibraryFile()
	  if the map contains 'library' statements.
	- Jorrit added a new attribute 'checkdupes' to 'library'.  So, if you
	  say:
	    <library checkdupes="true">somelib.lib</library>
	  Then during loading of the library it will check for duplicate
	  objects (factories, textures, materials, ...) and don't load them
	  if they are already loaded in the engine.
	- res added iterator support to csConfigDocument.
	- res added an assignment operator to csStrKey.
	- res fixed a crash in the glwin32 canvas due a non-opened ext manager.
14-Jun-2004
	- Jorrit implemented correct static lighting for static lod. In case
	  of casting shadows, the lowest detail object that has a shadow
	  caster will be used. In case of receiving shadows all children
	  will get the shadows.
	- res made some small comment changes in ivideo/shader/shader.h and
	  csutil/csuctransform.h.
	- Remi Bonnet added DeleteElement() and NextNoAdvance() to csHash.
	- res augmented the cslibs configure check to pass a "--compiler" flag
	  along to cslibs-config. This will be utilized by the next
	  cs-win32libs version to choose correct compiler-specific libs.
	- res updated the docs for a new cs-win32libs release.
	- res (with help from Manolo Padron Martinez) fixed a crash with 
	  terrainf that seemed to occur on certain NV hardware.
13-Jun-2004
	- res changed the Win32 thread error reporting to be less 
	  macro-centric.
	- Rhad fixed use_manual_colors in genmeshes by adding handling to
	  csGenmeshMeshObject::PreGetShaderVariableValues.
	- Rhad altered csGenmeshMeshObject::PreGetShaderVariableValues to use
	  the existing renderbuffer if the new data set will still fit inside.
	- res fixed constness support in the GL extension manager.
	- res changed the simple mesh to use some const members.
	- res changed iRenderBuffer->CopyToBuffer() to accept const data.
	- res slightly changed the genmesh color buffer size check to use
	  '!=' instead of '<'.
	- Eric Sunshine upgraded the "Creating an External Application" HOWTO
	  so that it discusses the 'jamtemplate' utility, and so that it
	  discusses MacOS/X in the older Makefile-based section.
	- Eric Sunshine fixed cs-config/Makfile.template and the
	  cs-config/makevar.macosx fragment so that it works for creation of
	  external Makefile-based projects on MacOS/X.  Previously, it was
	  quite broken.  Added cs-config/appwrap.sh, which allows external
	  application Makfiles to create proper Cocoa application wrappers on
	  MacOS/X when using a Makefile-based build.  (This is now documented
	  in the HOWTO.)
12-Jun-2004
	- res made all Win32 platforms, not only VC, use CS' own opendir() etc 
	  functions.
	- res changed CS' Win32 opendir() etc to use native Win32 functions
	  instead of the VC only _findfirst() etc.
	- res fixed VfsNode::FindFiles() to not remove a trailing backslash
	  from drive letters on Win32.
	- Neil Mosafi made a few fixes to the csvosa3dl plugin to make it build
	  on Windows
11-Jun-2004
	- Peter Amstutz added support for setting animation loops on
	  models to the csvosa3dl plugin
	- Peter Amstutz added code to support the iMozilla plugin in
	  csvosa3dl (but #ifdef'd out since the iMozilla plugin has
	  not been comitted yet).
10-Jun-2004
	- res fixed the OR renderers for the recent DrawSimpleMesh() changes.
	- res fixed the Fixed FP plugin to reset the multitexturing setup on
	  deactivation.
	- res fixed the software shader plugin. They don't really do anything,
	  but even failed that. Instead of the SW shaders, a multipass 
	  lighting shader, intended for GL only, was used, causing suboptimal
	  quality.
9-Jun-2004
	- Jorrit fixed a bug in the engine where it would ignore (and not
	  cache) lighting generated for hierarchical objects. This would
	  make the door too dark because it is a child object.
	- Jorrit fixed a bug with a hardcoded alpha render priority for
	  explosions in walktest. This could cause particles to be
	  rendered after other objects sometimes.
	- Jorrit fixed the OR OpenPortal() command (for floating portals).
	  The function to do a z-fill of the buffer (to clear the z-buffer
	  for geometry in the portal) was backface culled and thus didn't
	  do anything.
	- Jorrit fixed a bug in the NR OpenGL renderer. It would sometimes
	  call glCullFace() which would bypass the statecache.
	- Jorrit attempted to fix the NR OpenPortals() command by trying
	  to use better ways to fill the portal but it didn't seem to have
	  worked very well.
	- res added a member to csSimpleRenderMesh containing the 
	  transformation.
	- res augmented DrawSimpleMesh() with a 'flags' parameter.
	- res added a DrawSimpleMesh() flag to specify coordinates in screen
	  space.
	- res fixed bug 762021, 'Win32: "Sticky" main window after app quit',
	  by adding DestroyWindow() calls to the Win32 canvases Close().
8-Jun-2004
	- Jorrit fixed a bug in the FindByNameWithChild() function in the
	  engine. This function would crash if there were unnamed meshes
	  in the map file.
	- Jorrit discovered that the csMath3::Area3() function was wrong
	  in CS. It didn't actually calculate the area. Because changing
	  this function is pretty dangerous I decided to make two new
	  functions:
	    csMath3::DoubleArea3(): which will calculate the real
	    double area (but not signed) with a working formula.
	    csMath3::Direction3(): which will return something <0 or
	    >0 depending on the direction of the triangle.
	- Jorrit renamed csPoly3D::GetSignedArea() to GetArea().
	- Neil Mosafi changed odedynam's default move callback to not call
	  UpdateMove() unless something has actually changed.
	- Eric Sunshine fixed 2-Jun-2004 bug in msvcgen.jam which caused
	  --accept and --reject patterns to be ignored by msvcgen.pl.
	- Eric Sunshine removed the `eventtest' program.  Although useful when
	  making low-level modifications to the event system, it is not
	  otherwise especially meaningful to have around.  To make it easy to
	  recover the program if revival is warranted or if testing needs to be
	  done, it has been tagged in CVS as EVENTTEST_OBSOLETE.
	- Eric Sunshine fixed bug in csExpandPath() for Windows
	  (csutil/win32/winsyspath.cpp) where it neglected to convert
	  Cygwin-format paths to Windows format before invoking the low-level
	  Win32 path manipulation functions on the path.  Hopefully, this will
	  resolve problem where csGetConfigPath() (csutil/win32/instpath.cpp)
	  failed to respect CRYSTAL environment variable under CYGWIN.
	- res did the following changes for map2cs:
	    - Fixed map2cs to use csStrings instead of fixed-size buffers for
	      map parsing. map2cs can now handle much longer tokens.
	    - Added a sanity to entity property parsing to detect malformed
	      maps.
	    - Added a hack to the map2cs parser to correctly return "" tokens. 
	    - Fixed map2cs to not emit an empty "_defaultsky" thing if no
	      skybox was specified.
7-Jun-2004
	- Jorrit added an assignement operator to csHashMapReversible.  This
	  actually fixes the crash at exit bug for some of the CSWS apps.
	- Jorrit also added fixed the csEvent assignement operator so that
	  it copies the 'attributes' field too.
	- Jorrit enhanced the build instructions so they invite people to try
	  out the new renderer first.
	- Jorrit updated the FAQ. Removed a few outdated entries, fixed a
	  few wrong statements, and clarified a few entries.
	- Jorrit updated the wrong link to the related projects page in
	  the documentation.
	- Jorrit updated the features list in the documentation.
	- Jorrit updated the collision detection howto to talk more about
	  OPCODE plugin and also changed this in some other parts of the
	  documentation.
	- Jorrit did some additional updates to the documentation:
	    - Updated link to the sunsite data directory from cs096 to cs098.
	    - Updated feedback chapter a bit.
	- Jorrit removed the terrbig terrain engine. It is old, obsolete
	  and unmaintained. It is better to use the NR terrain engines in any
	  case. Before removing I tagged with TERRBIG_OBSOLETE.
	  Note that tbconv and tbtut are also removed.
	- Peter Amstutz removed #ifndef CS_USE_NEW_RENDERER from
	  sprbuild.cpp which caused models loaded using the crossbuilder
	  plugin to not work in NR!
	- Jorrit fixed the parsing of <portaltraversal> so that you can now
	  also safely say <portaltraversal/> instead of
	  <portaltraversal>yes</portaltraversal>. Same for <zoffset/>.
	  Fixed a few other cases in CS where synldr->ParseBool() was used
	  wrong (parsing of heightmap generation, <alwaysanimate/> for
	  procedural textures, <persistent/> for render steps, and terrfunc
	  parser).
	- Jorrit added two entries to the FAQ.
	- res fixed halos for OR (and also a mem leak related to NR halos).
	- res removed the bumpmap stuff from csgfx, which was only used by the
	  (deprecated some time ago) bumptest app.
	- Eric Sunshine removed hard-coded version number from map2cs in
	  several locations; replaced with CS_VERSION.
	- Eric Sunshine fixed a lot of Texinfo errors and warnings in material
	  recently added to the CS manual.
	- Neil Mosafi added GetObject3Ds() function to iVosSector.  This
	  returns all the loaded objects in the sector.
6-Jun-2004
	- Jorrit modified the Jamfile so that the isotest application
	  is only build with new renderer.
	- res made the following changes:
	    - Some places in GL where the COMBINE texenv mode was used also
	      check for the presence of the COMBINE ext (and not only the
	      multitexturing ext.)
	    - For Cg FPs, you can now also bind render buffers to a texture
	      coordinates by specifying "texture coordinate <Texture parameter
	      name>" as the destination.
	    - Augmented the Cg plugin with a facility to dump out debug info of
	      the used programs. Can be enabled by enabling the
	      "Video.OpenGL.Shader.Cg.DebugDump" config setting.
	- res disabled static lighting for the mesh in waterdemo, added a
	  missing FinishDraw() call and made some code cleanups.
	- Eric Sunshine fixed the Jamfile modfications by Jorrit so that they
	  work correctly with msvcgen project generation.
	- Jorrit modified the parser so that you can now nest libraries
	  (i.e. include a library from another library).
	- res added csBitArray::AreSomeBitsSet().
	- res changed the Cg VP part to have a "special" path for NV VPs where
	  the compiled VP is changed to have input matrices aligned on 
	  4-register boundaries (as needed by TrackMatrixNV()). Can be turned
	  off by disabling the "Video.OpenGL.Shader.Cg.NvVpRealign" config
	  setting.
	- res added glMatrixMode to the state cache.
	- res fixed the Fixed FP to better work when no combine ext is present.
	  In this case, a fixed FP will only refuse to load if texture layers
	  are used.
	- res fixed NR halos.
	- res fixed msvcgen to properly handle template variable assignments
	  with '='s (e.g. --set=%cflags%='/D foo=bar').
	- Neil Mosafi changed the csvosa3dl plugin
	    - Fixed some confusing log messages
	    - Plugin-wide relight system which should _almost_ work perfectly
	- MatzeB reports:
	  Replaced crystal spaces VERY poor stringhashfunction with something
	  better (D.J. Bernstein algo). It's also totally unnecessary that the
	  CS hashmap only uses prime numbers has hashtablesize. That is only
	  necessary if you have a poor hash function as we had before. A more
	  efficient way is to make the hashtable use size of 2^n, this allows
	  for efficient & mask for clipping hashfunction to hasharea and allows
	  for efficient lazy algorithms for dynamically growing hashtables.
	  If I just had time to implement this stuff...
5-Jun-2004
	- res made the following changes:
	    - Added the *f versions of floor and ceil to csdef.h.
	    - csBox2 can now be constructed from a csRect.
	    - Added a method to iClipper2D to return whether the clipper is a
	      simple box or a poly clipper.
	    - Changed bugplug to also clear the Z buffer when frame buffer
	      clearing is enabled.
	    - Made csSectorIt in the engine pooled.
	    - Throughout the GL canvas and renderer(s) (primarily NR, with
	      some necessary OR fixes), changes were made to reduce the state
	      switches needed.
	    - The pixel write mask and vertex data array client states are now
	      cached by the GL state cache.
	    - The GL NR clipper now also sets a 2D clipping rect (effectively
	      a scissor rect) when using stencil clipping.
	    - Setting the "stencil threshold" to -1 essentially means "always
	      prefer plane clipping".
	    - Changed the OR to use the GL extension manager, too (instead of
	      the "custom" ext management).
	- Rhad fixed the NV specific vertex program paths for the Cg shader
	  plugin.
	- Neil Mosafi added some more dynamics code to csvosa3dl plugin, and
	  the iVosObject3D interface now exposes it's collider to the user.
4-Jun-2004
        - Andrew Craig removed misplaced return in sprcal3d as reported by
          Ingie from the mailing list.
	- Jorrit finally bit the bullet and removed the iso engine. The old
	  iso engine sources (and loader) are tagged with the ISO_OBSOLETE
	  tag so you can get them back if you want. Note that I did NOT
	  remove the 'isotest' application! Instead the isotest application
	  has been rewritten to use the 3D engine and it 'simulates' isometric
	  view only in the way that the camera moves. It does require new
	  renderer though as it uses stencil shadows.
	- Jorrit added views to the new isotest. You can switch with tab.
	- Peter Amstutz fixed an mistake in an entry in the driver database
	  "Rage128" -> "Rage 128"
	- Jorrit optimized genmesh so that with NR the lighting update
	  routine is only called if the shaders actually need color
	  information. That speeds up levels that use stencil shadows or
	  other shaders that don't require software vertex lighting.
	- Jorrit did a significant optimization in
	  csShaderVariable::SetValue() for matrices. The current
	  implementation would do 'new/delete' all the time and this is
	  VERY bad (especially with MSVC) for performance. Now it only
	  does 'new' if needed.
	- Neil Mosafi added support for a3dl:sphere to the csvosa3dl plugin.
	  Neil Mosafi added support for a3dl:cylinder to the csvosa3dl plugin.
	  It will now automatically load these objects into the engine.
3-Jun-2004
	- Eric Sunshine added MsvcGenVariable rule to msvcgen.jam, which allows
	  clients to create msvcgen %foo%-style template variables on-the-fly.
	  This rule provides access to msvcgen.pl's new --set option.
	- Eric Sunshine completely rewrote documentation for the ExternalLibs
	  rule in flags.jam.  The existing documentation was 100% incorrect and
	  highly misleading.
	- Eric Sunshine augmented jamtemplate/createproject.sh so that it can
	  optionally set up a dependency upon CEL in the generated Autoconf and
	  Jam support files.
	- Jorrit removed CollidePath() from iCollideSystem and instead
	  added that function to csColliderHelper. It is not specific to any
	  CD system so it fits better in csColliderHelper.
	- aarobber added a Clone function to iMeshObject.  None of them are
	  currently implemented and will return 0.
	- Jorrit changed the order of the include directories in Jamfile.in
	  so that $(BUILDTOP) include is used before the global include
	  in CS. That fixes compilation of CS in another build dir.
	- Jorrit started work on updating the isometric engine to NR. The
	  tiles display but there is a problem with scrolling. Also mesh
	  objects don't display yet.
	- aarobber fixed the iMeshObject's Clone function to return a csPtr.
	- aarobber added a Clone function to iMeshObjectFactory.  None of them
	  are currently implemented and will return 0.
	- aarobber implemented csParticlesObject's Clone function.
	- Jorrit fixed bruteblock. It would allocate a color buffer with
	  only room for two components per color instead of three. This
	  would crash in many cases.
	- Jorrit did a small optimization to bruteblock. Instead of getting
	  g3d from the object registry all the time it is now cached
	  in the mesh object.
	- Eric Sunshine fixed msvcgen/workspaces.jam so that librenderercommon
	  appears only in wkstypical, and librender3dcommon appears only in
	  wksnewrenderer.
        - Andrew Craig uncommented out the lock variable for sprcal3d
          animations. It was preventing animations from "locking" on the
          last frame.
2-Jun-2004
	- Jorrit reverted the change from Andres Freund that checks on the
	  presence of <params> in a mesh object. There are cases where
	  <params> doesn't have to be given so this test is invalid.
	- Jorrit fixed a bug in OPCODE where it would ignore meshes that
	  have only one triangle.
	- Jorrit fixed a bug in OPCODE that would cause it to calculate
	  wrong collision in case two transforms different from identity
	  were given.
	- Eric Sunshine added acosf() and asinf() to set of functions faked up
	  when CS_USE_FAKE_MATH_H_FLOAT_FUNCS is defined.  Needed by OPCODE.
	- Jorrit added a warning to the loader when objects are being scaled
	  in the <move>. This is not allowed by CS.
	- res fixed a copy'n'paste error in the DDS loader.
	- Jorrit and MatzeB fixed a bug in OPCODE which only occurs in optimize
	  mode and using X86 processor. The problem is again an aliasing problem
	  between different types on the same memory address. This is not
	  guaranteed to work in C++. This fixes a falling through the floor
	  problem in walktest.
	- Eric Sunshine made the following changes to msvcgen:
	    - Added --set option to msvcgen.pl which allows clients to
	      create their own template interoplation variables. For example,
	      --set=cflags='/D "__CRYSTAL_SPACE__"' creates a variable which
	      can be interpolated into template files as %cflags%.
	    - Eliminated hard-coded knowledge of almost all template variables
	      from msvcgen.pl.  (The only ones still remaining are those which
	      msvcgen.pl creates itself for referencing generated material.)
	      Instead, clients now create, via --set, whichever variables they
	      require.  Consequently, removed the following options and related
	      interpolation variables:
                  --build-root          %buildroot%
                  --cflags              %cflags%
                  --debugcflags         %debugcflags%
                  --debuglflags         %debuglflags%
                  --debuglibrary        %debuglibs%
                  --lflags              %lflags%
                  --library             %libs%
                  --meta-file           %metafile%
                  --name                %name%, %upcasename%
                  --project-extension
                  --project-name        %project%, %makefile%
                  --source-root         %sourceroot%
                  --target              %target%
                  --workspace-extension
	    - Worked around corruption in generated files caused by MSYS
	      shell's insistence upon transmogrifying absolute-path-like
	      command arguments into Windows format pathnames.  For example, /D
	      would be corrupted into something like C:/Path/To/Msys/Root/D.
	      This caused havoc with MSVC compiler and linker options, such as
	      /D, /I, /nologo, etc., which were passed to msvcgen.pl on the
	      command-line.  To side-step this issue, msvcgen.jam now prepends
	      the literal "%null%" to any values passed to msvcgen.pl on the
	      command-line which are likely to trigger this unfortunate MSYS
	      behavior.  msvcgen.pl treats the %null% as just another
	      interpolation variable reference, and replaces it with the null
	      string (since %null% happens to be undefined).
	    - Changed msvcgen.jam so that it no longer passes tuples created
	      with MsvcGenConfig from msvcgen phase 1 to phase 2 via the
	      command-line since these tuples were subject to the same MSYS
	      corruption as the information passed to msvcgen.pl via the
	      command-line.  Instead, MsvcGenConfig tuples are now collected
	      directly by phase 2.
	    - Augmented the MsvcGenConfigFile rule in msvcgen.jam so that it
	      can be invoked multiple times to specify additional configuration
	      files.  Previously, clients were restricted to specifying only a
	      single configuration file.
	    - Added MSVCGEN_VERBOSE option to msvcgen.jam which makes the
	      msvcgen process very verbose when set to 'yes'.  This complements
	      the existing MSVCGEN_SILENT option.
1-Jun-2004
	- Jorrit fixed a bug in the particles loader. The test to see if a
	  factory is ok was wrong.
	- Jorrit removed unneeded copy of transformation from OPCODE plugin.
	- Jorrit fixed collision pair handling in OPCODE plugin. It was
	  assuming that the code using the CD system would call
	  GetCollisionPairs() right after calling Collide() but that
	  assumption is not true. This bugfix fixes a problem with OPCODE
	  and flarge were it would let the camera jump a bit in the main hall.
	- res changed the DDS loader to be more endian-agnostic.
31-May-2004
	- Jorrit added "IncludeDir plugins" back to Jamfile.in (it was removed
	  yesterday).  Otherwise, many video plugins failed to compile.
	- Eric Sunshine removed the ugly "IncludeDir plugins" again from
	  Jamfile.in and fixed the potentially ambiguous #include statements in
	  the various video plugins which were incorrectly referencing files
	  relative to $(TOP)/plugins rather than $(TOP).  (CS/bin/efed.pl to
	  the rescue.)
	- Vincent Knecht updated cs.spec:  Added %files entries for .inc and
	  .fun files in include/csutil/
	- Eric Sunshined applied patch from Bedrich Zaba <frogbride@seznam.cz>
	  (plus minor cleanup by Eric) which addresses the following issues:
	    - Added iSpriteCal3DState::GetAnimationTime(),
	      GetAnimationDuration(), and SetAnimationTime().
	    - Fixed bug: csSpriteCal3DMeshObject destructor failed to remove
	      the vertex buffer manager client it had registered (when
	      configured for old renderer).
	    - Fixed bug: awsCmdButton was mismanaging the reference count of
	      its `caption' member.
	    - Modified AWS manager to be able to destroy (and hide) AWS
	      components without crashing or leaking resources.
	    - Modified AWS component class to be able to catch more events
	      (such as "draw" and "preprocess").
	    - Fixed serious bugs with embedded components when awsComponent was
	      acting as a proxy for awsEmbeddedComponent.  It failed to invoke
	      methods of the wrapping object, and also was linking itself
	      rather than the wrapping object into the component chain.  The
	      bugs rendered awsEmbeddedComponent technology fairly inoperative
	      except in the simplest cases.
	- Eric Sunshine fixed awstest so that it builds again following Bedrich
	  Zaba's patch.
	- Anders Stenberg fixed splatting in bruteblock which was broke
	- Marten fixed an #include statement in csutil/win32/instpath.cpp. Also
	  fixed a typo in a comment in same file.
	- Rhad fixed csPNGImageIO::Save to correctly handle the default NULL
	  mime string by presuming the only supported format of 'image/png'.
30-May-2004
	- Jorrit fixed the lightning plugin so that it correctly gets the
	  bounding box and radius from the genmesh.
	- Eric Sunshine made the following changes to the new --with-vos
	  configure option:
	    - Now disables the VOS test if --without-vos or --with-vos=no is
	      specified.
	    - Now behaves sanely if given only --with-vos or --with-vos=yes,
	      rather than assuming that "yes" is the path to the VOS pkg-config
	      files.
	    - Fixed --help message so that it shows how the path for the VOS
	      pkg-config files can be given.
	- Eric Sunshine removed the OPCODE compile-time assertion that
	  sizeof(bool)==1 since this assertion is not satisfiable on all
	  platforms (such as MacOS/X), and since the OPCODE library itself does
	  not actually require bool to be one byte.
	- Eric Sunshine eliminated compilation warnings in csBitArray. Also
	  made minor fixes to Doxygen comment.
	- Eric Sunshine made the following changes:
	    - configure.ac now checks for MacOS/X-specific libmx.a.
	    - configure.ac now checks if libm.a or libmx.a provide
	      floating-point variations of the standard math.h functions
	      (cosf(), sinf(), etc.).  If not, CS_USE_FAKE_MATH_H_FLOAT_FUNCS
	      is emitted to volatile.h
	    - csdefs.h now fakes up floating-point variations of the standard
	      math.h functions if CS_USE_FAKE_MATH_H_FLOAT_FUNCS is defined.
	- Eric Sunshine fixed compilation errors and warnings in
	  csGLFontCache::csGLFontCache() and csGLFontCache::WriteString().
	- Eric Sunshine applied patch to csparser from Andres Freund
	  <anarazel@users.sourceforge.net> which causes it to emit a meaningful
	  error message rather than crashing if <params> is not given for
	  <meshobj> or <meshfact>.
	- Eric Sunshine fixed bug in ApplicationIcon rule in resource.jam where
	  it ignored the "platform" argument.  This caused macosx.jam, for
	  instance, to use cslight.ico (which is for Windows) as the MacOS/X
	  cslight.app icon.
	- Eric Sunshine made the following changes to the Jam build system:
	    - Changed the IncludeDir rule usage.  It must now be invoked with
	      only a single directory at a time, rather than multiple
	      directories.  The directory is now specified as a
	      whitespace-delimited list of tokens (much like with the SubDir
	      rule, except that the path is relative to the current directory),
	      rather than a raw pathname.  It now understands the
	      "ignoresubdir" option, which tells it to use the directory
	      literally rather than assuming it is relative to the current
	      subdirectory.
	    - Augmented msvcgen.jam so that it now also overrides the
	      IncludeDir rule.  It collects the specified directories and
	      applies them automatically (via /I directives) to the generated
	      project files.
	- Eric Sunshine added an example to the jamtemplate-synthesized
	  Jamfile.in which shows how to set additional compiler and linker
	  options for msvcgen.
	- res fixed the moving light in terrain. Due the Y offset it would
	  move higher and, until eventually the terrain was considered "out of
	  influence radius" for the light, causing the diffuse pass not to be
	  drawn.
	- res augmented the syntax services to also recognize the <zequal />
	  zmode.
	- res added edge drawing support (not really all edges, but close
	  enough) to the GL NR plugin.
	- res changed terrainf to use the zequal mode for the splatting
	  passes. This reduces the visibility of the seams.
29-May-2004
	- Peter Amstutz added a "--with-vos" option to the configure
	  script to set the PKG_CONFIG_PATH environment variable when
	  searching for VOS.
	- res updated bruteblock to not emit render meshes for a material for
	  a block if the material in question doesn't appear on the material
	  map (for that block).
	- res added a sanity check to the opcode glue.
	- res changed csBitArray to support resizing after init.
	- res fixed a VC6 compile error in libcanvascommon.
28-May-2004
	- Eric Sunshine fixed bug in CS/include/Jamfile where it failed to
	  install APIdeclare.inc and DbgHelpAPI.fun from csutil/win32.
	- Eric Sunshine fixed bugs in the Cc, C++, ObjC, and ObjC++ Jam rules
	  (compiler.jam and objectivec.jam) where -I/usr/local/include was
	  being mentioned before -I$SRCDIR/include, which meant that installed
	  Crystal Space headers would be found before (possibly more recent)
	  local development headers.
	- res updated Opcode to version 1.3.
	- res fixed the Opcode plugin to compile on non-Win32 platforms.
	- Jorrit made the Opcode plugin the default plugin in walktest. Also
	  changed 'walkall' target to build opcode instead of rapid.
	- Jorrit submitted a patch from Pascal Kirchdorfer
	  (kirchdorfer@users.sourceforge.net) so that the csView will by
	  default fix the view and perspective center when the window is
	  resized. He also added a new function (iView->SetAutoResize()) to
	  disable this again. Disabling this will not get back to the old
	  behaviour because if this is disabled the new csView will not even
	  attempt to fix the view rectangle.
27-May-2004
	- Jorrit fixed a bug in the engine so that engine->RemoveObject()
	  will correctly link a mesh from its parent if it is a hierarchical
	  mesh.
	- Jorrit extended thing so that when it gives an oversized lightmap
	  warning it will also show the name of the mesh instead of only
	  the name of the polygon.
	- Jorrit fixed a bug reported by Bedrich Zaba (frogbride@seznam.cz).
	  In the thing mesh the min_static_color_values csRGBpixel value
	  was initialized with 256,256,256. However csRGBpixel can only hold
	  unsigned char and 256 wraps to 0 then. This could cause performance
	  degradation.
	- Anders added a color buffer to bruteblock, currently just initialized
	  with (0.5, 0.5, 0.5) to avoid overbright terrain.
	- res optimized the GL text writer. It now does less state changes and
	  draws text with background more efficiently (via some GL blend mode
	  setup instead of using quads to create a background).
26-May-2004
	- Keith fixed bug in HitBeam code which assumed that all meshes for
	  a sprcal3d were attached to the model instance.  This is not required.
25-May-2004
	- Eric Sunshine updated references to the SourceForge CVS server in the
	  user manual from cvs.crystal.sourceforge.net to cvs.sourceforge.net
	  since the former address no longer works.
	- Eric Sunshine disabled generation of the MSVC wksall workspace for
	  now since it generally just confused people who failed to read the
	  manual to learn that they should be using wkstypical.  Also, wksall
	  was not providing any specific benefit at this time since we do not
	  presently have any experimental modules (those which would not appear
	  in wkstypical).  Anyhow, experimental modules ought probably populate
	  a wksexperimental workspace, which would be much less confusing for
	  non-manual-reading users.
	- Jorrit fixed chunklod terrain engine so it calls Cleanup() on the
	  terraformer sampler after using it. This cleans up a lot of memory.
	- Jorrit fixed castshadows for chunklod. It was using a
	  CS_ALLOC_STACK_ARRAY but with a huge array. So the stack would
	  overflow. It now uses a normal memory allocation instead.
	- Jorrit removed several tests in the software renderer to correct
	  for inaccurate clipper. As far as I can see these tests are not
	  needed and they cause entire polygons to be removed if such a test
	  succeeds. This could cause severe render errors when using the
	  software renderer.
	- Keith added functions to sprcal3d to set animations by index number
	  instead of only by name.
24-May-2004
	- Jorrit added a proper copy constructor to csHashMapReversible.
	  Without that copy constructor doing a copy of such a hashmap
	  will cause the pointers to the internal hashmaps to be copied
	  instead of making new objects. This fix makes sure that it is
	  now safe to assign 'csEvent' structures. This in turn should
	  have fixed crash at exit in cswstest but that doesn't seem
	  to be the case.
	- Jorrit changed the engine plugin so that it now reports the
	  number of sectors that are drawn in case bugplug is present
	  and -verbose commandline option is given.
	- Anders made brute block terrain plugin honour the movable transform
	- res fixed some bogus ARB code in the terrain shaders.
        - Philip Wyett reduced the arithmetic within SetupMesh () in brute.cpp.
23-May-2004
	- Eric Sunshine fixed ambiguous assignment from csRef<> to csWeakRef<>
	  in csEngine::GetEngineSequenceManager().  Reported by David
	  Hendrickson <onyxkana@hotmail.com>.
22-May-2004
	- res changed CS_EMIT_BUILD_RESULT to CS_EMIT_BUILD_PROPERTY in the
	  ODE 'extern "C"' test to fix the build property emission.
21-May-2004
	- res added some cleanup code to NR halo drawing to fix the problem
	  with the disappearing HUD (or, more general, stuff not being drawn).
	- res removed the support for "normalized texture coordinates" from
	  chunklod. (The unnormalized TCs where scaled to [0..1] in the shaders
	  anyway).
	- res fixed the texture coord generation in simpleformer.
20-May-2004
	- res updated map2cs to not write <camera /> into the sky render
	  priority.
	- res re-added the ability to map2cs to have a sky without having to
	  explicitly mark faces as sky portals. Can be avoided by setting the
	  "skyportalsonly" property of worldspawn to 1.
	- res fixed worldspawn in the Hammer script.
19-May-2004
	- res fixed the VBO render buffer to bind a 0 buffer after buffer
	  creation and releasing.
	- res augmented the glwin32 canvas to support an extension
	  "setglcontext" which allows it to set it's GL context as the current
	  (useful if CS is used alongside other GL stuff).
	- res augmented the glx canvas with "setglcontext" support.
	- Eric Sunshine changed jamtemplate so that it synthesizes a Jamfile.in
	  rather than a Jamfile. The synthesized configure script creates a
	  Jamfile from Jamfile.in at project configuration time. This scheme is
	  more normalized, more standardized, requires less special-case
	  handling (there is now no difference between building in the source
	  tree or at some other location), and makes the 'distclean' target
	  100% accurate (previously, it would leak a Jamfile if the build
	  directory differed from the source directory).
18-May-2004
	- Eric Sunshine made the following change to msvcgen.jam:
	    - Fixed bug in LinkWith where, though Frank changed it to properly
	      resolve library dependencies, it nevertheless neglected to
	      consult the EXTERNALLIBS .LFLAGS and .LIBS properties for the
	      fully resolved library list.
	    - Fixed LinkWith so that it removes duplicates from the library
	      list which it assigns to DEPEND.
	- Eric Sunshine disabled MSVC6 warning C4503 "'identifier' : decorated
	  name length exceeded" which is triggered by thing.cpp/ref.h.
	- Eric Sunshine augmented the ODE check in configure.ac so that it also
	  determines if `extern "C"' should be used for the functions exported
	  by ODE.  This is needed for the cs-win32libs package which exports
	  functions with `extern "C"' to avoid name mangling so that the
	  package can be used with many different compilers.  Other platforms
	  do not need `extern "C"', nor do Windows installations in which ODE
	  has been installed manually.
	- Jorrit changed iEngine->CreateTexture() so that it asks the
	  texture format from the texture manager instead of just
	  loading CS_IMGFMT_TRUECOLOR. By doing that it is now possible
	  to load textures with alpha channel using CreateTexture().
	- res fixed sorting for partgen-type meshes. The camera_origin member
	  of the render mesh wasn't set correctly.
	- res made some optimizations to partgen: the render buffers are now
	  DYNAMIC instead of STATIC (results in an FPS boost for me) and the
	  indices aren't copied over every time, only when the index buffer
	  is created, as they don't change.
17-May-2004
	- Eric Sunshine made the following msvcgen-related changes:
	    - Added --source-root and --build-root options to msvcgen.pl, as
	      well as %sourceroot% and %buildroot% substitutions.  If
	      specified, these should be paths (typically relative) pointing at
	      the roots of the source and build trees. Template files can
	      utilize these values rather than hardcoding those paths. For
	      instance, %sourceroot% might be used to compose /I directives
	      pointing at the project's header directory, and %buildroot% might
	      be used to copy built targets to the top-level build location.
	    - Augmented msvcgen.jam so that it invokes msvcgen.pl with the
	      --source-root and --build-root options with relative paths
	      computed from invocations of the MsvcGenSubDir rule. This makes
	      it simple to refer to resources and locations within the source
	      and build trees without hardcoding the paths into the templates.
	    - Augmented jamtemplate's msvcgen template files to utilize
	      %sourceroot% and %buildroot%. It should now be possible for many
	      external projects to utilize these template files without
	      modification (even if those projects have different directory
	      structures than projects created by jamtemplate).
	    - Augmented the CS msvcgen templates to utilize %sourceroot% and
	      %buildroot%.
	- Eric Sunshine fixed CS_CHECK_PTHREAD (checkpthread.m4) so that it
	  sets cs_cv_sys_pthread_recursive=no if cs_cv_sys_pthread==no.  This
	  fixes problem where AS_IF() in configure.ac following invocation of
	  CS_CHECK_PTHREAD() resulted in a shell error if pthread was not
	  found.
	- Eric Sunshine made Jam test and usage in configure.ac more tolerant
	  of whitepsace in Jam path.
	- Eric Sunshine worked around BoostJam incompatibility triggered by the
	  Jamrules files synthesized by jamtemplate.  It was invoking FDefines
	  before jamcompatibility.jam emulated this rule for BoostJam.
	- Eric Sunshine eliminated compilation warnings in viewmesh.cpp.
	- Eric Sunshine fixed cspython/Jamfile so that the 'pythmod' module is
	  now a dependency of the 'all' and 'plugins' pseudo-targets.
	  Previously, it was a dependency only of 'install', which meant that
	  it got built only at installation time (unless the user built it
	  explicitly).
	- Jorrit removed DeleteNext() from the iterators in csHash. These
	  functions could not compile (the 'hash' that is given to the iterators
	  is const so it cannot be modified) and since nobody seems to be
	  needing them (they are broken anyway).
	- Eric Sunshine fixed bug in Jam build system where .csplugin file (if
	  not embedded) was being installed by 'install_plugin' and 'install'
	  even if Plugin rule had been invoked with "noinstall" option.
	- Eric Sunshine added "nohelp" option to Plugin invocation for
	  'dynavis_debug' target in dynavis/Jamfile.
	- res made the following changes:
	    - Fixed msvcgen to correctly honor LibDepends dependencies.
	    - Augmented msvcgen.pl to remove duplicate supplied dependencies.
	    - Sanitized the VC7 library template. Some experimental dynamic lib
  	      related stuff crept in.
	    - Fixed a problem in jamtemplate's template7/ws.tpl that prevented
	      the Release build config from being useable.
16-May-2004
        - Philip Wyett eliminated gcc compiler warnings in simpleformer.cpp.
        - Andrew Craig enhanced viewmesh by letting the user select a mesh
          file to load when using a socket on a model.
	- Jorrit extended iKeyValuePair so that you can now attach multiple
	  values (by name) to a key value pair. GetValue()/SetValue() are
	  still supported and will set the 'value' value. Also extended the
	  map loader for this new feature.
	- res updated the "External Libs" manual page for the new cs-win32libs
	  release.
	- Steven Geens made the HitBeam methods of sprcal3d faster.
	  They require the newest cal3d cvs.
        - Andrew Craig updated viewmesh again.  You can now specify
          hardtransform rotations (via dialog box) to use when attaching
          a mesh to a socket.
15-May-2004
	- Eric Sunshine added implementation of FReverse rule to 2.4 section of
	  jamcompatibility.jam since it is missing in Jam 2.4 but is needed by
	  the overridden SubDir rule in jamcompatibility.jam and by other
	  custom rules we define.
        - Philip Wyett eliminated gcc compiler warnings in brute.cpp.
	- Eric Sunshine made the following changes to 'jamtemplate':
	    - Added 'msvcgen' support.
	    - Added --without-cs option to synthesized configure.ac so that
	      routine maintenance tasks (such as MSVC project generation) can
	      be accomplished without having CS installed.
	    - Upgraded build instructions in generated README.
	    - Fixed aesthetic problem with reported result of "build mode"
	      check in configure.ac.
	- Eric Sunshine fixed cspython/Jamfile so that it installs _cspace.so
	  (_cspace.dll) alongside cspace.py.  This was the intention from the
	  beginning, but a minor oversight placed it in the CS plugin
	  directory. Reported by Michael Franz Aigner
	  <crystal-space@amfranz.com>.
	- Eric Sunshine corrected a number of problems in the msvcgen templates
	  in CS/scripts/jamtemplate which were copied from 'crystalcore': (1)
	  removed incorrect and unnecessary defines; (2) removed incorrect
	  library paths; (3) removed incorrect library references; (3) removed
	  unused build modes; (4) fixed incorrect paths; (5) general cleanup
	  and unification.
	- Eric Sunshine made the following changes to 'jamtemplate':
	    - Now synthesizes config-msvc.h, which is used by MSVC builds in
	      which the configure script is not invoked (thus, config.h is not
	      available).
	    - Now synthesizes a project-global header which performs the
	      appropriate abstraction of importing config.h or config-msvc.h,
	      depending upon the build circumstances.
	- res added a declaration of iBase to weakref.h.
	- res added a sanity check for the sector in the NR part in
	  csEngine::Draw().
	- res changed a few header files that incorrectly had a GPL
	  boilerplate rather than LGPL.
	- res added a "struct" hash element handler.
	- res fixed a typo in Jamrules.template.
14-May-2004
	- Eric Sunshine worked around VS.NET warning C4345 in blockallocator.h.
	- Eric Sunshine augmented the Jam check in configure.ac so that it now
	  rejects 'ftjam' and other overly old versions (in addition to the
	  Apple-modified Jam, which it had already been rejecting).
	- Eric Sunshine moved the GNU libtool / Apple libtool check out of
	  configure.ac and into the project-agnostic
	  mk/autoconf/checklibtool.m4 so that it can be used by external
	  projects.
	- Eric Sunshine generalized the CS_CHECK_PTHREAD() check and moved it
	  out of configure.ac and into the project-agnostic
	  mk/autoconf/checkpthread.m4 so that it can be used by external
	  projects.
	- Jorrit fixed explo, fire, snow, spiral, and emit so that they
	  now use a single csRenderMesh (if NR is enabled) instead of
	  one for every particle. In case of a very complex emit particle
	  system that I tested with this improves performance from 10
	  to 40 fps! The explo particle systems seems broken though.
	  I have to investigate that.
	- Eric Sunshine generalized the Python SDK check from configure.ac and
	  moved it to the project-agnostic mk/autoconf/checkpython.m4 under the
	  name CS_CHECK_PYTHON(). There is also a convenience macro,
	  CS_EMIT_CHECK_PYTHON(), which emits the build properties expected by
	  the Jam system. These macros are now suitable for use by external
	  projects.
	- Jorrit fixed the explo mesh object so that it works correctly
	  again.
	- res fixed the partgen Jamfile to also contain a LibDepends statement.
	- res changed the way the texture coordinates are used in the terrain
	  plugins. chunklod now behaves like before Anders' recent terrain
	  changes, bruteblock is unfortunately not 100% compatible to this yet.
	- Jorrit added constructor and = operator to csWeakRef for assigning
	  csPtr directly. It is very common to do the following:
	    csRef<T> bla = ...; // Something that returns csPtr<T>.
	    csWeakRef<T> weakbla = bla;
	  This constructs avoids the need for the indirect assign.
13-May-2004
	- Eric Sunshine generalized the CS_EMIT_PACKAGEINFO() macro in
	  packageinfo.m4 so that it can work with any suitable emitter macro,
	  such as CS_JAMCONFIG_PROPERTY() or CS_MAKEFILE_PROPERTY(), rather
	  than being hardcoded to recognize only the literal strings "make" and
	  "jam".  (For backward compatibility, the "make" and "jam" emit
	  targets are still recognized.)
	- Eric Sunshine generalized the CS_OUTPUT_INSTALLDIRS() macro in
	  installdirs.m4 so that it can work with any suitable emitter macro,
	  rather than being hardcoded to always use CS_JAMCONFIG_PROPERTY()
	  (though it still defaults to CS_JAMCONFIG_PROPERTY() if an emitter is
	  not specified).
	- Eric Sunshine added CS_CHECK_MKDIR macro (mkdir.m4), which determines
	  the commands to create a directory and a directory tree. Assigns them
	  to shell variables MKDIR and MKDIRS, and invokes AC_SUBST(). This
	  macro is a generalization of the same functionality from CS's
	  configure.ac, which now instead employs the new macro.
	  jamtemplate/configure.template also now invokes this macro.
	- Steven Geens made some improvements to sprcal3d's HitBeam methods.
	- res fixed static lighting for chunklod.
        - Philip Wyett elimenated gcc compiler warnings in chunklod.cpp.
12-May-2004
	- Jorrit added iMaterial->GetTextureLayerCount() and GetTextureLayer()
	  to NR too (but with an empty implementation) so that we can get
	  the swig stuff to work compatible between NR and OR.
	- Jorrit removed 'waterdemo' from walkall target.
	- Jorrit removed the gtreeldr plugin. It is pretty useless.
	- Eric Sunshine augmented the Doxygen comments for iMouseDriver and
	  iJoystickDriver so that they give an indication of legal values for
	  button and joystick numbers.
	- Vincent Knecht removed calls to iTextureManager::SetVerbose() and
	  iMeshWrapper::DeferUpdateLighting in tutorial2.py script.
	- Eric Sunshine generalized the CS_EMIT_BUILD_PROPERTY(),
	  CS_EMIT_BUILD_RESULT(), and CS_EMIT_BUILD_FLAGS() macros in emit.m4
	  so that they can work with any suitable emitter macro, rather than
	  being hardcoded to always use CS_JAMCONFIG_PROPERTY() (though they
	  still default to CS_JAMCONFIG_PROPERTY() if an emitter is not
	  specified).
	- res augmented msvcgen with the ability to specify debug versions of
	  the cflags/lflags/libraries.
11-May-2004
	- Eric Sunshine made some clarifications and corrections to the
	  'simple' tutorial, AWS "getting started", and iGraphics3D Doxygen
	  comments based upon reader feedback.
	- Eric Sunshine fixed bugs in cstool/initapp.h where it failed to
	  include the headers declaring the interfaces it used in the various
	  CS_REQUEST_FOO macros it defined.  This resulted in each macro
	  querying the non-specialized version of the scfInterface<> template
	  rather than the version specialized for the particular interface if
	  the client had not itself #included the appropriate header.
	- Eric Sunshine changed the methods of the non-specialized version of
	  scfInterface<> so that they throw an assertion failure if invoked.
	  It is _always_ illegal to invoke these methods since they have no way
	  of gleaning correct information about an interface.  They exist only
	  as place-holders for the interface-specific specialized versions of
	  scfInterface<>.
	- Jorrit reverted the removal of Free() from csApplicationFramework.
	  It must work like that since it is illegal to call
	  DestroyApplication() from the application class destructor (the
	  csRef's are not cleared yet at that point)
	- Steven Geens removed the include to iutil/fontserv.h from
	  include/cstool/initapp.h.
	- res reverted Jorrit's reversion of the Free() removal. Added a note
	  to the source explaining why calling DestroyApplication() in the
	  csApplicationFramework destructor is legal.
	- res fixed include/cstool/initapp.h to correctly #include
	  ivideo/fontserv.h.
	- Vincent Knecht made the following changes to cs.spec:
	    - Prefixed source file name with URL.
	    - Building is done by the make emulation layer, which will
	      automatically call system installed jam if present, else use CS
	      provided jam.
10-May-2004
	- Jorrit added a missing file in the new 3dsmax exporter from Luca
	  Pancallo. Now it should work.
	- Eric Sunshine changed LinkPlugin rule in unix.jam so that it only
	  uses the plugin's basename as an argument to -soname rather than the
	  full path to the plugin in the build directory, since that was not
	  especially meaningful.  As a side-effect, this fixes a problem with
	  the _cspace.so module and RPM building where it complained that it
	  was unable to find "required and provided libraries".  Reported by
	  Vincent Knecht and Andre Duclos.
	- res made some minor changes to csApplicationFramework: some
	  nomenclature changes (DisplayError -> ReportError, mp_object_reg ->
	  object_reg), made object_reg protected, made dtor protected, added
	  new Free() method (to delete the instance and call
	  DestroyApplication() afterwards).
	- res removed csApplicationFramework::Free(). DestroyApplication() is
	  now called in the destructor.
	- Eric Sunshine fixed a couple resource leaks in
	  libs/generic/scanplugins.cpp where it was incorrectly copying strings
	  with csStrNew() before pushing them onto iStringArrays.  iStringArray
	  makes its own copy, so the manual copy was not needed.
	- Eric Sunshine removed the following obsolete, unused, unmaintained
	  and/or buggy modules. To simplify revival of these modules from the
	  CVS Attic, they have been tagged as indicated.
	    mdltest --> MDLTEST_OBSOLETE
	    svgalib --> SVGALIB_OBSOLETE
9-May-2004
	- Vincent Knecht made the following changes to cs.spec:
	    - Added current dir to PATH when invoking jam, so building
	      Crystal Space by rpm can be done with CS provided jam if not
	      present.
	    - Specified null2d canvas on cslight invokation.
	    - Removed reference to include/csappframe directory.
	    - Added include/ivaria/*.i to the list of devel %files section.
8-May-2004
	- res fixed csApplicationFramework to be CS_CSTOOL_EXPORT.
	- res fixed simpmap to compile again.
	- res fixed the compilation of OR renderers after the DrawMesh()
	  recent change.
7-May-2004
	- Jorrit fixed a problem with the terrain loader when parsing
	  booleans.
	- res split up csRenderMesh in 3 structures. csRenderMesh was used to
	  transport both data needed by the actual rendering and data only
	  needed by the preparating steps (e.g. shader pass setup). Now, the
	  renderer is using a stripped-down version of csRenderMesh only
	  consisting of render-relevant stuff. Also, the mesh/mix/alpha modes
	  should be modificable by the preparating steps, so they were moved
	  into a new struct as well. Now, the preparating steps can't modify
	  the csRenderMesh anymore (passed in as const), but can return mode
	  data.
	- res made csSet<>::In() const.
	- res added "shader technique tags". They allow some finer control over
	  what techniques validate than the default hardware-capability based
	  fallback system. For example, you can tag some techniques with a tag
	  "bumpmap", and later offer an option in the app to disable
	  bumpmapping, which would instruct the tag system to reject shaders
	  with a "bumpmap" tag.
	- res added some multipass techniques for the or_lighting_detail*
	  shaders.
	- res added a CS_ASSERT_MSG macro to make it possible to attach a
	  message to an assert condition (eg explain a possible reason for the
	  triggering of the assertion).
	- res added some docs to csutil/callstack.h.
	- Eric Sunshine made the following changes to csList<>;
	    - Fixed strange logic where IsEmpty() was implemented as 'return
	      (head == 0) && (head == 0)'.
	    - Made IsEmpty() const.
	    - Fixed brokeness of InsertBefore() and InsertAfter().
	      InsertBefore() was actually inserting the new item _after_ the
	      indicated item; and InsertAfter() was inserting the new item
	      _before_ the indicated item.
	    - Fixed some crash-worthy code in csList<>::Iterator.
	- Eric Sunshine updated simpmap.txi to reflect Frank's changes to
	  keyboard event handling from several months ago.
	- Eric Sunshine fixed bug in jamtemplate/Jamfile.template which
	  prevented 'clean' targets from being removed when 'distclean' was
	  invoked.
	- Eric Sunshine merged the csappframe library into cstool. Also updated
	  out-of-date csApplicationFramework documentation.
	- res added some more documentation to ivideo/rendermesh.h.
	- Eric Sunshine fixed bugs in awsEmbeddedComponent::LinkAbove() and
	  LinkBelow() where they were linking the embedded component into the
	  component list rather than the subclassed wrapper, with the result
	  that methods, such as awsManager::RecursiveDrawChildren(), were
	  invoking methods in the wrong object. (I think that other methods,
	  such as Unlink(), and possibly those dealing with 'parent' and
	  'top-child', suffer from the same shortcoming. Someone needs to
	  perform a thorough audit.)
6-May-2004
	- res fixed the NR GL renderer to handle resize events.
	- res fixed texture downsampling in the NR GL renderer. It could
	  happen that a dimension of the image became 0.
	- Anders did the following changes to terrain in NR
	    * Made chunklod use terraformer
	    * Added a new terrain renderer (bruteblock)
	    * Did various updates to terraformer (like implementing bicubic
	      filtering of heightmap data)
	    * Changed the "lod distance" lod value to "splatting distance",
	      since that is more descriptive
	    * Updated the terrain world files to reflect changes
	    * Changed the materialmap colors to... look better
	  Some problems with materialmap was introduced though (in case it
	  was not already there.) Seems to be problems related to terrain size
5-May-2004
	- Eric Sunshine worked around problem caused by Jam2.4/BoostJam
	  work-around of 2-May-2004 for problem where Jam complained about
	  inability to locate $(BUILDTOP)/Jamrules.  Unfortunately, that work
	  around resulted in volatile.h not being installed when the build
	  directory differed from the source directory.  Now employs a
	  different work-around which should make everyone happy.
	- Eric Sunshine fixed the definition of INSTALL_DATA in install.jam so
	  that it employs whitepace after the -m directive in order to be
	  compatible with older 'install' programs.
	- Eric Sunshine eliminated several gcc 2.95.4 compiler warnings in
	  chunklod.cpp.  Also a couple places in csTerrainObjectLoader::Parse()
	  where code was returning a boolean when a csPtr<> was called for.
	- Eric Sunshine worked around a bug in Swig's Perl5 module where it
	  generates garbage code when a class and instance method have the same
	  name, and when an overload of an instance method accepts variable
	  arguments.  The garbage code takes the form of accesses to
	  non-existent variables and completely illogical control flow.
	- Eric Sunshine removed the following obsolete, unused, unmaintained
	  and/or buggy modules. To simplify revival of these modules from the
	  CVS Attic, they have been tagged as indicated.
	    cssocket --> NET_OBSOLETE
	    ensocket --> NET_OBSOLETE
	    milk2spr --> MILK2SPR_OBSOLETE
	    netman   --> NET_OBSOLETE
	    netmtst  --> NET_OBSOLETE
	    rlecodec --> RLE_OBSOLETE
	- Jorrit added a new version of the 3dsmax exporter script from
	  Luca Pancallo. This version adds terrain (for NR only) and static
	  lod support.
	- Jorrit fixed a compile problem in cstool after removal of the
	  network driver.
	- Eric Sunshine fixed bug in Swig rule (swig.jam) where it failed to
	  search for the input Swig .i file in the current directory (as
	  documented) if a directory was not explicitly provided.
	- Eric Sunshine split the MsvcGenConfig rule (msvcgen.jam) into two
	  rules: MsvcGenConfig and MsvcGenConfigFile.  The problem with the old
	  unified rule was that it was impossible to assign a property a null
	  value.  Also fixed a bug in MsvcExternalLibrary where it could add an
	  empty entry to the LIBRARIES list, which would then cause a bogus
	  `--library=' option to be passed to msvcgen.pl.
	- res augmented the generated Win32 resources with a manifest.
	- res replaced the SetLODDistance() and SetErrorTolerance() terrain
	  options with the more flexible SetLODValue() mechanism.
	- Eric Sunshine fixed bug in msvcgen.jam where tokens the 'sed'
	  expression which transformed path references in the generated icon
	  .rc file were not properly protected. For instance, if the generated
	  'sed' expression was supposed to strip "$(TOP)/" from the emitted
	  icon reference, and TOP was ".", then "./" would unexpectedly match
	  any character followed by a slash, rather than matching a period
	  followed by a slash (as intended).
	- Eric Sunshine fixed bugs in jamtemplate/Jamfile.template where it was
	  invoking incorrect rules and failed to clean up generated files when
	  the 'clean' target was invoked.
	- Neil Mosafi changed the csvosa3dl plugin.  A sector will now listen
	  to updates and respond when children (obj3d and light are changed.
	  There is a separate relight thread which regularly checks if things
	  need relighting.  Added some dynamics support:
	    - Set up dynamic system.
	    - Cube to iRigidBody.
	    - Convert PolygonMesh (if static) to iRigidBody.
4-May-2004
	- Eric Sunshine made the following changes to the build system:
	    - Added ApplicationIconDefault and ApplicationIcon rules to
	      resource.jam.  ApplicationIconDefault allows querying and setting
	      the default icon(s) for all GUI and/or console applications.
	      ApplicationIcon allows querying and setting the icon for a
	      particular application, thus overriding the default icon.  These
	      rules are platform agnostic and work for all supported platforms.
	    - Added application icon support to win32.jam.  It now respects
	      icons assigned by ApplicationIconDefault and ApplicationIcon.
	    - Augmented Jamrules so that it sets a default icon for GUI
	      applications on Windows.  This means that all GUI Crystal Space
	      applications now get an icon; not just Walktest, csdemo, and
	      cslight.
	    - Added a flashy new Windows ICO in place of the old drab one.
	    - Removed the MacOS/X-specific ApplicationIconDefaultOSX and
	      ApplicationIconOSX rules.  Instead, macosx.jam now respect icons
	      assigned by the generic ApplicationIconDefault and
	      ApplicationIcon.
	- Jorrit changed iMeshWrapper->GetShadowCaster() and
	  GetShadowReceiver() so that they now only query for the respective
	  interfaces when being called. That will make it easier later to build
	  those multiplexing versions for static lod on demand.
	- Jorrit fixed a bug in the engine when it would try to do lighting.
	  It would also attempt to init and cache lighting for meshes that
	  were not in any sector. This could cause crashes as some meshes
	  assumed that they were in a sector. This fixes a bug when relighting
	  a level that defines 'meshobj' outside sectors (this is useful in
	  combination with libraries) and where you use 'meshlib' to pull
	  the object in a sector. If the 'meshlib' was not used then the
	  'meshobj' would remain in the engine without any sector.
	- res changed the ApplicationIcon Jam rule to set the icon path to
	  SEARCH_SOURCE if no path was explicitly provided. Without this
	  change, was apparently not utilized and the icon file not found.
	- Eric Sunshine applied the same SEARCH_SOURCE fix to the
	  ApplicationIconDefault rule.
	- res updated msvcgen.jam to honor application icon specified by
	  ApplicationIconDefault and ApplicationIcon.
	- res changed the cslight Jamfile to use the ApplicationIcon rule to
	  set its custom icon.
	- Eric Sunshine made the following changes to msvcgen.jam:
	    - Fully generalized msvcgen (finally) for use by external projects
	      by removing hardcoded assumptions about resource and tool
	      locations, availability, and configuration.
	    - Added new user-visible MsvcGenSubDir rule which informs msvcgen
	      where in the source tree the project files are expected to live,
	      and provides sufficient information for msvcgen to compose
	      relative paths for reference to other resources from within the
	      generated project and .rc files.  (In the future, this
	      information will also be used for "freeze" rules which copy the
	      generated files from the build directory back to the source
	      tree.)
	    - Added new user-visible MsvcGenTemplateDir rule which informs
	      msvcgen where the project template files reside.
	    - No longer blindly publishes various top-level msvcgen targets.
	      This did not make sense when msvcgen support was not enabled for
	      a particular client.  Now, only publishes targets appropriate to
	      the MSVC versions requested by invocations of MsvcGenSubDir.
	    - Eliminated dependency upon ugly libs/csutil/win32/mergres.sh
	      script
	- Eric Sunshine fixed memory leaks in csSpriteCal3DMeshObject's
	  HitBeamOutline() and HitBeamObject().  Reported by Ben Thomas
	  <ben.thomas@wickedstudios.com>.
3-May-2004
	- Eric Sunshine augmented all the "build" instructions in the user
	  manual to indicate that the project can be built with both Jam and
	  'make'.  Also added information explaining how to obtain, build, and
	  install Jam.  Finally, updated much outdated or incorrect information
	  in the "Introduction" and "Build and Install" chapters.
	- res fixed a VC6 compile error in chunklod.
	- Eric Sunshine fixed a bug in the Swig rule (swig.jam), which was
	  introduced with the large re-write of 15-Apr-2004, where it failed to
	  respect the global SWIG.FLAGS, which might be set by the configure
	  script, for example.  This problem manifested when the project was
	  configured for the new renderer (--enable-new-renderer), for
	  instance, since Swig did not know that it should generate code
	  applicable to the new renderer.
2-May-2004
	- Eric Sunshine changed pubapi.dox so that it no longer excludes
	  $(TOP)/include/csutil/win32 and csutil/unix.  In the past, these were
	  excluded because Doxygen complained about finding multiple
	  declarations of SysSytemDriver (one per platform); however
	  SysSytemDriver was finally eradicated on 23-Jul-2003, so it is no
	  longer necessary to make this exclusion.  Furthermore, these
	  directories may contain useful classes which the user might wish to
	  use (such as csWin32RegistryConfig).
	- Eric Sunshine augmented crystal.m4 so that it applies
	  CS_PATH_NORMALIZE() to the results of several cs-config invocations.
	  This should resolve a problem for some Windows users in which the
	  paths returned by cs-config were in DOS format (containing
	  backslashes), which were interpreted incorrectly by the Bourne shell
	  invoked by Jam to compile and link programs.
	- Eric Sunshine performed Texinfo mark-up correction and cleanup in new
	  material added to engine/internal.txi.  Also cleaned up the grammar
	  and performed some re-writing to make the discussion more idiomatic.
	- Jorrit started working on implementing lighting correctly for
	  static lod meshes. Currently the children of a static lod mesh
	  are not registered to the visibility culler. Since lighting
	  (precalculated lighting) is handled through the visibility culler
	  this means that these child objects are basically being ignored.
	  To solve this I'm going to work on having a iShadowReceiver and
	  iShadowCaster in the mesh itself which is going to delegate shadow
	  handling to the appropriate child(ren). Currently I only
	  added iMeshWrapper->GetShadowCaster(). This doesn't do anything
	  yet except return the shadowcaster of the mesh itself.
	- Eric Sunshine removed the difficult-to-maintain, legacy, GNU
	  make-based build system. However, in order to avoid alienating users
	  by forcing them to download, install, and use Jam, the CS configure
	  script now performs these additional tasks:
	    - If Jam is not installed, then it is built automatically on behalf
	      of the user from a local copy of the Jam source
	      (CS/apps/tools/jam) and deposited into the root of the build
	      directory.
	    - A makefile is synthesized which responds to all of the top-level
	      targets to which the Jam build system responds. The makefile
	      simply forwards these requests over to Jam with appropriate Jam
	      options to simulate 'make' output and behavior as closely as
	      possible.
	  These changes make it possible for users to continue using 'make'
	  without ever having to know or care about Jam.
	- Eric Sunshine propagated the CS_EMIT_BUILD_PROPERTY(),
	  CS_EMIT_BUILD_RESULT(), and CS_EMIT_BUILD_FLAGS() Autoconf macros out
	  of configure.ac and into the new CS/mk/autoconf/emit.m4.  These
	  macros are sufficiently generic for use in external projects now that
	  the legacy GNU make-based build system has been removed.
	- Eric Sunshine added a --disable-make-emulation switch to configure.ac
	  which allows the user to disable synthesis of the new makefile
	  emulation layer.
	- Eric Sunshine worked around problem where Jam 2.4 and BoostJam
	  complained of failure to locate $BUILDTOP/Jamrules when the source
	  and build directories differed.
	- Eric Sunshine worked around shortcoming in Jam 2.4 and BoostJam which
	  caused all buildable targets to be built when 'dumptargets' was
	  invoked. This fixes a problem where Jam would want to build all these
	  targets when the configure script invoked 'dumptargets' to synthesize
	  the 'make' emulation layer
	- res augmented the documentations for the platform-specific APIs with
	  a notice about the platform-dependency.
	- res updated snapshot.py to use 'cvs.sourceforge.net' as a hostname in
	  the CVS/Root files for generated CVS snapshots. This seems to be
	  required after some recent apparent changes in SF's CVS.
	- Erotoman fixed spr2d uvanimation in NR
	- res undid an accidential commit of csutil/win32/volatile.h.
	- Eric Sunshine augmented configure.ac's "jam" check so that it will
	  reject the seven-year old, Apple-modified Jam which ships with
	  MacOS/X.  Although, this Jam resides in a private location
	  (/Developer/Private/jam) in recent OSX releases, some users might
	  have it in their PATH anyhow.  Also, with older OSX releases, it was
	  in a publicly accessible location (/usr/bin/jam).
	- Eric Sunshine fixed bug in csperl5/Jamfile where Jam complained
	  "don't know how to make <plugins!cscript!csperl5>cswigpl5.inc" if
	  Swig was not installed.  As a side-effect, this problem caused the
	  'make' emulation synthesis performed by the configured script to fail
	  if Swig was not installed and the user had given the --with-perl
	  configure option.
	- Eric Sunshine removed the following obsolete, unused, unmaintained
	  and/or buggy modules. To simplify revival of these modules from the
	  CVS Attic, they have been tagged as indicated.
	    cloth       --> CLOTH_OBSOLETE
	    clothldr    --> CLOTH_OBSOLETE
	    cocoa2d     --> COCOA2D_OBSOLETE
	    cs2xml      --> CS2XML_OBSOLETE
	    demosky     --> DEMOSKY_OBSOLETE
	    demosky2    --> DEMOSKY_OBSOLETE
	    simplecloth --> CLOTH_OBSOLETE
	- res added a note about the CS_FX_GOURAUD removal to the API
	  modification appendix.
1-May-2004
	- Jorrit added a new data/terrainf/world which is a variant of
	  data/terrain/world that uses the fixed shaders. Keep in mind that you
	  have to do -relight on this level to get lighting.
	- res fixed some left occasions of CS_FX_GOURAUD in OR code.
30-Apr-2004
	- Eric Sunshine changed the Install* rules in install.jam so that they
	  grist the source files with $(SUBDIR). This fixes a bug where
	  like-named resources would be installed at the wrong location. For
	  instance, win32/csosdefs.h was being installed as csutil/csosdefs.h,
	  macosx/csosdef.h, unix/csosdefs.h, and win32/csosdefs.h.
	- Jorrit unified the NR and OR engine a bit more. The csEngine::Draw()
	  and StartDraw() functions are now almost the same. To do that
	  I moved some stuff out of the render loop into the engine again
	  (I don't know why that stuff was put in the render loop in the
	  first place). Removed one version of Draw() from iRenderLoop. It
	  is no longer needed now.
	- Jorrit added iSector->GetRenderLoop() and SetRenderLoop(). With
	  this function it is possible to set a different renderloop for
	  one specific sector. If this is not set (default) then the default
	  engine renderloop will be used.
	- Jorrit added a new <renderloop> tag to the sector definition so
	  that you can specify a renderloop for a sector in a world file.
	- Jorrit changed some warnings into notifies and others into errors
	  in the XML shader compiler plugin.
	- res updated the iDocument documentation by adding that a 0 iterator
	  is never returned.
	- res fixed xmlread to not return a 0 attribute iterator.
	- res slightly clarified a message in xmlshader.
	- Jorrit fixed a bug in the new portaltraversal flag. The
	  portals would be traversed anyway.
	- Jorrit started a new document that explains the inner workings of
	  the engine.
	- res changed the sprcal3d plugin to not read from the pointer to the
	  locked normals render buffer. While this doesn't make a difference
	  on drivers that don't have VBO support, it improves performances
	  when VBO is available.
	- Eric Sunshine augmented Jamrules so that it sets the property
	  "standalone" in the container "build" when the build directory
	  differs from the source directory.  Client Jamfiles can query this
	  property to conditionalize behavior.  Changed Jamfile.in so that it
	  utilizes this new property to determine if it should perform special
	  processing for the configure-generated 'include/volatile.h', rather
	  than performing the check manually.
	- Jorrit added csddsimg to the walkall target. Walktest now needs it.
	- Eric Sunshine performed a significant amount of Texinfo mark-up
	  correction and cleanup in the new engine/internal.txi.  Also cleaned
	  up the grammar and performed some re-writing to make the discussion
	  more idiomatic.
	- Jorrit worked a bit further on the internal engine document.
	- res updated the NR software renderer so that simple1 and 2 work.
	- res replaced CS_FX_GOURAUD with CS_FX_FLAT, which is doing the
	  opposite. Nowadays, gouraud shading is common and flat shading the
	  exception, so it makes more sense to have the latter explicitly
	  specified.
	- res made some smaller changes & workarounds to NR SW. Works with
	  flarge with the sense of 'work' as in 'does not crash instantly'.
	- res fixed a missing quoted string termination in csconf.mak.
29-Apr-2004
	- Marten fixed a bug in xmlshader where it assumed the syntax-service
	  was already loaded.  Now it loads it if needed.
	- Eric Sunshine rewrote gobs of unportable shell programming in the
	  jamtemplate/createproject.sh script. Also generally cleaned up and
	  unified the rest of the jamtemplate resources.
	- Eric Sunshine removed obsolete crystalspace.motion.manager.*
	  reference from csparser.csplugin.  Reported by Matthew Hawn
	  <steamraven@yahoo.com>.
	- res made the following changes:
	    - Changed the cs-config generator to not have a harcoded list of
	      libs or their dependencies, but rather extract this info from
	      the Library Jam rules.
	    - Added some new shaders and used them in walktest:
	      or_lighting_detail_alpha and or_lighting_detail_add, mimicking
	      some layer effects used by OR; reflect.xml, a simple reflection
	      shader, now used by the "car" in flarge; an OR lighting
	      compatible shader for detail textures. Those are relatively
	      cheap, but give the illusion of a higher res texture. Applied
	      to the "mosaic" material(s) in flarge.
	- res "fixed" csconf.mak for the cs-config changes by having it emit
	  hardcoded lib dependencies again.
28-Apr-2004
	- Eric Sunshine applied a few scripting-related patches from Michael
	  Franz Aigner <crystal-space@amfranz.com>:
	    - Fixed inverted logic bug when testing result of PyList_Check() in
	      TYPEMAP_IN_ARRAY_BODY().
	    - Fixed bug where TYPEMAP_IN_ARRAY_BODY() was improperly invoking
	      Swig's $descriptor() pseudo-macro with the result that it was
	      entirely dysfunctional.
	    - Published additional interfaces: iMeshWrapperIterator, iPortal,
	      iPortalContainer, iStandardReporterListener.
	- Jorrit reverted the crash fix in genmesh made by res2k earlier.
	  Better to leave the crash there until the REAL bug is fixed.
	- Jorrit fixed all mesh loaders to test if the factory is actually
	  the same type as the mesh object. That's better than just crashing.
	- Jorrit fixed the engine so that objects created from a hierarchical
	  mesh factory (<meshref> in loader) will also have SetLogicalParent()
	  called.
	- Jorrit fixed genmesh so that it now does CS_ASSERT to test for
	  the crashing condition. This bug is actually a problem in the map
	  file. The problem is that it is impossible to detect at load time
	  and we have no facility to report these kind of errors at
	  render time yet... So a CS_ASSERT will have to do for now.
	- Steven Geens fixed sockets in sprcal3d. The alignment of the
	  object in the socket was incorrect.
	- Jorrit added 'const' to several methods in iGenericRenderStep.
	- Jorrit added methods iGenericRenderStep->SetPortalTraversal()
	  and GetPortalTraversal(). These methods indicate to the render
	  step if it should traverse (draw) portal containers or not. By
	  doing this we will solve the problem that using portals in a
	  level with a complicated renderloop will cause huge overhead
	  because the portal is traversed for every step in the render loop.
	- Jorrit added a <portaltraversal> keyword for the renderstep loader.
	  If this is specified then portals will be rendered in that
	  renderstep. In most cases this should probably be specified
	  for the first step (i.e. ambient).
	- res replaced the 'inUse' member of csRenderMesh with a frame number
	  counter. If this counter is equal to the engine's frame count, it
	  means the render mesh is still in use. This change removes the need
	  to set inUse to false (and fixes some bugs where this occasionally
	  didn't happen).
	- res changed WT to allow disabling crash dumps via the
	  Walktest.Win32.Minidumps config setting. Also, for non-VC compilers
	  it's now disabled by default (not much useful there anyway).
	- res fixed a crash in bindoc when 0 was set as a node value.
	- Eric Sunshine made the following changes to the Jam build system:
	    - Introduced a new rule named Description which can be used to
	      both set and query a target's description.
	    - Changed all invocations of the Help rule (except the ones using
	      the "verbatim" option) to invocations of the Description rule
	      throughout the project.
	    - Removed the "verbatim" option from the Help rule and changed the
	      Help rule to _always_ treat its argument as verbatim.
	    - Eliminated the anomaly where Help was hard-coded to prepend
	      "Build the" to the incoming text.
	    - Augmented the Application, Library, Plugin, and ShellScript rules
	      to invoke Help automatically with the text "Build the
	      $(description)".
	    - Augmented msvcgen.jam and win32.jam to utilize the target's
	      decription string (as collected by the Description rule) rather
	      than the help string (which was not necessarily appropriate in
	      the context of project files and .rc files).
	- Eric Sunshine fixed bug in Doxygen rule (docs.jam) where it was
	  invoking MakeLocate on a pseudo-target.
	- Eric Sunshine fixed bug in aws/Jamfile where the 'awsfreeze' target
	  was gristing the built source files in such a way that Jam would
	  complain that it did not know how to create those files if they were
	  needed.
	- res enabled the glRasterPos hack in glcommon2d.cpp for NR, too.
	- res fixed the interpretation of some header fields in the DDS loader.
27-Apr-2004
	- Jorrit removed ClipBSphere() from iRenderView.
	- Jorrit added a private implementation of ClipBSphere() to
	  csRenderView which is used by the portal container.
	- Jorrit cleaned up a few more routines in csRenderView. Changed
	  TestBSphere() to use the new clip planes internally. It now expects
	  a sphere in world space.
	- Jorrit changed GetRenderMeshes() in partgen/particle.cpp to
	  use CalculateClipSettings().
	- Jorrit modified terrfunc so it uses the same ClipBBox() routine
	  that is also used by the NR terrain engine.
	- Jorrit removed the now unused version of iRenderView->ClipBBox()
	  that is based on screen and camera space bbox. These are not
	  used any more.
	- Jorrit changed levtool so that it no longer validates the input
	  file (checks if it is a <world> file) if -inds or -outds is
	  used. By doing that the tool can be used to convert mesh factories
	  and other type of XML files too.
	- Jorrit added code to the chunklod (NR terrain) mesh loader so that
	  it tests the following two things:
	      - Material palette must be specified BEFORE material map.
	      - LodDistance must be set before material map too.
	- Jorrit fixed the terrain level for this change.
	- res augmented the Jam build system to support ExternalLibs for
	  libraries. The required link flags are propagated to clients of the
	  library. csutil now uses ExternalLibs to express it's dependency on
	  zlib and pthread. The hardcoded linking of all apps resp. binaries
	  against zlib and pthread has been removed from Jamrules. Also updated
	  Jam msvcgen to handle ExternalLibs for libraries.
	- Jorrit fixed an initialization error in the NR OpenGL renderer
	  with current_drawflags.
	- res fixed an occasional crash in genmesh (happens when multiple maps
	  are loaded at once for some reason).
	- Eric Sunshine added a "pythmod" Jam target to cspython/Jamfile, which
	  builds the pure Python "cspace" module. Builds and loads correctly on
	  Linux. Other platforms not yet tested.
	- Eric Sunshine fixed bugs in cspython.mak and csperl5.mak where the
	  generated cspace.py and cspace.pm files did not get installed if Swig
	  was present.
26-Apr-2004
	- Eric Sunshine fixed bugs in cross-product functions of csVector4 and
	  csDVector4 where it was accessing 'x' component of wrong vector.
	  Reported by Bernd Waibel <waebbl@gmx.dew>. Also fixed some incorrect
	  Doxygen comments.
	- Eric Sunshine augmented csperl5.mak and scripts/perl5/Jamfile so that
	  they also install *.pl files from scripts/perl5, rather than only
	  installing *.pm files.
        - Philip Wyett removed old motion manager plugin entry from
          walktest.cfg.
	- Jorrit moved the list of camera meshes from RenderQueues to
	  the sector. This change means that it is no longer required for
	  a mesh using CS_ENTITY_CAMERA to be in a render priority that
	  has the camera flag set.
	- Jorrit removed the iEngine methods which control the camera
	  render priorities.
	- Jorrit removed the 'camera' flag for render priorities in the
	  engine and the loader. The keyword is still recognized by the loader
	  but only a deprecated warning is given.
	- Jorrit modified RenderQueues for OR so that it also keeps the
	  frustum_mask. That way we can finally pass along the frustum_mask
	  to the meshes and use the same kind of clipping as is now
	  present in NR.
	- Jorrit removed iMeshWrapper::Draw(). This is not useful to have
	  as it is OR specific and only the engine is really capable of
	  drawing meshes.
	- Jorrit extended iMeshObject->DrawTest() with a frustum_mask
	  parameter (OR only).
	- Jorrit changed all mesh objects to use the new frustum_mask in OR
	  too.
	- Jorrit fixed the NR GetRenderMeshes() for the portal container class
	  so that it no longer ignores the movable transform. Moving portals
	  simply didn't work with NR.
	- Neil Mosafi added forward declare for iGraphics3D to
	  ivideo/custcursor.h.
	- Jorrit changed the 'particles' mesh object so that it now also
	  uses CalculateClipSettings.
	- Eric Sunshine augmented scripts/python/Jamfile so that it also cleans
	  up the evil .pyc and .pyo files which are excreted by Python.
	- Eric Sunshine augmented configure.ac to determine the file extensions
	  of pure Python and pure Perl modules. cspython.mak and csperl.mak now
	  utilize the results of these checks.
	- res fixed an issue with proctex flippedness in NR.
	- res augmented chunklod to also cast shadows. Activated with
	  <castshadows> mesh object parameter.
	- res fixed some coordinate swappage in chunklod, causing it to cast
	  wrong shadows.
	- res removed the user-defined exception feature from the Win32
	  assistant. This can be handled as well (if not better) by the app.
	- res added some helpers for Win32 to easily create minidumps that
	  contain some extra useful info and set up an exception handler
	  (which creates such minidumps).
	- res augmented walktest to create such minidumps.
	- res fixed some gcc warnings & errors in the minidump code.
	- Luca fixed a bug in the csIntersect3::Plane () method. It was using
	  the wrong formula to calculate the x value along the segment
	  U + x (V - U): the unknown 'x' value is got by:
	  x = [(A,B,C) * U + D ] / (A,B,C) * (U - V) and NOT got by
	  x = [(A,B,C) * U + D ] / (A,B,C) * (V - U). Look to the comments in
	  the code for more clarifications. He also set some default values
	  (and documented it) for the output arguments.
	- res changed the walktest Make-/Jamfile to link against zlib (needed
	  by the minidump code).
25-Apr-2004
	- Jorrit changed the way render priorities work in the engine. The
	  RenderQueues field no longer contains all meshes for all render
	  priorities but only the meshes with CAMERA flag set. The other
	  meshes are not needed there.
	- Jorrit added a new 'visible' array to RenderQueues. This array
	  is used with OR only and updated during visibility testing. This
	  replaces the SetVisibilityNumber() that was otherwise used. It
	  also makes OR handling of more meshes more efficient.
	  The RenderQueues.SortAll() method no longer has to test for
	  visibility as it will use the 'visible' array instead of the
	  'queues'.
	- Eric Sunshine augmented jobber.pl so that the Crystal Space version
	  number and copyright are now gleaned from the configure script rather
	  than being hard-coded into jobber.pl.
	- Eric Sunshine updated Python SDK check in configure.ac to take into
	  account new Python.framework in MacOS/X 10.3.
	- Eric Sunshine fixed bug in csPerl5::Init() where it was using the
	  unreliable VFS /this/scripts directory to initialize the interpreter.
	- Wouter Wijngaards changed plugins/aws/Jamfile. The section where
	  the awsfreeze rule is generated was using the FILES variable,
	  however, this variable was already being used for holding the
	  files for the Plugin rule. By overwriting the FILES variable with
	  only the files needed for awsfreeze, the main target was caused
	  to compile only skinlex and skinpars. All other aws*cpp files were
	  not compiled. To fix this, replaced FILES with FREEZEFILES for
	  the awsfreeze rule construction (but not for the main plugin rule).
	- Eric Sunshine fixed bug in csperl5/Jamfile where it failed to run
	  Swig to create cswigpl5.inc, upon which the csperl5 plugin depends.
	- res removed the hard-coded WAVEOUTSND settings from win32.jam and
	  instead added a configure check.
	- res also changed win32.jam to not add /usr/include/directx  as an
	  include dir to CCFLAGS resp. C++FLAGS, as this directory is already
	  checked for in the DirectX configure test.
	- res changed the PLUGIN.LFLAGS value to only include -mwindows.
	  (The old line "-mwindows -mconsole" was self-contradicting as it
	  first set the "GUI subsystem", then the "console subsystem" flags.)
	- res fixed the waveout sound driver to convert error descriptions from
	  the system to UTF-8.
	- Wouter Wijngaards changed the csfx DrawPartial() to work under the
	  new renderer, it forgot to flip the y coord.
	- res fixed a problem in csGLGraphics3D::BeginDraw(). It set
	  "current drawflags" to the "new drawflags" at the very beginning of
	  the method, causing the test for whether G2D BeginDraw() should be
	  called to always fail.
	- Eric Sunshine made the following changes to deal with recent versions
	  of Swig's Perl support:
	    - Worked around a nasty bug where Swig transforms invocations of
	      function-like macros taking zero-arguments in inline code into
	      invocations of non-function-like macros. For instance, it
	      transforms SCF_DESTRUCT_IBASE() into SCF_DESTRUCT_IBASE, which
	      later causes a compilation error since the C-preprocessor does
	      not know about this non-function-like macro.
	    - Worked around problem where Swig unconditionally #undefs Perl's
	      'ENTER' macro. This causes inline code in perlpost.i, which
	      utilizes that macro, to fail to compile.
	- Wouter removed test for images.IsValid() in GetOrigSize(), since
	  the orig size fields are set correctly already. Also the routine
	  was returning without touching the w and h, causing unpredictable
	  results. This fixes an Image View component in AWS.
	- Eric Sunshine augmented the Swig rule (swig.jam) so that it creates a
	  dependency between the "additional files" (typically generated
	  scripting files) and the main target (typically a generated C or C++
	  files). This makes it possible for the other generated files to be
	  created automatically when needed, such as when some other target (an
	  "install" target, for instance), depends upon them.
	- Eric Sunshine augmented the various Install rules (install.jam) so
	  that they grist the incoming files only if they have not already been
	  gristed. This allows those files to be properly created if missing
	  (assuming that Jam knows how to create them), whereas the old scheme
	  of unconditionally gristing the incoming names made it impossible for
	  Jam to create those files at install time.
	- Eric Sunshine fixed problems where the Jam "install" targets were
	  incorrectly installing cspace.py and cspace.pm from the
	  CS/scripts/python and CS/scripts/perl5 directories, respectively,
	  rather than installing the most recent Swig-generated versions from
	  the build directory (if Swig was available).
	- Eric Sunshine fixed bug in csPerl5::Init() (csperl5.cpp) where it was
	  passing corrupt argc/argv to perl_parse().
	- Eric Sunshine fixed bug in csperl5/Jamfile where it failed to
	  re-compile cswigpl5.cpp if cswigpl5.inc had been re-generated by
	  Swig.
	- Eric Sunshine made the following changes to the csPerl5 module:
	    - Fixed nasty bug in csPerl5::CallV() where it was returning an
	      already destroyed Perl object. Since all of the NewObject(),
	      Call(), Get(), Set(), Retrieve(), and Store() methods are
	      predicated upon this one method, everything broke; either by
	      crashing or misbehaving in highly strange and dangerous ways.
	    - Fixed several other bugs relating to reference-counting of Perl
	      and CS objects; mostly involving leaks.
	    - Fixed bugs in all iScriptObject::Get() and Set() methods where
	      they were calling non-existent methods in the corresponding Perl
	      object, thus they were entirely dysfunctional.
	    - Fixed totally broken behavior of csPerl5::Query(), which is
	      supposed to determine if an iScriptObject is actually an
	      implementation of csPerl5::Object. The query always failed.
	    - Changed the Get() and Retrieve() methods for strings in the
	      iScript and iScriptObject interfaces to deal with a properly
	      reference-counted iString, rather than a char** pointer, which
	      was quite ugly; and which, in csPerl5, would return a pointer to
	      a string inside an actual Perl object, which might disappear at
	      any time. It was highly dangerous.
	    - Augmented perl5test to also exercise iScriptObject::Set(), in
	      addition to Get().
	- Neil Mosafi fixed crash in plugins/cursor/cursor.cpp where it was
	  passing a null char* into strcmp, due to it using the internal
	  data in an uninitialised csString.
24-Apr-2004
	- Jorrit fixed a compile bug in glshader_fixed. 'friend' needs
	  'struct'.
	- Jorrit started unifying the engine a bit between OR and NR usage
	  (involves bringing the OR a bit closer to the NR in way of
	  operations).  The advantage of this is that I can clean up a lot of
	  OR specific code that way.  This unification currently involved
	  sharing the ObjectVisible callback in csSector so the same callback
	  code is used in OR and NR.
	- res fixed the rain and partgen Jamfiles to also depend on csgfx.
	- res added PACKAGE_VERSION and PACKAGE_STRING to the jobber Jamconfig.
	- res changed the render mesh holder to automatically set the inUse
	  flag of the returned mesh.
	- res added a fallback to csGLGraphics3D::SetAlphaType().
	- res augmented the chunklod mesh to support static lighting.
	  Is enabled by specifying "<staticlighting>yes</staticlighting>" in
	  the mesh object params. Although the terrain can receive shadows,
	  it can't cast them yet.
23-Apr-2004
	- Eric Sunshine fixed crasher in csSimpleConsole::Initialize()
	  (simpcon.cpp) where it would blindly access its G2D member without
	  first checking if it had managed to actually locate a canvas.
	- Eric Sunshine added check to configure.ac to determine how to disable
	  warnings about uninitialized variables. The result of this check is
	  useful for tool-generated code over which we have no control, and is
	  now utilized when building Swig-generated code for Python and Perl.
	  (To be fair to gcc, however, Swig _is_ generating crash-worthy code,
	  so the warning message is warranted.)
	- Luca fixed a compilation error that the VisualC++ 6.0 was complaining
	  about.
	- Eric Sunshine made the following changes to the build system:
	    - Augmented cspython/Jamfile so that it creates python.cex.
	    - Augmented csperl5/Jamfile so that it creates perl5.cex.
	    - Made the cspythonclean and csperl5clean targets depend upon the
	      pythonswigclean and perl5swigclean targets, respectively, so that
	      they also remove the Swig-generated files.
	    - Fixed generation of perl5.cex by cspython.mak. The script it
	      created was entirely dysfunctional and completely useless.
	- Eric Sunshine resolved a precedence issue with CS_CHECK_LIB_WITH()
	  (checklib.m4) in which it could be fooled into ignoring the path
	  given via --lib-withfoo=path if 'foo' was also installed in one of
	  the standard locations searched by the compiler and linker.
	  Specifically, it would check "path" first before checking
	  "path/include" and "path/lib", however if a version of 'foo' was also
	  installed in a standard location (other than "path"), then it would
	  never get around to trying "path/include" and "path/lib" because it
	  would find the installation at the standard location.
	- Eric Sunshine fixed bug in csGLGraphics3D::Initialize()
	  (gl_render3d.cpp) where it neglected to check if the canvas plugin
	  load request failed; leading to a crash if the canvas did not load.
	- Eric Sunshine fixed bug in csObjectRegistry::Register() where it
	  would crash if handed a null pointer. Also improved Doxygen
	  documentation of iObjectRegistry.
22-Apr-2004
	- Jorrit removed motion and motldr from Jamrules for static
	  compilation.
	- Jorrit fixed a compilation error of the engine with OR.
	- Jorrit removed the almost unused CS_CLIP_PORTAL flag for clipping
	  (was only used in the OR GL renderer). This greatly simplifies the
	  clipping routines.
	- Jorrit added a new iRenderView->CalculateClipSettings() routine
	  which calculates the clip settings out of the frustum mask. This
	  can be used by GetRenderMeshes() implementations of meshes instead
	  of calling the complicated ClipBBox()/ClipBSphere() routines. This
	  will be a lot faster.
	- Jorrit extended thing and genmesh to use the new system already.
	- Jorrit extended spr2d, spr3d, ball, and sprcal3d to use the new
	  system.
	- Jorrit temporarily fixed the clipping bug in the NR GL renderer.
	  Have to think about this a bit more though.
	- Eric Sunshine re-engineered the Doxygen rule in docs.jam to correct
	  a problem where its actions would emit warnings of the form:
	    Copy ./out/docs/html/api
	    rm: cannot remove `./out/docs/html/api': Is a directory
	- Eric Sunshine fixed problem in jobber.pl where the shell was
	  inadvertently interpreting $'s in Jamconfig creation code.  Also
	  installed on shell.sf.net the new version of jobber.pl which utilizes
	  Jam for its maintenance tasks, rather than GNU make.
	- Jorrit fixed two compile errors in CS: one in iso engine and one
	  in OR/engine.
21-Apr-2004
	- Jorrit fixed compilation of the engine plugin with OR after
	  breaking it yesterday.
	- Jorrit extended the genmesh version of HitBeamObject() so that
	  it will now return the index of the triangle that was hit.
	  That way it will also work with iSector->HitBeam() and
	  HitBeamPortals().
	- Jorrit removed the csRenderContextFrustum class and merged it with
	  csRenderContext. There is a one-to-one relationship between
	  those classes so it doesn't make sense to have the additional
	  overhead (more pointer redirection, more object management) for this.
	  Also I'm planning a big redesign of this anyway.
	- Jorrit removed several of the methods in iRenderView and put them
	  non-virtual and private to the engine in csRenderView instead.
	  All these methods are internal for the engine and should not be
	  exposed to the outside (methods like CreateRenderContext and so on).
	  This has the nice benefit of making the engine a bit faster again
	  (less virtual function calls).
	- Jorrit started a unification of the frustum culling that happens
	  in the cullers (Frustvis and Dynavis), and also the frustum
	  culling that every object does in DrawTest() (for OR) and
	  GetRenderMeshes() (for NR) using iRenderView->ClipBSphere() or
	  ClipBBox(). Currently the following steps are done:
	    - csRenderView has a new SetupClipPlanes() method that sets up the
	      current clip planes in world space for the current clipper and
	      camera.
	    - Extended iVisibilityCullerListener->ObjectVisible() with a new
	      frustum_mask parameter.  This parameter will be given by the
	      cullers and contains a bit mask telling the engine which planes
	      (out of csRenderView) are relevant (i.e.  which planes
	      potentially intersect with the object).  This is compatible with
	      csIntersect3::BoxFrustum().
	    - Enhanced Dynavis and Frustvis to pass along the frustum_mask to
	      ObjectVisible.  Both Dynavis and Frustvis already use
	      BoxFrustum() and a frustum_mask to hierarchically do frustum
	      culling on the kdtree for all objects.  So passing this bitfield
	      along comes naturally.
	    - Extended iMeshObject->GetRenderMeshes() with an extra
	      frustum_mask parameter.  The ObjectVisible() function will call
	      GetRenderMeshes() with that parameter.  Note that for OR we will
	      not support this optimization as it is hard to do there and NR is
	      the future anyway.
	    - Removed the unused iMeshWrapper->GetRenderMeshes().
	    - Extended all mesh objects to accept this new parameter in
	      GetRenderMeshes().  None of the mesh objects will actually use it
	      yet.  This is the next stage.
	    - Enhanced the Frustvis and Dynavis plugins to use the clip planes
	      as setup in csRenderView instead of having them make their own
	      clip planes.  This saves a bit of processing there.
	- Eric Sunshine eliminated Cygwin compiler warnings about types not
	  matching printf-format directives in win32/callstack.cpp.
	- Eric Sunshine fixed problem in Recurse rule in helper.jam where it
	  was using 'rule' as a variable name. This confused BoostJam since
	  'rule' is also a keyword.
	- Jorrit fixed a big booboo in the clipper enhancements he did
	  yesterday on chunklod. The results of the BoxFrustum() routine
	  were interpreted wrong which causes them to cause unneeded
	  clipping.
	- Eric Sunshine made the following changes to the Jam-based msvcgen
	  mechanism:
	    - Fixed bug where msvcgen was inserting Unix-style compiler and
	      linker flags from Jamfile invocations of CFlags and LFlags into
	      generated project files.
	    - Enhanced the MsvcGenConfig rule so that it can accept
	      configuration for the msvcgen process in both the form of an
	      external file, and in the form of key/value tuples.
	    - Removed a couple CS-specific configuration options (USE_PLUGINS
	      and USE_NEW_RENDERER) from the project-agnostic
	      mk/jam/msvcgen.jam and placed them into the new CS-specific
	      mk/msvcgen/Jamfile.
	    - Refined the way modules are selected for project-file generation
	      candidacy so that it more closely parallels the way modules are
	      selected for building by the Autoconf configure script.
	    - The new mk/msvcgen/Jamfile creates a custom Jamconfig.msvcgen
	      file for the msvcgen process on-the-fly.  This is a hybrid of a
	      filtered version of the local Jamconfig file and a boilerplate
	      file containing setting specific to MSVC.  This allows the
	      msvcgen process to take advantage of local tools (discovered by
	      the configure script) while still producing project files
	      suitable for MSVC.
	    - This set of changes concludes the high-priority work on the
	      Jam-based msvcgen facility.  The generated project files are now
	      (finally) compatible with the ones produced by the GNU make-based
	      msvcgen facility, and are suitable for actual use.
	- Eric Sunshine fixed bug in "missing file type" warning in
	  CompileObject rule in objects.jam.  It was referencing wrong input
	  argument.
	- Eric Sunshine converted jobber.pl to utilize Jam for all maintenance
	  tasks, rather than using GNU make.  (Unfortunately, this is not yet
	  installed on the SourceForge shell machine.  With CVS access so
	  critically slow -- nearly two hours for a "cvs update", let alone an
	  actual checkout -- it is not possible to check if the changes to
	  jobber.pl are entirely correct.  Consequently, it can not yet be
	  placed into production.)
	- Neil Mosafi added a #include directive to ivideo/custcursor.h because
	  it was not able to find the definition for csRGBcolor.
	- Eric Sunshine fixed bug in joywin.mak where it was trying to install
	  the non-existent data/joywin.zip.
20-Apr-2004
	- Jorrit added 'camera_origin' to csRenderMesh. The meshes will
	  fill this field with the origin of that mesh in camera space. This
	  will be used for sorting alpha render priority.
	- Jorrit optimized the alpha render priority sorter by using
	  the new camera_origin field in csRenderMesh.
	- Jorrit removed the unused and non-functional bcterr mesh object.
	- Jorrit changed iEngine->GetTopLevelClipper() to return an
	  iRenderView instead of an iClipper2D.
	- Jorrit added iRenderView->ClipBBox() that doesn't want the 2D
	  box argument (only does rview frustum check with the 3D box).
	- Jorrit changed several of the important csRenderView methods
	  to use internal engine cs classes instead of interfaces (avoids
	  virtual function calls).
	- Jorrit replaced the 'frustum' in csRenderContextFrustum with an
	  array of csPlane3 instead of an array of csVector3.
	- Eric Sunshine made the following changes to the Jam-based msvcgen
	  facility:
	    - Added --response-file option to msvcgen.pl, which allows
	      msvcgen.pl to collect pathnames (one per line) from the contents
	      of specified files in addition to collecting them from the
	      command-line.
	    - Added a ResponseFile rule to helper.jam which creates a file from
	      a set of items (items are emitted one per line).  This rule can
	      be invoked multiple times for the same file, allowing it to be
	      populated incrementally.
	    - Augmented msvcgen.jam to work around a fatal limitation in Jam
	      which caused project file creation to bomb out frequently except
	      when $(TOP) and $(BUILDTOP) were very short pathnames (such as
	      "C:\CS" or "/home/foo/CS").  Jam places a fairly restrictive
	      limit on the length of a command-line which it will invoke from
	      an 'actions' block, and rudely aborts if the command exceeds that
	      limit.  Even moderately sized projects, such as csutil, easily
	      exceed Jam's command-line length limit when mentioning its source
	      and header files in the msvcgen.pl invocation command.  Ditto for
	      workspaces, which are typically composed of many, many project
	      files.  To work around this limitation, msvcgen.jam uses the new
	      ResponseFile rule, and --response-file mechanism of msvcgen.pl to
	      avoid having to create such lengthy command-lines.
	    - Renamed the msvcgen6 and msvcgen7 targets to msvc6gen and
	      msvc7gen, respectively.  Also added mvsc6clean and msvc7clean
	      targets.
	- Eric Sunshine fixed several Jamfiles throughout the project to
	  utilize the portable FDefines and FIncludes rules instead of
	  harcoding -D and -I.
	- Jorrit fixed a compile error in spr3d for OR.
	- Jorrit added a new iRenderView::ClipBBox(). This versions works with
	  an object space bbox instead of a camera space bbox. This has the
	  advantage of being much more accurate. Instead of transforming the
	  object bbox to camera space (which will make it larger) the frustum
	  is now transformed from camera to object space.
	- Jorrit changed chunklod mesh object plugin to use this new
	  ClipBBox() routine.
	- Jorrit split the new iRenderView->ClipBBox() routine in
	  iRenderView->SetupClipPlanes() and ClipBBox(). That way it is
	  possible to call SetupClipPlanes() in advance and then reuse
	  it multiple times. Chunklod now uses this technique.
	- Jorrit made iRenderView->ClipBBox() return a modified frustum
	  mask so it can be used for hierarchically culling bbox trees.
	  Chunklod now uses this.
	- Eric Sunshine fixed bug in the SetProperty rule in property.jam.  It
	  was ignoring the incoming value and unconditionally setting the
	  property to 'true'.
19-Apr-2004
	- Eric Sunshine added LGPL license notice to the .m4 and .jam files.
	- Jorrit fixed a bug in iEngine->CreatePortalContainer(). If there
	  is a portal render priority then the created mesh will automatically
	  get that render priority.
	- Jorrit removed support for skeletal sprites. Instead you should
	  now use sprcal3d objects.
	- Jorrit removed the mottest program since it depends on skeletal
	  sprites. One should wonder if the entire motion plugin still
	  makes sense now.
	- Jorrit removed the walktest 'setmotion' command.
	- Jorrit removed the walktest 'addghost' and 'addskel' commands.
	- Jorrit removed the motion manager plugin. It was not very nicely
	  designed and I question the usability of the plugin.
	  Also removed associated iSkeletonBone.
	- Eric Sunshine made the following changes to the Jam build system:
	    - Augmented msvcgen.jam so that it is capable of generating
	      multiple workspaces, rather than being hardcoded to produce only
	      a single workspace named "wksall" containing all
	      projects. Workspaces are controlled by client invocation of the
	      new MsvcGenWorkspace rule. This rule allows clients to specify,
	      not only which workspaces to create, but also the contents of
	      each workspace.
	    - Added CS/mk/msvcgen/workspaces.jam, which specifies the
	      workspaces to create for CS. CS/Jamrules includes this file.
	      (Unfortunately, there are now so many projects being included in
	      workspaces, that the command to actually build a workspace
	      overflows Jam's maximum command-line length, causing it to
	      abort. Working around this Jam limitation is the next task.)
	    - Removed code from the MsvcProject rule which was copied directly
	      from win32.jam. Instead, now calls MakeVersionRc in win32.jam to
	      achieve the same result. Also cleaned up other portions of
	      MsvcProject.
	    - Added an invocation of Help for the 'msvcclean' target.
	    - The MakeVersionRc rule in win32.jam now prefers
	      $(PACKAGE_LONGNAME) if available rather than $(PACKAGE_NAME).  If
	      neither is available, it just uses the bare target name as the
	      package name.
	- Eric Sunshine eliminated TeX 'underfull hbox' warning from
	  apimod98.txi.
	- res added a workaround to csArray<>::Push() for the case an element
	  from the array itself was pushed. Under certain circumstance, bogus
	  data was pushed onto the array.
18-Apr-2004
	- Eric Sunshine fixed CS/bin/autogen.sh so that it returns the exit
	  status of 'autoconf' as its own exit status. This allows invokers of
	  autogen.sh to determine if Autoconf failed.  Also removed out-of-date
	  comment in autogen.sh.
	- Eric Sunshine fixed bug in CS/docs/doxygen/Jamfile where it failed to
	  mention doxygen.css in the argument list for the Doxygen rule.
	- Eric Sunshine relocated the HTML-specific ScanDocDirs rule from
	  CS/docs/Jamfile to CS/docs/html/Jamfile, and also renamed it to
	  InstallHTMLDocs to better reflect its function.
	- Jorrit re-enabled the clipping optimization in NR GL renderer
	  after fixing partsys so it has a 'portals' render priority.
	- Eric Sunshine added a general-purpose Recurse rule to helper.jam
	  which recursively scans a directory tree for files matching types
	  specified by the client, and invokes a client-specified Jam rule for
	  each discovered file.
	- Eric Sunshine removed the InstallHTMLDocs and ScanHeaders rules
	  (docs/html/Jamfile & include/Jamfile), and replaced them with simple
	  invocations of the new Recurse rule.
	- Eric Sunshine added missing lghtngldr.csplugin, lghtngldr.mak, and
	  mesh/lghtng/persist/standard/Jamfile.
	- Eric Sunshine removed the unused and unmaintained Arts and EAX sound
	  renderers. For easy revival, they have been tagged in CVS with
	  ARTS_OBSOLETE and EAX_OBSOLETE, respectively.
	- Eric Sunshine removed the unused and unmaintained GLX/Glide driver.
	  For easy revival, it has been tagged in CVS with GLXGLIDE_OBSOLETE.
	- Eric Sunshine fixed aesthetic problem with "jam help" message for
	  install target. It read "Build the Install crystal", which was not
	  especially sensible. Made install help message more robust; it now
	  prefers PROJECT_LONGNAME before PROJECT_NAME, and falls back to
	  "Install the project" if neither is defined.
	- Eric Sunshine added help messages for the all, apps, libs, plugins,
	  clean, and distclean pseudo-targets.  Also fixed some other minor
	  aesthetic problems with the output of "jam help".
	- res made the following changes:
	    - Added doxygen documentation for macro-generated csString members.
	    - Fixed doxygen doc for CS_INITIALIZE_PLATFORM_APPLICATION.
	    - Fixed some compiler errors in minidump.cpp.
	- Eric Sunshine made the following changes to the Jam build system:
	    - Added a general-purpose "property bag" mechanism.  Jamfiles are
	      free to create property containers and populate them as
	      desired. Other Jamfiles can then query the containers in order to
	      conditionalize build behavior.
	    - CS/Jamrules now assigns to the 'build' container the property
	      'newrenderer' with value "true" when the project is configured
	      for the new-renderer.
	    - msvcgen.jam now assigns to the 'build' container the properties
	      'projgen' with value "msvc", and 'projgen_version' with value 6
	      or 7 when building project files. (Future project file
	      synthesizers will use other values for 'projgen'. For instance, a
	      generator of Borland project files might set the value to
	      "cbuilder", and a generator of Apple project files might set the
	      value to "xcode".)
	    - Fixed problem where msvcgen.jam was creating project files for
	      numerous modules for which it made no sense to generate MSVC
	      project files, such as those specific to MacOS/X and Unix.
	    - Fixed problem where msvcgen.jam failed to create project files
	      for both the old- and new-renderers (needed for wksall, for
	      instance).  Previously, it was capable of creating projects for
	      either only the old-renderer or the new-renderer, but not both at
	      the same time.
	    - Added 'noinstall' option to a lot of modules which were being
	      installed despite the fact that they have no practical value
	      when installed.
	    - Fixed numerous cases where Unix-style pathnames were hard-coded
	      into Jamfiles, rather than relying upon the portable ConcatDirs
	      rule.  Likewise, converted serveral Jamfiles to utilize the
	      portable $(DOT) and $(DOTDOT) rather than hardcoding "." and
	      "..".
	- Eric Sunshine removed the unused and incomplete PicoGUI plugin and
	  test program.  For easy revival, they have been tagged in CVS with
	  PICOGUI_OBSOLETE.
	- res removed ivaria/gconnect.h and gserver.h which were only used to
	  interface PicoGUI.
	- res made a small documentation fix to vosa3dl.h.
17-Apr-2004
	- Aren Blondahl updated map2cs to have newly optimized render priority
	  on entities ('priority' tag in the .map) and fixed map2cs to support
	  new alpha flag under <mixmode> instead of under each polygon.
	  ('alpha' tag in the .map)
	- Aren Blondahl patched map2cs's light format to comply with <radius>
	  tag, and added in brightness / influence radius support.
	- res fixed a crash bug in the Win32 GL canvas when the WGL "extension
	  string" extension was not present.
16-Apr-2004
	- Jorrit fixed a crash at exit for genmesh with NR.
	- Eric Sunshine fixed bug in Jam build system where msvcgen target
	  would insert AWS's Bison and Flex input files into AWS project file
	  rather than the related .cpp and .h files.
	- Eric Sunshine worked around problem where msvcgen.jam reported that
	  it did not know how to locate or create <grist>csperlxs.c when
	  PERL5.AVAILABLE was "yes".  (A more correct fix will involve a
	  paradigm shift in the way this glue file is handled.  The present
	  scheme is completely incompatible with the notion of project files.
	  Details of the problem are avalable in cscript/csperl5/Jamfile.)
	- Jorrit added an entry to the GL driver database so that stencil
	  clipping is prefered for ATI Radeon style cards.
	- Jorrit removed the entry from the GL driver database that forced
	  stencil clipping for GeForce4 Go cards. Don't know why in the
	  past that seemed to cause massive slowdown. It no longer does that.
	- Jorrit made stencil clipping default again for the new renderer.
	  It does make flarge slower but that's because flarge is really
	  not designed for good hardware (objects don't have sufficient
	  number of triangles).
	- Jorrit optimized the NR GL renderer by only setting up the stencil
	  clipper if the clipper is not optional. That seems to help a
	  great deal already.
	- Jorrit removed the Video.OpenGL.PreferClipPlane setting. Instead
	  there is now a Video.OpenGL.StencilThreshold setting. This is
	  the number of triangles for a single object after which the
	  NR GL renderer will use stencil clipping instead of plane
	  clipping. By default this is set to 500. With this optimization
	  I managed to improve performance in walktest flarge from 87
	  to 209 fps! (for new renderer).
	- Eric Sunshine fixed bug in msvcgen.jam where the overriden
	  Application rule was employing an incorrect mechanism for detecting
	  console applications.  Also eliminated hard-coded use of Unix-style
	  pathnames.
	- Eric Sunshine performed project-wide spelling correction:
	    thresshold --> threshold
	- Jorrit added csKDTree::NewTraversal() so that it is now possible
	  to safely traverse the KDtree manually. This function will calculate
	  and return a new timestamp.
	- Jorrit added csKDTree::TraverseRandom(). This will also traverse
	  the kdtree but in random order. Changed Frustvis and Dynavis to use
	  this when appropriate.
	- Jorrit optimized Frustvis a bit by doing a manual custom traversal of
	  the tree instead of calling Front2Back().
	- Eric Sunshine augmented the CompileGroups rule in groups.jam so that
	  it complains if handed a compile group which was not registered via
	  RegisterCompileGroups.
	- Eric Sunshine augmented msvcgen.jam to make it possible to invoke the
	  'msvcgen', 'msvcgen6', and 'msvcgen7' targets directly, instead of
	  having to run the stand-alone mk/msvcgen/msvcgen.sh shell script.
	  (The 'msvcgen' target is just a shortcut which invokes the other two
	  targets.)  Removed the msvcgen.sh script.
	- Jorrit added some initialization code to Data in the chunklod
	  terrain engine in an attempt to fix the strange texture swaps.
	  Didn't help though.
	- Jorrit temporarily disabled one of the NR GL optimizations he
	  did earlier. Have to rethink it. Walktest is now down to 160 fps
	  (still better than 87!).
15-Apr-2004
	- Eric Sunshine added a blurb to the Unix and MacOS/X build
	  instructions cautioning about potential problems caused by
	  carelessness when transfering the project source code from Windows to
	  Unix, and how not all Unix utilities deal gracefully with Windows
	  line-terminators.  Also updated quite outdated Unix build
	  instructions.
	- Eric Sunshine added an 'options' argument to the Help rule in
	  help.jam.  Presently, the only recognized option is "verbatim", which
	  tells Help to emit the 'description' string verbatim, without
	  prepending "Build the".
	- Eric Sunshine upgraded installation of $BUILDTOP/include/volatile.h
	  by Jam so that it employs the more robust check used by
	  $TOP/Jamfile.in to see if the build directory differs from the source
	  directory.  (The old scheme of checking could be fooled.)
	- Eric Sunshine added a 'repairdoc' target to texinfo/Jamfile which
	  invokes CS/docs/support/nodefix.pl to repair broken Texinfo @node and
	  @menu directives.
	- Jorrit fixed a bug in the nullmesh factories. They didn't
	  implement iNullFactoryState.
	- Jorrit made iNullFactoryState a subclass of iNullMeshState since
	  they were exactly the same.
	- Jorrit fixed the null mesh NewInstance() so that the parameters
	  of the factory are copied to the null mesh.
	- Eric Sunshine made the following changes to docs.jam and the other
	  documentation-related Jamfiles:
	    - Added documentation-specific 'clean' targets ('manualinfoclean',
	      'manualhtmlclean', 'apihtmlclean', etc.).
	    - Added a 'cleandoc' target (and a 'docclean' alias).
	    - Updated the global 'clean' target to also remove built
	      documentation.
	    - Fixed several cases in docs.jam where it was hard-coding
	      Unix-style pathnames when referencing supporting resources.
	- Jorrit completely changed the way static lod culling works. A static
	  lod mesh is basically a hierarchical mesh. So you have a parent mesh
	  (which typically uses null mesh so that it is not visible) and
	  then several children. Which child is rendered depends on how
	  far the mesh is from the camera. By default CS will register
	  EVERY mesh and child mesh to the visibility cullers. So even
	  for a hierarchical mesh it will register all meshes in that
	  hierarchy seperately. For normal hierarchical meshes this makes
	  sense as it is possible for a child to be visible while the parent
	  is not (i.e. imagine the hand mesh of an actor to be visible but
	  all the rest obscured). However, for static lod this doesn't make
	  much sense as typically all meshes for static lod should have
	  roughly the same bounding box. So if one is visible they are all
	  visible (except that the lod mechanism will choose one to display).
	  So when static lod is detected the engine will only register
	  the parent mesh to the culler. If the parent mesh is considered
	  visible then it will itself find out which child meshes are relevant
	  for the given camera position and then call make them visible
	  in turn. Doing that static lod meshes causes a LOT less
	  overhead in the visibility culler and it also makes the handling
	  of static lod meshes a bit easier. In case a hierarhical mesh
	  is used as a child of a static lod mesh, when the hierarchical
	  mesh is considered visible for the given distance to the camera,
	  then the entire hierarchy is made visible. In this sense
	  a hierarchical mesh as part of a static lod will be culled entirely
	  or not (as opposed to each individual child which normally happens
	  with hierarchical mesh objects).
	- Eric Sunshine fixed bug in aws/Jamfile where it neglected to invoke
	  NotFile for the target which copied the generated Bison/Flex files
	  back to the source directory.  Also added a Help invocation for this
	  target.
	- Eric Sunshine fixed aws/Jamfile so that it utilizes the portable
	  FIncludes rule rather than hard-coding -I directives.
	- Eric Sunshine changed the Copy rule in helper.jam so that it
	  overrides Jambase's default value of $(CP) "cp -f" to avoid using the
	  -f flag, since older platforms do not support it.  Also removed the
	  obsolete SearchSubdir rule.
	- Jorrit extended csKDTree class with GetChild1() and GetChild2().
	  This allows manual traversal of the tree.
	- Jorrit optimized Frustvis so that it detects when a node is fully
	  in the frustum. In that case it will stop traversing the tree
	  in front to back mode but instead just mark all objects inside
	  that node (and inside children of that node) as visible. This
	  greatly reduces visibility processing and also avoids the need
	  to distribute that part of the tree. This optimization will help
	  in all cases but especially in large open areas (i.e. landscape
	  with many objects on it). Note that the effectivity of this
	  optimization is currently reduced because the bbox of the kdtree
	  is too big. Have to find a solution for that first.
	- Jorrit removed un unused field in frustvis. This field was being
	  tested but never filled. So totally useless.
	- Jorrit changed the chunklod mesh object (NR terrain engine) so that
	  it now returns an accurate bbox instead of the previous bbox
	  that was WAY too big. It now uses the bbox of the root quad.
	  Also fixed GetRadius() to use this bbox.
	- Jorrit fixed nullmesh so it properly implements iNullMeshState
	  now.
	- Jorrit changed frustvis so that it now keeps a global bbox of
	  everything that enters the kdtree. This box will always grow
	  (never shrink). When testing nodes against the frustum this box
	  will be used to calculate the REAL bbox of every kdtree node.
	  This makes the kdtree nodes much smaller (they are now artificially
	  big) and this will greatly increase the efficiency of frustvis
	  (and especially in combination with the optimization above).
	- Jorrit also changed Dynavis in a similar manner.
	- Eric Sunshine made the following Swig-related changes to the Jam
	  build system:
	    - Re-designed and re-wrote the Swig rule almost completely from
	      scratch.  It is now much more functional, thus allowing
	      near-duplicated code invoked manually by callers to be
	      eliminated.
	    - Fixed the Swig rule so that it now emits generated files to the
	      build directory rather than the source directory, since the
	      source directory might be read-only or shared.
	    - The Swig rule now publishes a "$(tag)swig" pseduo-target for each
	      client which allows production of the Swig-generated files by
	      explicit user request.  Likewise, it publishes a
	      "$(tag)swigclean" target which removes the generated files.
	    - The Swig rule now optionally publishes a "$(tag)freeze"
	      pseudo-target which copies the generated files back to the source
	      tree at explicit user request.
	    - Fixed the Swig rule so that, upon explicit request, it writes
	      files to the source tree at the _correct_ locations, rather than
	      placing them in completely foreign positions.
	    - Fixed cspython/Jamfile and csperl5/Jamfile to take advantage of
	      these new facilities so that they no longer emit generated files
	      to the source tree, which was broken behavior since that
	      directory migth be read-only or shared.
	- Remi Bonnet added a scriptable action in aws for the notebook
	  component. This allow a program using Crystal Space to change the
	  active tab dynamically.
	- Remi Bonnet made csSet::Delete returns whether an object was deleted
	  or not.
	- res added a facility to the common shader plugins to simplify the use
	  of program parameters that can either be constants or shader
	  variables. (Functionality overlaps with variable mappings; would be
	  nice colllapse var mappings and shader params at some point.)
	- res augmented the light iter step to also provide the light position
	  in world coordinates.
	- res fixed the GL fixed vertex program to correctly use the light
	  world position by default.
	- res added fixed function-only terrain shaders. Support splatting and
	  fading to flat, but not yet lighting.
14-Apr-2004
	- Eric Sunshine fixed bugs in csString where GetData() and the (char
	  const*) operator would incorrectly return a null pointer at times.
	  (These methods should always return a zero-length C-string when the
	  csString is empty; they should never return null.)
	- Eric Sunshine updated Doxygen comments for csStringHash.
	- Jorrit fixed an initialization error in the NR OpenGL renderer
	  with the new clipportal_dirty flag. Please people! Initialize
	  your variables!!!!!
	- Jorrit fixed missing SCF_CONSTRUCT_IBASE in the
	  eiShaderVariableAccessor instances of genmesh.
	- Jorrit removed the non-functional GetHeightMap() function
	  from iTerrainFactoryState and made some other small changes
	  to the API (mostly adding 'const' where needed). Also removed the
	  non-functional GetMaterialMap() function from iTerrainObjectState.
	- Jorrit discovered that MeshTreeNode in the NR terrain engine
	  was doing some SCF stuff for no reason at all (it didn't even
	  inherit from iBase).
	- Eric Sunshine added a backward-compatibility hack to csString to
	  allow projects to recover the old, buggy, undocumented, accidental
	  behavior where csString::GetData() and the (char const*) operator
	  returned a null pointer instead of a zero-length string in certain
	  indeterministic cases if the string was empty.  Projects should
	  #define CSSTRING_BUGGY_NULL_RETURN before #including
	  <csutil/csstring.h> to enable this temporary transitional hack.
	- Jorrit changed iTerrainFactoryState->SetMaterialMap() so that
	  it uses a const csArray<>& instead of a csArray<> as a parameter.
	- Eric Sunshine applied a simple fix to stdrep's
	  csReporterListener::HandleEvent() to work around a bug where the line
	  wrapping code would loop infinitely once it got to the last line in
	  wrapped message if that line contained only a single word.  (A more
	  correct fix would be to re-write this code completely, since it is
	  unnecessarily obfuscated and convoluted, and about three times as
	  long as it needs to be.)
	- Eric Sunshine upgraded csString so that it makes a distinction
	  between a null-string and a zero-length string.  This distinction is
	  now clearly documented.  Client code can check for these conditions
	  in the normal fashion by invoking csString::GetData() or operator
	  char const*() to retrieve a C-string representation of the string.
	  If the result is zero, then it is a null-string.  If the result is
	  non-zero but csString::Length() returns zero, then it is a
	  zero-length string.  This means that existing code in external
	  projects which incorrectly relied upon the broken, indeterminate, and
	  undocumented accidental null-string vending of the past can now rely
	  upon the behavior as supported and deterministic.  The new
	  convenience method csString::GetDataSafe() will always return a valid
	  C-string, even if the underlying csString represents a null-string
	  (in which case a zero-length C-string "" will be returned).  This
	  means that the result of GetDataSafe() can be used directly without
	  performing a null check.  Fixed several csString methods which would
	  crash when the underlying representation was a null-string.  Also,
	  completely overhauled the remaining csString and iString
	  documentation.
	- Jorrit optimized the NR terrain engine by removing an unneeded
	  call to ClipBBox(). If ClipBSphere() is used then that's sufficient.
	- Eric Sunshine fixed bug in the deprecated csutil/hashmap.h where it
	  was re-declaring the csHashCompute() functions with signatures
	  different from the ones in csutil/hash.h.
	- res removed a commented-out debug printf() in
	  csHashMap::ChangeBuckets(). The comment was errorneously line-broken,
	  causing compile errors.
	- Eric Sunshine fixed CS_TEXT_CACHE_OUTPUT() in textcache.m4 to do a
	  better job of cleaning up after itself.
	- Jorrit disabled the use of fputws for now until we find out a way
	  to discover buggy implementations of fputws.
	- res augmented the fixed function FP tp support GL fog.
	- res fixed a bug where binding a vertex buffer to multiple
	  destinations didn't work (was only bound to the first destination).
	- res augmented the chunklod plugin to also provide normalized tex
	  coords (ie go from 0 to 1 over the area of the terrain).
	- Eric Sunshine fixed a silly oversight in install.mak where the
	  'install' target failed to be recognized by the sub-make invocation,
	  despite the fact that the other targets, such as 'install_config',
	  'install_plugin', etc., were recognized.  Reported by Atis Elsts
	  <prophet@balticom.lv>.
13-Apr-2004
	- Jorrit changed the PreferClipPlane default to enabled for the new
	  renderer. Now clipping planes are enabled by default and only
	  disabled in some cases (like on GF Go hardware).
	- Jorrit changed csKeyValuePair and csMapNode so that they no
	  longer use embedding to implement iKeyValuePair and iMapNode.
	- Jorrit started enhancing the API documentation by adding three
	  sections to every common interface definition:
	    - Main creators of instances implementing this interface
	    - Main ways to get pointers to this interface
	    - Main users of this interface
	  The idea is to make it easier for the user to find out how
	  to obtain instances of some interface and how those interfaces
	  are supposed to be used.
	- Jorrit removed the unused iDataObject and csDataObject.
	- Luca improved the speed of csLoader::CollectAllChildren method.
	- Jorrit found out that walktest was actually using iDataObject.
	  Instead of reviving iDataObject, fixed Walktest so that it no
	  longer requires it.
	- res fixed a bug in the AVI handler where a loop counter was
	  incremented twice.
	- Jorrit implemented a considerable optimization in Dynavis
	  and Frustvis by replacing csHashSet with csSet<T>.
	- res augmented the GL fixed shader program plugin to allow
	  manipulation of the texture matrix.
12-Apr-2004
	- Luca added some code to csloader.cpp/*.h to recursively handle the
	  flags in meshes' children if needed.
	- res ported OpenPortal() to NR. Still has issues, though.
	- res updated todo_newrenderer.txt.
	- res ported the halo stuff to NR. Work somewhat (except flares), but
	  could be better.
	- res augmented the csPolygonRenderData struct so normals for smoothed
	  things are passed along to the poly renderer.
11-Apr-2004
	- Eric Sunshine applied a patch from Andres Freund <andres@anarazel.de>
	  to several of the templated csArray<> subclasses which ensures that
	  all names mentioned by the templates are "dependent".  This allows
	  the templates to build correctly with modern compilers, such as gcc
	  3.4.x.  For details of "dependent" template contexts, see:
	  http://gcc.gnu.org/onlinedocs/gcc/Name-lookup.html
	- Eric Sunshine fixed bug in csModelConverterSPR where it informed
	  clients that it could neither load nor save sprites, thus rendering
	  itself quite useless as a sprite importer/exporter.
	- Eric Sunshine fixed a bug in install.mak where the sub-install rules,
	  such as install_config, install_doc, etc., would uselessly create an
	  empty subdirectory within the build directory with the same name as
	  the rule (i.e. "install_config", "install_doc", etc.).
	- Eric Sunshine fixed bugs in several rules in docs.jam where NotFile
	  was being invoked for actual files.
	- Eric Sunshine fixed bug in group.jam where it failed to invoke
	  NotFile for the registered group names.
	- Eric Sunshine fixed bug in cs-config/Jamfile (and install.jam) where
	  the install target did not know how to build cs-config if it did not
	  already exist at installation time.
	- Eric Sunshine fixed bugs in glshader_cg and renderloop/stdsteps where
	  they were returning boolean values from methods declared as returning
	  csPtr<>.
	- Eric Sunshine added a ShellScript rule to application.jam, which
	  roughly parallels the Application rule, except that it builds a shell
	  script, rather than an application.  The ShellScript rules takes care
	  of all the typical housekeeping, such as setting up the installation
	  and clean targets, and ensuring that the script is executable once
	  created.  The actual content of the generated shell script is
	  provided by a client-supplied "content creation" rule.  The cs-config
	  script is now created via this new mechanism.
	- Jorrit did more API documentation enhancements
	  (iEngineSequenceManager) and also added a few constants
	  instead of 0, 1, and 2 for AddConditionLightChange().
	- Eric Sunshine fixed Doxygen configuration so that it properly
	  propogates documentation to group members when only the first member
	  is documented.  (This is common, for instance, when all elements of a
	  group want the same documentation string.)
	- Eric Sunshine fixed csEngine::CreateDefaultRenderLoop() so that it
	  does not crash outright if it fails to load the
	  crystalspace.renderloop.step.generic.type plugin.
	- Eric Sunshine fixed bug in stdstep/rlsstd.mak where link libraries
	  were mis-ordered, thus resulting in plugin load failure on account
	  of missing symbols.
	- Eric Sunshine fixed bug in csperl5.mak where csperl5 was not linked
	  against csgfx, thus resulting in load failure on account of missing
	  symbols.
10-Apr-2004
	- Jorrit fixed a bug in spr3d with new renderer. It would try to
	  tween vertices also for skeletal animation. That would cause
	  crashes for skeletal sprites.
	- Jorrit fixed a memory leak in genmesh with new renderer. Please
	  don't use embedded interfaces for SharedVariableAccessor since that
	  will cause a circular reference.
	- Jorrit removed the unused, unimplemented, and badly designed
	  iCollideSystem->CreateSphereCollider() and CreateBoxCollider().
	  Fixed RAPID and OPCODE plugins for this change.
	- Jorrit augmented the API documentation of iCollideSystem.
	- Luca has fixed a tiny error in the engine plugin. The error was
	  returning a value in a function whose return value is void. He
	  also updated the doxygen's comment for the iMeshWrapper::GetFlags()
	  method.
	- Aren Blondahl revised <settings> block in map2cs and added ambient
	  lighting, clearscreen, and maxlightmapsize support to map2cs.
9-Apr-2004
	- Jorrit added iMeshWrapper->SetZBufModeRecursive(),
	  SetFlagsRecursive(), and SetRenderPriorityRecursive(). These
	  functions will do the same as their respective non recursive
	  variants but they will also perform the operation on the
	  children of the mesh (and their children).
	- Jorrit extended the map loader so that when you use 'meshref' the
	  flags like render priority, zbuf mode and so on will be propagated to
	  the children too.
	- Eric Sunshine simplified the unnecessarily obfuscated map2cs
	  prototype for CMapPolygon::CheckIfInside() since it caused grief for
	  gcc 3.4.x which considered one invocation of the method ambiguous.
	- Eric Sunshine fixed a couple problems reported by Andres Freund
	  <andres@anarazel.de> in maya2spr's BinaryTreeIterator<> template.
	  (1) Last() was modifying the non-existent variable 'bWentLeft'. (2)
	  Prev() calls printf() in a non-dependent manner, which caused gcc
	  3.4.x to fail with a compiler error since <stdio.h> had not been
	  #included. See http://gcc.gnu.org/onlinedocs/gcc/Name-lookup.html for
	  an explanation of why printf() must be declared before it is used in
	  a non-dependent template context.
	- Eric Sunshine augmented the CPU-specific optimization flag check in
	  configure.ac so that it first attempts the -march= variations before
	  attempting -mcpu=, -mpentiumpro, and -mpentium since the latter flags
	  are officially deprecated in gcc 3.4.x.
	- Eric Sunshine fixed bugs in ivaria/ode.h where it was protecting the
	  types int8, uint8, int32, uint32 by #defining them as ode_int8,
	  ode_uint8, etc. before #including <ode/ode.h>, but was then
	  incorrectly #undefining ode_int8, ode_uint8, when it should actually
	  have been undefining int8, uint8, etc.  This cause compilation errors
	  for any use of int8, uint8, etc. after ivaria/ode.h was included
	  since the compiler still saw ode_int8, ode_uint8, etc. in their
	  stead.
	- Eric Sunshine simplified the Python SDK check in configure.ac
	  considerably by removing support for the obsolete csmingwlibs
	  package, which involved interrogating the csmingwlibs-specific
	  environment variables PYTHON_INC and PYTHON_LIB in lieu of querying
	  distutils.sysconfig (since the Python executable was absent from
	  csmingwlibs); and by dropping support for Python 1.x, which involved
	  manually parsing Python's installed makefile.  (The cspython module
	  dropped Python 1.x support a long time ago.)
	- Eric Sunshine added a hack to sound/loader/ogg/oggdata.h which works
	  around a build problem with some installations of Ogg/Vorbis on
	  Cygwin where it attempts to #include the non-existent <_G_config.h>.
	- Eric Sunshine added a patch to win32.jam to work around a problem
	  with natively-built Jam on Cygwin where it fails to perform library
	  scanning properly, with the result that it thinks that the contained
	  object files need to be rebuilt (along with all targets which depend
	  upon those files).
8-Apr-2004
	- Jorrit committed a patch to map2cs from Aren Blondahl:
	    - Added Support for "_color" tag in light entities for support
	      with proper q3 .map format and GtkRadiant compatibility.
	    - Added Support for keys on the "worldspawn" entity to be added
	      in as a <key /> tag. This will allow developers to add keys to
	      their "worldspawn" and access them in their code through
	      Engine->QueryObject()->GetChild("name here"); Returning a
	      iKeyValuePair*
	    - Added Support for info passed in the config file to be
	      specified in the .map, I had some people I knew annoyed about
	      creating a .cfg each time they made a new map, now the scaling
	      factor can be set in the "worldspawn" entity under the key
	      "world_scale". And also by adding in a key "archive" to the
	      world spawn (or perhaps any entity at this time **will clean
	      that up in the future**) the value of the key is loaded as a
	      pk3 file (will add support for other archive types later).
	      This will essentially exclude the need for the .cfg (for now
	      at least). I will be adding more options in the future.
	- Jorrit added the following persons to the contributors document:
	    - Aren Blondahl
	    - Frank Richter
	    - John Harger
	    - Daniel Fryer
	    - Reed Hedges
	    - Vincent Knecht
	    - Fritz Elfert
	    - Luca Cappa
	    - Andrew Craig
	    - Bjorn Hansen
	    - James Thompson
	    - Chris Matuszewski
	    - Andrew Mann
	    - Andreas Busch
	    - Andrew Topp
	  Also updated a few other entries.
	- Eric Sunshine made the following changes to the 'make install'
	  machinery:
	    - Published the component sub-install targets to give the user
	      finer control at install time.  For instance, to install plugins,
	      "make install_plugin".  The sub-install target names match the
	      Jam sub-install names as closely as possible.  The available
	      installation targets are:
		install
		install_bin
		install_config
		install_data
		install_doc
		install_include
		install_lib
		install_plugin
		install_root
		install_script
		uninstall
	    - Fixed bugs: At install time, with Swig present, cspython.mak and
	      csperl5.mak would attempt to copy Swig-generated files from the
	      build directory back into source tree even though this was not
	      requested (and might fail if source tree is read-only).
	    - Fixed bugs: With Swig present, cspython.mak and csperl5.mak
	      incorrectly installed the Swig-generated files from source tree,
	      rather than the ones from the build tree. (The ones from the
	      build tree will be newer if Swig is installed.)
	    - Fixed bug: cspython.mak attempted to install _cspace.so as if it
	      was as CS plugin rather than a Python extension module.  This
	      failed on MacOS/X because CS plugins have a .csbundle extension,
	      whereas Python modules have a .so extension, and it was looking
	      for the non-existent _cspace.csplugin.
	    - Changed cspython.mak and csperl5.mak so that they now install the
	      pure Python (_cspace.so) and pure Perl (cspace.so) extensions in
	      scripts/python and scripts/perl5, respectively, rather than
	      installing them alongside the CS plugins.  This change allows
	      Python users to set their PYTHONPATH environment variable to
	      simply point at scripts/python and have Python find both
	      cspace.py and _cspace.so.  Ditto for Perl's PERL5LIBS variable.
	    - cspython.mak and csperl5.mak are now responsible for requesting
	      installation of their related scripting files from scripts/python
	      and scripts/perl5, respectively.  install.mak no longer has any
	      hard-coded knowledge about these directories.
	    - Simplified and clarified the implementation of install.mak to
	      some extent by introducing re-usable macros which do much of the
	      difficult or dirty work.
	- res augmented the win32 minidump facility to optionally include the
	  heap in the dump.
	- res slightly changed the way lightiter creates the attenuation
	  texture.
	- res made some VC6 compile fixes.
	- Eric Sunshine performed a major overhaul of intro/contrib.txi:
	    - Eliminated and rewrote much outdated information so as to avoid
	      misleading readers.
	    - Added a good deal of missing information to entries for various
	      contributors.
	    - Re-wrote almost all entries to improve grammar and follow
	      standard English idiom more closely.
	    - Folded together several duplicate entries, including those for
	      Frank Richter.
	    - Alphebatized the list of contributors. (Previously, the document
	      claimed to be ordered by date of initial contribution, however,
	      in reality, there was much randomness of entries, and the
	      date-based claim was more misleading than not.)
	- DeSigna began the implementation of the sexp parser, for use with
	  shader-expressions.
	- Jorrit changed genmesh so that iGeneralFactoryState is now a
	  subclass of iGeneralMeshState. All methods in iGeneralFactoryState
	  that are also in iGeneralMeshState (except for the material methods)
	  will now serve as defaults for creating mesh objects from the
	  factory. For example, you can now set a default mixmode for
	  a factory. All objects created from that factory AFTER changing
	  the default mixmode will also get that mixmode.
	- Jorrit enhanced the genmesh factory loader so that the following
	  keywords can now be used in factories: 'mixmode', 'manualcolors',
	  'lighting', 'noshadows', 'localshadows', and 'defaultcolor'.
	  'defaultcolor' is the same as 'color' for mesh objects but 'color'
	  was already taken for factories.
7-Apr-2004
	- res added a small helper class to create minidumps on Win32.
	- res augmented the Win32 assistant to allow user-defined exception
	  handlers.
	- res fixed spr2d & csNewParticleSystem to correctly appear in mirrors
	  on NR.
	- res augmented stdrep to allow retrieval of the debug log file name.
	- res added a Win32-only variant of csCallStackHelper that allows a
	  bit more control over the call stack creation.
	- Jorrit fixed a bug in the NR rendermesh sorter. The back2front
	  and front2back sorting (used for alpha render priority) were
	  not correctly sorting. The fix makes the sorter sligthly less
	  efficient though but this shouldn't be too hard since it should
	  only happen for objects in alpha render priority. Nevertheless in the
	  future we should consider precomputing the z information so we
	  don't have to calculate it in the sort routine itself.
	- res tweaked the flags for minidump generation a bit.
6-Apr-2004
	- Jorrit finished the implementation of csBSPTree.
	- Jorrit implemented back2front for genmesh. This new feature works
	  only in NR mode. OR will ignore this.
	- Jorrit fixed the autoresolve keyword so that it avoids searching
	  the sector when the keyword is given. i.e. previously if you used
	  autoresolve but the destination sector was already present then
	  the autoresolve keyword would not do anything because the callback
	  would not be created.
	- res changed the OR/NR GL texture managers to free up super lightmap
	  handles upon closing of the renderer. This should fix the problem
	  where texture handles were deleted after the GL context closed (this
	  had no apparent side effects on Win32, but lead to a crash on OS/X).
	- res augmented configure to check for fputws().
	- res changed the generic csPrintf() implementation to use fputws(),
	  if available.
5-Apr-2004
	- Peter Amstutz added the iVosApi interface to the csvosa3dl plugin.
	  This interface allows the application to access the underlying
	  Vobjects that have been loaded by the plugin.
	- Eric Sunshine reverted Peter Amstutz's change to csvosa3dl.mak from
	  yesterday since it broke static link mode; it caused 'ar' to be
	  invoked with linker flags.  Instead, Eric fixed the copy/paste error
	  which resulted in link failure, which is what Peter was attempting to
	  address.
	- Jorrit disabled the 'softgl' rule (Software GL tweaks) in the
	  gldrivers database. This rule prevents the use of hardware GL
	  features in some situations so I'm not sure why it even exists.
	- Jorrit added the iTextureManager->RegisterTexture() for NR also
	  to OR builds (but with empty implementation in the OR 3D renderers).
	  That way the renderstep plugins also compile with OR.
	  This change also makes sure that the python plugin can now compile
	  with NR too.
	- Jorrit added back the render steps so that they again compile in
	  OR too. The plan is to merge OR and NR builds. Not bring them
	  further apart.
	- Jorrit added a new Video.OpenGL.BrokenStencil flag. When this flag
	  is set stencil clipping is considered broken and will never be
	  used. If there are too many planes to clip then it will just ignore
	  the extra planes and not clip on those.
	- Jorrit added an entry for the Linux Rage128 drivers to set
	  the BrokenStencil option to true (in the gldrivers.xml database).
	- Jorrit fixed a bug in the Opcode collision detection plugin. It
	  would crash if it tried to check collision with an object that
	  has no triangles.
	- Jorrit found out that RAPID and OPCODE interprete csCollisionPair
	  differently. RAPID interpretes it as returning a triangle in
	  object space, while OPCODE interpretes it as returning in world
	  space. The RAPID interpretation is correct so I fixed OPCODE
	  to conform to that. By doing this walktest can now finally work
	  properly with the OPCODE plugin.
	- Jorrit clearly documented how csCollisionPair should be
	  interpreted in the API documentation.
	- Jorrit applied a patch from Andrew (Khaki from PS) so that walktest
	  collision detection correctly transforms the collision pairs. Jorrit
	  improved his patch by using the full transform instead of the
	  normal transform and also testing if the transform is identity or
	  not to avoid the work.
	- Jorrit started work on a small csBSPTree class. Unfinished.
	- Jorrit started work on actually implementing back2front sorting
	  in genmesh. Unfinished.
	- Jorrit did a quick untested change to mdl2spr so that it should
	  now output XML instead of the old map format.
	- Jorrit also fixed the MDL part of mdl2spr (not only MD2).
	- res made the following changes to the standard render steps:
	    - Add the ability to create the texture and use a persistent
	      render target in the 'target' step.
	    - Changed the 'fullscreen' step to accept a shader instead of a
	      material/shadertype combo, textures, mixmode, alpha mode and
	      shader vars, as well as optionally different behaviour when it's
	      drawn the first time. Also changed it to use DrawSimpleMesh().
	- res augmented the Win32 keyboard handling to support input from an
	  IME, based on some code from 'fusilli'.
	- Eric Sunshine fixed several errors in Jorrit's untested changes to
	  mdl2spr where it was emitting a tag without a terminating "/>" token,
	  and where it was incorrectly terminating tags with ">" when "/>" was
	  called for.
4-Apr-2004
	- res moved the attenuation texture generation to the light iter
	  plugin. Still the same texture for all lights, though. Plan is to
	  have individual attenuation textures, reflecting the light's
	  actual attenuation settings.
	- res added non-const versions for csHash<>::Get() and
	  GetElementPointer().
	- res made spr2d's SV accessor a non-embedded interface. Fixes a leak.
	- Eric Sunshine re-added 'ranlib' step to Library build rule in Jam.
	  This is needed since Apple's 'ar' command apparently does not update
	  the symbol index when creating the library.  (What was misleading was
	  that the make build system only runs ranlib at install time, however
	  the make system creates the library with Apple's 'libtool', whereas
	  Jam creates it with 'ar'.)  Consequently, Jam build now runs ranlib
	  at both build and install times.
	- res fixed leaking of render meshes and the SV context in the new
	  particle system.
	- res fixed the haze plugin to use the _EXT versions of SCF macros for
	  descendants of csHazeHull.
	- res fixed some GCC warnings & errors in the shader plugins.
	- res changed the render steps to only compile in NR builds.
3-Apr-2004
	- Jorrit fixed a new compile error in the simple console plugin.
	- Jorrit added a new 'back2front' keyword for the genmesh factory
	  loader. This keyword is currently still a placeholder but the idea
	  is that when this keyword is present then the triangles of the
	  genmesh will be rendered from back to front. This is useful when
	  you the mesh is transparent (or uses a transparent material). In
	  that case you need this flag to have correct rendering. At this
	  moment the keyword is simply parsed but not used yet.
	- Jorrit also added iGeneralFactoryState->SetBack2Front() and
	  IsBack2Front() for this functionality. Still doesn't do anything
	  yet.
	- res augmented Cg VPs to modify the compiled ARB VP to use the
	  built-in GL state matrices for the ModelView etc. matrices resp.
	  use glTrackMatrixNV() for nVidia VPs.
	- res added the ability to load ARB VPs from raw text.
	- res augmented csRenderMeshHolderMultiple to allow optional
	  non-deletion of the contained csRenderMesh*es.
	- res fixed csParticleSystem to disable render mesh deletion in the
	  holder.
	- res added a facility to allow shader programs to resolve a texture
	  binding destination in shaders. This way you can have 'custom' names
	  for TUs.
	- res augmented the Cg shader plugin to resolve texture bindings that
	  are named like a program parameter.
	- res added a simple vertex lighting shader utilizing Cg.
2-Apr-2004
	- res made the following changes:
	    - Replaced the CS_SHADERVAR_STACK #define with a csShaderVarStack
	      typedef.
	    - Added a new base class for shader plugins, containing some
	      common stuff.
	    - Updated the glshader_arb program classes to use that new base
	      class.
	- res augmented the Cg configure check to use pthread, required by
	  Cg for Linux.
	- Eric Sunshine added a "default" comparison function to csArrayCmp,
	  and made the "comparison function" argument to the csArrayCmp
	  contructor optional.  If the client does not supply a function to the
	  constructor, then the default function is used.  This makes it much
	  simpler to perform searches in csArrays in cases when the element and
	  keys can be compared via standard comparison semantics (such as when
	  their types are the same, though type equivalence is not required).
	- Eric Sunshine added an invocation of AC_REQUIRE([CS_CHECK_PTHREAD])
	  to the Cg check in configure.ac to ensure that the pthread cflags,
	  lflags, and libs variables are available since the Cg check now
	  utilizes those variables.
	- Jorrit fixed a bug in the new shader code from res2k. It would
	  use SCF_DECLARE_IBASE instead of SCF_DECLARE_IBASE_EXT and this could
	  cause crashes in some circumstances.
	- Jorrit added an entry to the drivers database to disable stencil
	  clipping on a Rage128 card on linux.
	- Jorrit added a new data/shader/specifyambient.xml which is a variant
	  of data/shader/ambient.xml but one that doesn't hardcode the
	  ambient color (STANDARD_LIGHT_AMBIENT). So you can use this to
	  set another ambient value on a material. This is useful to make
	  fullbright materials for example.
	- Jorrit improved error reporting for shader loading a bit.
	- Jorrit removed some error reporting in csShaderProgram about
	  destination attribute missing. I'm not sure this is the correct
	  fix though. Perhaps in some cases it IS an error if this is
	  missing.
	- Jorrit added a new 'autoresolve' tag for portals. If this tag is
	  given the portal will automatically reconnect to the sector if
	  the sector is removed and later added again. Without this flag
	  it works as follows:
	    - Portal is created, if sector doesn't exist a callback is
	      created which will attempt to find the sector as soon as the
	      portal is needed (for rendering for example).
	    - As soon as the callback manages to find the sector it will
	      connect the portal to that sector and remove itself.
	    - When later the sector is removed the portal will be cleared
	      again because it keeps a weak reference to the sector.
	    - However when the sector then comes back again the callback
	      is removed so the portal will not be able to relink again
	      to the sector.
	  With the 'autoresolve' flag the callback will not remove itself
	  so it will always be able to relink to the sector. This is not
	  default because this callback takes some memory which is not
	  needed in most cases. Using this flag helps with games that do
	  dynamic loading and unloading of levels.
	- Jorrit slightly improved performance in the engine by using
	  csMeshWrapper instead of iMeshWrapper to control the socket
	  positioning. That way a lot of virtual calls are avoided.
	- res fixed the splatting_bump shader for the new <variablemap> syntax.
	- res augmented the R300 driver db entry to prefer clip planes.
	- res re-activated reporting of a missing 'destination' report in the
	  shader program <variablemap> parser.
	- res changed the fixed and PS1 shader plugins to use the new shader
	  plugin base class.
	- Jorrit fixed a problem with the new autoresolve and the old
	  style portal specification using the <portal> keyword in a
	  thing mesh. In this particular case it wouldn't actually work
	  and it would also use an uninitialized variable.
	- res augmented the swig-generated output for cspython to #undefine
	  _DEBUG before including Python.h. This way, python23.lib instead of
	  python23_d.lib is used on MSVC.
	- res fixed some VC6 compile errors in some shader plugin and updated
	  some shader plugin makefiles to utilize the common shaderplugin code.
	- res changed char arrays on the stack to csStrings in stdrep and
	  simpcon to avoid buffer overflows.
	- Eric Sunshine applied a Swig-related patch from Andrew Sutherland
	  <sombrero@alum.mit.edu> (patch #925053).  Andrew writes:
	    The problem, long story short: iGeneralFactoryState has a number
	    of methods that return arrays.  However, the signature is just
	    csVector3* or the like, which SWIG interprets to be a point to a
	    single object, rather than an array.  The specific methods are
	    GetVertices, GetTexels, GetNormals, GetTriangles, and GetColors.
	    The changes are:
	    - Swigs csgeom/tri.h, which defines csTriangle.  This is exposed by
	      GetTriangles/GetTriangleByIndex, but was previously just treated
	      as an opaque pointer.
	    - Introduces GetVertexByIndex, GetTexelByIndex, GetNormalByIndex,
	      GetTriangleByIndex, GetColorByIndex.
	    - Introduces (tiny manual) python replacements for GetVertices,
	      GetTexels, GetNormals, GetTriangles, and GetColors via the SWIG
	      python binding's 'shadow' feature.  These replacements create
	      instances of the next class, providing it with the proper
	      by-index-getter and count-getter.
	    - Introduces a new Python class that takes a by-index-getter and
	      count-getter and exposes them as an object that implements
	      __len__ and __getitem__.  This is sufficient for 'for' loops and
	      (index-guarded) subscript access to work properly.  This has the
	      benefit of presenting a 'lazy' list view to the user.
	      Specifically, there's no getting around the wrapper object being
	      constructed for each index retrieved (after all, we're just
	      calling GetFooByIndex), but at least it doesn't happen all at
	      once.
	  In addition, Eric added iSprite2DState::GetVertexCount(), and added
	  %ignore directives for non-Python platforms to ignore the methods
	  which are incorrectly exported by Swig, and which the new
	  GetFooByIndex() methods are meant to replace.
	- res changed the Cg shader plugins to use the new shader plugin base
	  class.
	- res added two simple example Cg programs.
1-Apr-2004
	- Eric Sunshine fixed include/Jamfile so that it installs Swig (*.i)
	  files.  These are needed by CEL, for instance.
	- Eric Sunshine fixed mk/install.mak so that it installs Swig (*.i)
	  files and Perl5 support files (scripts/perl5/*.pm).
	- Jorrit fixed a problem in the fixed shader where it would fail
	  to initialize the 'primcolvar' variable (VERTEX_COLOR token).
	  In vertex_color was not given in the shader then the result would
	  be essentially undefined because of this.
	- Jorrit enabled VBO support in NR OpenGL renderer again. There is
	  still a problem on linux with ATI and drivers 3.2.8 but for that
	  we need to add something to the gldrivers database so that we
	  can disable VBO for that situation alone.
	- Jorrit fixed a slight problem in the PlaneGlyphElementHandler which
	  is used in the font cache. It would not correctly copy the source
	  element in the 'Construct()'. This fix does not fix the problem with
	  the huge slowdown in CS though.
	- res changed the csArray<> comparison functor to not store the key as
	  a ref. This seems to fix the slowdown.
	- Eric Sunshine fixed cs.mak so that "-L$(OUT)" appears in the link
	  command before other platform-specific -L directives.  This ensures,
	  for instance, that application and plugin targets will link against
	  the libraries in the build directory, rather than any installed
	  versions.  Without this change, the linker was preferring installed
	  CS libraries over developmental ones, which was incorrect.
	- Jorrit added a rule to gldrivers.xml to disable VBO for the 3.2.8
	  ATI drivers on linux. I haven't yet tested the more recent ATI
	  drivers so I don't know if the rule has to be applied there too.
	- Eric Sunshine updated outdated information in the KDevelop HOWTO and
	  fixed some incorrect examples.  Also updated the snap5 screenshot so
	  that it no longer mentions the obsolete cssys library.
	- Eric Sunshine augmented the Jam DoInstall rule so that it accepts an
	  optional list of post-install rules to invoke upon the installed
	  target.
	- Eric Sunshine fixed Jam build system bug where it failed to run
	  `ranlib' on the installed libraries.  (Instead, it incorrectly
	  invoked ranlib just after building the libraries, which is completely
	  ineffectual.)
	- res fixed a cut'n'paste error in spr2d: the vertex/color/texcoord
	  render buffers were errorneously flagged as 'index buffers', causing
	  display corruption when VBO was enabled.
31-Mar-2004
	- Jorrit fixed a bug with iSector->HitBeamPortals(). It would not
	  be able to register hits on meshes that don't return a polygon
	  index.
	- Jorrit fixed an initialization error in the csGLStateCache for
	  GL_STENCIL_BITS. This bug was reported by valgrind.
	- Eric Sunshine fixed user.mak so that it only builds glshader_arb,
	  glshader_fixed, and glshader_ps1 if GL.AVAILABLE is 'yes'.
	- Eric Sunshine worked around a slew of MSVC6 compiler bugs ("internal
	  compiler error" and several others) which were triggered by changes
	  to csArray<> aimed at making FindKey() and FindSortedKey() type-safe.
	  The new approach wraps the comparison function in a functor which
	  falls back to unsafe void* if and only if the compiler fails to grok
	  the strongly typed approach.  The functor wrapper hides this MSVC6
	  anomaly from client code.
	- Steven Geens made sprite socket update their position in the new
	  renderer.
30-Mar-2004
	- Eric Sunshine added missing "#define CS_SYSDEF_PROVIDE_SOFTWARE2D"
	  to null_render3d.cpp.  Reported by Steven Geens.
	- Jorrit disabled the sphere culling for the generic render loop
	  that was recently added. This adds a very big overhead to the
	  main rendering loop in csSector which is not acceptable. We need
	  another solution for this.
	- Jorrit fixed two bugs with portal containers in the engine:
	    - First when moving to a sector the portal container would
	      unregister itself instead of registering.
	    - Second the portal container registration was broken in case
	      the portal mesh is a child mesh (which is a very common case).
	- res fixed spr3d on NR (actually, just the obj2cam transform wasn't
	  set). Also slightly changed the way it's drawn, now uses shader var
	  accessors (instead of setting all the data in GetRenderMeshes()).
	- res fixed a GCC warning in the PS1 plugin.
	- res fixed glrender3d to use the actual perspective center instead
	  of a hardcoded "center of screen".
	- res changed glrender3d to set up the projection matrix lazily. Also
	  updates this matrix when the perspective center or aspect changes
	  (which can happen if multiple views are drawn subsequently).
	- res changed csList<>::csListElement to not be dllimported any more.
	  That caused linking problems (as the actual instantiation of
	  csListElement would eb required in csutil).
29-Mar-2004
	- Jorrit changed the NR null3d renderer so it uses the soft canvas
	  instead of the OpenGL canvas by default.
	- Jorrit fixed a bug in the NR null3d renderer. It would call
	  g2d->BeginDraw() too many times.
	- Jorrit fixed another bug in the NR null3d renderer. It was using
	  csRef and DecRef() at the same time.
	- Jorrit added 'chunklod' to the list of static plugins for Jam.
	- res worked further on the PS1.x->1.4 converter. Improved register
	  aliasing.
	- res made the NR normalizer cubemap size changeable via a config
	  setting. Also increased the default size to 256.
28-Mar-2004
	- Eric Sunshine moved csutil's copy of TinyXML into a private namespace
	  to avoid clashes with other external libraries which also embed
	  TinyXML.  This corrects, for instance, a problem on MacOS/X where
	  modules requiring both csutil and cal3d failed to link on account of
	  symbolic collisions (since cal3d also embeds TinyXML).
	- Eric Sunshine greatly expanded the Doxygen documentation fo iVFS and
	  iFile.
	- Eric Sunshine augmented iVFS::PushDir() so that, as a convenience, it
	  optionally accepts a path as an argument and invokes ChDir() for that
	  path after pushing the current working directory.
	- Eric Sunshine fixed shadermgr.mak so that it also installs the
	  contents of CS/data/shader/, since these data files are required when
	  configured for the new renderer.
	- Eric Sunshine upgraded csEngine::HandleEvent() so that it deals more
	  gracefully with failure to load /shader/or_lighting.xml (rather than
	  crashing outright).
	- res made the following changes to map2cs:
	    - Applied a patch from Calle Lejdfors <calle.lejdfors@cs.lth.se>
	      to generate 'new' portal statements.
	    - Improved texturing for HL maps in some cases.
	    - Allow more control where a library is referenced in the map file;
	      "end:lib" puts lib at the end (useful for e.g. sequences).
	    - The player start angle is correctly evaluated.
	    - Added possibility to exclude certain textures from being
	      generated and written to the .zip (so they are supplied by the
	      user).
	    - Added possibility to specify the renderloop to use.
	- res augmented the rotation sequence action loaded to automatically
	  determine a rotation center (the middle of the object's bounding
	  box) when <autoffset /> is specified.
	- res slightly improved the error handling when reading shader files
	  from world files.
	- res fixed the simple console to draw text in PutTextV() only if the
	  method hadn't been called recursively (on rare occasions, something
	  was reported from inside the 2D functions, causing the 2D stuff to
	  be called again, where again something was reported and so on,
	  leading to an infinite recursion resp. stack overflow).
	- res changed csShaderVariable::SetValue(csVector2) to set the 3rd
	  component of the internally stored Vector4 to 0 instead of 1.
	- res added a small hack to the material shader storage to clear the
	  assigned OR compatibility shader if a shader for some shader type
	  is set. This was done to allow the removal of the implicitly set
	  OR compatibility shader.
	- res virtualized some methods in the standard proctex plugin.
	- res augmented csRenderMeshList with a method to remove all meshes
	  outside a sphere.
	- res changed the generic renderstep to not draw meshes that are
	  outside the influence of the light passed in.
	- res added a method to iTextureLoaderContext to retrieve the name of
	  the texture to be loaded.
	- res un-inverted the <mipmap> texture flag parse logic.
	- res added a texture loader to generate a (static) texture from a
	  shader expression.
	- res added a sanity check to csShaderVariableContext::PopVariables().
	- res fixed the shader expressions so atomic expressions are accepted
	  and added pow, min and max functions.
	- res did various changed and fixes to the glshader_ps1 plugin:
	  changed the way instruction are declared, the version is parsed,
	  fixed replication for ps1.4 programs, fixed dealing with phase in
	  ps1.4 programs, fixed parsing of the destination write mask for 1.4
	  programs, now deals with the pairing modifier.
27-Mar-2004
	- Anders Stenberg did the following NR changes:
	    - Added the possibility to route Cg programs through
	      the Pixel Shader plugin, to make Cg available on lower end ATI
	      cards. This means the Cg plugin should now be able to cover all
	      cards with some kind of pixel shading ability. (I.e. GF3+ and
	      ATI 8500+). Routing will be enabled by default on cards where
	      ATI_fragment_shader is supported, but ARB_fragment_program isn't.
	      It can also be manually forced on or off by setting
	      "Video.OpenGL.Shader.Cg.PSRouting" in a config file.
	    - Fixed variable mapping in the Cg plugin, which apparantly was
	      broken.
	    - Added an overloaded Load function to shader plugins, which
	      allows for loading shaders from raw text buffers instead of
	      via iDocumentNode. (Useful for programmatic loading of shaders.)
	      Currently only the Pixel Shader plugin actually implements this.
	- Jorrit fixed a bug in sprcal3d->HitBeamOutline() routine.
	  The routine forgot to set the 'isect' return value AND in
	  addition to that it even used that value. Hitting cal3d
	  sprites with HitBeam() should now work.
	- Anders Stenberg added scissor clipping to NR. This means a GL
	  scissor clipping box is applied to the bounding box of the clipper,
	  which in practice means some fillrate is saved.
	- Anders reverted the latest addition (or at least commented it out)
	  since it'll probably conflict with scissor settings in the canvas.
	  A solution for them to live in harmony should be done eventually.
26-Mar-2004
	- Marten added csMatrix as a type a csShaderVariable can store.
	- Marten made the shadermanager responsible for handling the shader-
	  variablestack used during rendering. This to allow other plugins to
	  access it without having to pass it around everywhere.
	- Marten comitted first steps toward making NR use fog. It does not yet
	  work though, but its progressing.
	- res started to work on a PS1.x -> 1.4 converter. Not useable yet,
	  though.
	- Eric Sunshine eradicated all ugly, unsafe, type-agnostic void* usage
	  from csArray's sorting and searching methods.  Now, all arguments to
	  these functions and their comparison helpers are type-specific and
	  type-safe.
	- Eric Sunshine fixed compilation errors and warnings in the various
	  shader plugins.  Also added 'softshader' to user.mak.
	- Anders Stenberg fixed a problem with fog calculation. Still not
	  working though.
	- res fixed a compile error in partphys_ode after the recent array
	  changes.
	- res further worked on the PS1.x -> 1.4 converter. Can handle veeery
	  simple programs now.
	- Jorrit disabled outline splatting in the Dynavis plugin. This can
	  be enabled again as soon as it works properly.
	- Luca reflected the change to the signature of the method
	  iMeshObject::GetRenderMeshes to the csMeshObject class.
	- Eric Sunshine worked around an MSVC6 compiler bug where it was unable
	  to determine the type of template argument K in
	  csStringArray::FindSortedKey().  Hopefully, we will be able to find a
	  more suitable solution in the near future so that the ugly hack
	  presently in use can be eliminated.
25-Mar-2004
	- res ported code to properly handle keycolored procedural textures
	  over from the OR.
	- res changed the NR glrender3d texture manager so that the images of
	  a texture aren't replaced with the lowest mipmap(s).
	- res slightly changed the behaviour for retrieving shader var texture
	  values: now, a handle is requested from a wrapper when it's needed
	  the first time. Some wrappers don't have a handle yet when the value
	  is set, but get one later.
	- Matt Reda changed the MacOS X OpenGL canvas to use a 32 bit depth
	  buffer (it was 16) and added 8 bit stencil and alpha buffers when
	  compiling for the new renderer
	- Jorrit added a new csStringReader class to csutil. This class takes
	  a const char* input buffer as input and will split that buffer
	  in lines. You can then read the lines one by one. It will correctly
	  read lines for both CR and CR/LF format.
	- Jorrit fixed a few bounding box calculation errors in sprcal3d.
	  Completely untested due to lack of cal3d library.
	- Marten made chunkedlod display something again. It does not yet work
	  with mirrors. Maybe someone who understands the plugin can fix that.
	- Eric Sunshine performed project-wide spelling corrections:
	    conveniance --> convenience
	    conveniant	--> convenient
	- res ported the csParticleSystem based particle systems to NR.
	- res fixed spr2d not always respecting it's position when used as a
	  particle.
24-Mar-2004
	- Jorrit extended the standard output console so that it now also
	  supports setting of the font through the config file. Added
	  a data/config/standardcon.cfg file. Currently the only setting
	  that the standard output console supports is StandardConsole.ConFont
	  which can have the following values:
	    - auto: select font based on size of display, similar like what
	      simple output console does.
	    - select the specified font.
	- Jorrit fixed a bad bug in the standard output console which caused
	  it to crash when the total size of the buffer would be exceeded and
	  the top line would be deleted.
	- res updated spr2d to work with NR.
	- res made some changes to how the render mesh holders work internally.
	- res added some documentation to csRenderMesh, csAlphaMode, the
	  render mesh holders and csRenderBufLock.
	- res changed csRenderMesh to have the db_mesh_name member not only in
	  debug mode (mostly for binary compatibility between debug/release
	  binaries).
	- res fixed a bug in csRenderMeshHolderSingle where it reported the
	  first returned mesh as 'not created', tho the opposite would've been
	  correct.
	- Eric Sunshine fixed run-time syntax error in Java header directory
	  check in configure.ac.  Problem was introduced on 22-Mar-2004 when
	  Java check was augmented for MacOS/X.
	- Eric Sunshine fixed csconout.mak so that it installs the new
	  standardcon.cfg configuration file.  Also upgraded the makefile to
	  the new style which does not directly pollute $(OUT).
23-Mar-2004
	- Anders Stenberg brought stencil shadows back to life in NR.
	  They should get along well with stencil clipping.
	  Possible todo: Not assume 8-bit stencil, but allow different
	  bitcounts. Also somehow avoid glClear of the stencil buffer.
	- Anders Stenberg updated shader plugins to actually not load
	  if the wrong renderer (software) is used. Todo is to give a
	  better error message.
	  Also changed the "environment" syntax of FixedVP a bit to
	  allow for future texgen modes. Look at water shader for reference.
	- Anders Stenberg fixed a bug in windows threading, where a
	  semaphore "LockWait" would return instantly due to wrong
	  usage of the timeout value.
	- Eric Sunshine upgraded the iCursor documentation and interface so
	  that it uses the term "transparency" rather than "alpha" (since
	  "alpha" was misleading), and also indicates the range of transparency
	  values and their meanings.  Also cleaned up some other anomalies in
	  the interface.
	- Eric Sunshine fixed a potential crasher in
	  csRenderMeshHolderMultiple::GetUnusedMeshes() where it blindly
	  accessed element zero of the renderMeshes[] array without checking if
	  the array contained any elements.
	- Eric Sunshine changed scripts/cs-config/Makefile.template to look for
	  *.cpp files in the current directory, by default, rather than in a
	  src/ subdirectory.  The assumption is that an unsophisticated user
	  will probably just dump all sources into the main directory rather
	  than trying to impose some sort of organization.  More sophisticated
	  users, of course, are probably Makefile-wise and will know enough
	  to edit the makefile to suit their needs.
	- Eric Sunshine added libtool check to configure.ac.  This check is
	  smart enough to identify GNU libtool and Apple's own libtool (which
	  is unrelated to the GNU command, and which serves a totally different
	  purpose).  The check will be able to identify Apple's libtool even if
	  a GNU's libtool appears in PATH before Apple's libtool.
	- Eric Sunshine fixed bugs in configure.ac where it was composing
	  search paths using a literal ":" delimiter rather than
	  $PATH_SEPARATOR.
	- Eric Sunshine worked around a problem where INT64_C() and similar
	  macros from <stdint.h> were not getting defined when building
	  cs_pyth.cpp.  This happened because the Swig-generated cs_pyth.cpp
	  includes <Python.h> very early, which includes <stdint.h> (on some
	  platforms) before we have a chance to define __STDC_LIMIT_MACROS.
	  __STDC_LIMIT_MACROS must be defined before <stdint.h> is included in
	  order for <stdint.h> to define INT64_C() and cousins.  To solve,
	  cs_pyth.cpp is now post-processed to ensure that __STDC_LIMIT_MACROS
	  is defined before <Python.h> is included.
22-Mar-2004
	- Anders Stenberg fixed several places where mesh objects would
	  return "false" from GetRenderMeshes (which is supposed to return
	  a pointer), and didn't initialize the "number of meshes returned"
	  variable. This could cause the culler to crash.
	- res changed glrender3d to support changing the texture filter mode
	  and texture cache size via a config setting.
	- res started on converting spr2d to NR. Still needs work, tho.
	- res added a GL driver DB entry for software GL implementations.
	- Jorrit fixed spr2d so that it compiles again with OR.
	- Jorrit fixed spr2d Jamfile so that it no longer trys to use
	  the bcsgeom library (whatever that is :-).
	- Jorrit fixed the NR glrender3d target. You can't declare variables
	  without a type like this:
	    static const textureMinFilters[3] = {GL_NEAREST_MIPMAP_NEAREST,
	      GL_NEAREST_MIPMAP_LINEAR, GL_LINEAR_MIPMAP_LINEAR};
	- Jorrit fixed a harmless initialization error in Frustvis and
	  Dynavis.
	- Jorrit fixed a bug with NR and handling of visibility culling and
	  portals. Previously the NR would reuse the same visibility culling
	  result if you entered some sector twice (through different portal
	  paths). But this is invalid since the portal contributes to
	  visibility culling so for the same sector the visibility culling
	  result can be different because the portal you entered is different
	  (and other objects will be visible/invisible). Solved this by adding
	  a context_id to csRenderContext. This id is used instead of comparing
	  pointers. Comparing pointers was not safe because render contexts are
	  reused. The id is never reused (for the same frame).
	- Jorrit fixed the chunklod terrain engine (NR) so that it no longer
	  returns bounding boxes that have huge floating point values in them.
	  The visibility cullers (more specifically the kdtree) cannot cope
	  with that.
	- Jorrit removed the obsolete render context data system from
	  iRenderView. Nothing was using it.
	- Eric Sunshine fixed bug in scripts/cs-config/Makefile.template where
	  it incorrectly defined DO.EXEC rather than DO.EXE, thus causing the
	  build to fail.
	- Eric Sunshine augmented the Java SDK usability test in configure.ac
	  so that it succeeds on MacOS/X.
	- Eric Sunshine changed cspace.i so that it %ignores almost all
	  functionality of iString.  All higher-level languages for which CS
	  bindings exist already have powerful string classes, so we can safely
	  export a bare-bones iString interface.  As a happy side-effect, this
	  change also eliminates the compilation error "cs_pyth.cpp: error: ISO
	  C++ forbids assignment of arrays" which occurs on 64-bit x86_64
	  systems when SWIG tries assigning a va_list to a va_list in the
	  iString::FormatV() wrapper.
21-Mar-2004
	- Luca Cappa committed the res fix to the problem regarding the lack
	  of the regex.c file in the CSUtil library. The problem was
	  related to the VisualC++ compiler environments only.
	- Marten made a new, hopefully permanent, fix for the csRenderMesh
	  problem. This fix replace removed res workaround from the 15th March.
	  This change also means that DrawTest no longer is used in the NR
	  way of doing things. Instead GetRenderMeshes now does the job of both
	  DrawTest and GetRenderMeshes.
	- res fixed the ball plugin to correctly update the lighting and use
	  the set mixmode on NR.
	- res fixed a few compiler warnings after the cs-win32libs update.
	- res fixed csInputDriver so it actually can receive focus changed
	  event.
	- res updated the Win32 keyboard driver to do more sophisticated key
	  state restoration after the CS window gained focus.
	- res fixed csImageMemory to also not delete the Palette if the image
	  isn't to be deleted.
	- Eric Sunshine reverted Luca Cappa's change to msvcgen/win32.mak.  The
	  file msvcgen/required.mak already forcibly sets REGEX.AVAILABLE=no,
	  so there should be no need to do so again in win32.mak.  If there is
	  some configuration in which this is failing, please report so that it
	  can be fixed correctly.
	- Eric Sunshine fixed a number of Texinfo errors in the CS manual which
	  were introduced yesterday.
	- John Harger fixed the particles plugin to reflect Marten's recent
	  change to iMeshObject::GetRenderMeshes
	- Jorrit fixed the ball plugin so that it compiles again after res2k
	  'fixed' it.
	- Duhprey added a IBASE constructor/destructor for csSimpleSampler
	- res changed csMaterial::SetShader() to override any already set
	  shader for a type.
	- res fixed bugplug's spider camera catching in NR after Marten's
	  recent changes to GetRenderMeshes() and DrawTest().
	- res augmented map2cs with the ability to specify libraries included
	  in a map and exclude certain materials from being generated (so they
	  are supplied by the user).
	- res fixed map2cs so that q3 invisible textures are handled properly.
	- res fixed the PS shader plugin so constants are honored for ATI
	  programs.
	- res changed the glrender3d to also call G2D->BeginDraw()/FinishDraw()
	  before beginning/finishing 3d graphics.
	- res moved the NV/ATI fragment shader setup to the ps1 plugin.
	- res updated sprcal3d after Marten's recent changes.
	- res tried some more to get NR softrender3d to work. Not there yet,
	  though.
20-Mar-2004
	- Anders Stenberg fixed procedural textures in NR. Visit for
	  textures wasn't called, and is now called on access in the shader
	  plugin (XMLShader). Not sure that's the correct place, but it works
	  for now.
	- Anders Stenberg fixed a bug in SimpleFormer which made it reallocate
	  texture data on each access, i.e. leak enormous amounts of memory.
	- Jorrit disabled the use of VBO in the new renderer since this doesn't
	  appear to be working right at the moment.
	- res applied some changes needed by the cs-win32libs package.
	- res changed the manual to state cs-win32libs instead of msvc_libs
	  resp. csmingw-libs as the Win32 support package.
	- res generally updated some of the information in the Win32 build
	  docs.
	- res extended the "External Libraries" list somewhat.
	- res fixed a small formatting error in the VC build docs.
        - Philip Wyett eliminsted signed/unsigned warnings in simpleformer.
19-Mar-2004
	- res fixed compilation of the aseie plugin.
	- duhprey overrided the correct Write in null2d (from Jorrit)
	- Jorrit fixed a compile error with MSVC6 and the generic render
	  loop plugin. The following construct is not valid with that compiler:
	    for (int i = ...)
	    for (int i = ...)
	- Eric Sunshine updated MSVC build instructions in the manual so that
	  they state explicitly that the "Release" or "Debug" build modes must
	  be used when building wkstypical, and that "Release_NR" and
	  "Debug_NR" must be avoided.
	- Eric Sunshine augmented msvcgen/workspaces.mak so that the csjava,
	  csperl5, and cspython modules are not included in the wksnewrenderer
	  workspace.  The reason for this change is that the Swig-generated
	  code in these modules is configuration-specific.  For instance, if
	  Swig generates the code when configured for the old-renderer, then
	  the code will not be buildable when configured for the new-renderer.
	  Since the Swig-generated code stored in CVS is generated for the
	  old-renderer, it should not be built by wksnewrenderer.
	- Eric Sunshine re-ordered the "!MESSAGE "%project% - Win32 ..." lines
	  in the msvcgen/template6 project templates so that the "Release" or
	  "Debug" line is listed last rather than "Release_NR" appearing last.
	  This was necessary because MSVC6 chooses its default build
	  configuration by consulting the last such line it finds in the
	  "active" project, and we want people who use wkstypical, wksall, or
	  wkswalkall to build with "Release" or "Debug", not with "Release_NR"
	  (which is reserved for wksnewrenderer).  Defaulting to "Release_NR"
	  for the project files used by most people was a Bad Thing.
	- Eric Sunshine augmented the csRef<T> and csPtr<T> `out' typemaps in
	  javapre.i, perlpre.i and pythpre.i to work around MSVC complaint
	  about ambiguous assignment of SwigValueWrapper<csRef<T>> to csRef<T>
	  (or SwigValueWrapper<csPtr<T>> to csRef<T>).  GCC, on the other hand
	  did not have a problem such assignments.
	- res removed code from the plugin finalization code that set iSCF::SCF
	  to 0. As the documentation states, iSCF::SCF can be, dependent on the
	  platform, either module global or "truly" global. In the latter case,
	  setting it to 0 can be dangerous.
	- Eric Sunshine fixed bug in configure.ac where Java SDK check would be
	  run even if Java development tools were not found.
	- Eric Sunshine attempted to work around compile failure of glwin32 on
	  some Cygwin installations where it complained about missing
	  SetupWGLextStr(), and `extstrWGL'.
	- Eric Sunshine attempted to work around problem reported by Martin
	  Henne <martin.henne@web.de> where Flex on Debian 'sid' does not seem
	  to emit a #define for YY_PROTO().  This macro is used by the YY_DECL
	  macro in aws/skinlex.ll.
18-Mar-2004
	- Anders Stenberg changed the terraformer interface a bit (made Sample
	  functions return pointers to data instead of filling out supplied
	  preallocated blocks). Also made it actually work, at least to some
	  degree.
	- res augmented csappframe with CS_CSAPPFRAME_EXPORT. Also changed it
	  to not implement main(). The startup code is now in
	  csApplicationFramework::Main() and has to be called explicitly by the
	  client.
	- res augmented csgeom CS_CSGEOM_EXPORT.
	- res fixed an oversight from adding CS_CSGEOM_EXPORT to csgfx.
	- res augmented cstool with CS_CSTOOL_EXPORT.
	- res removed the csImage::dither variable.
	- res fixed csutil/tree.h. csTree is purely inline but was declared as
	  CS_CSUTIL_EXPORT, causing missing symbols when csTree was used
	  elsewhere.
	- res hacked around the fact that cs_static_var_cleanup was defined in
	  the app/plugins but used in the libs by using only one
	  cs_static_var_cleanup (contained in csutil) when building shared
	  libraries.
	- res changed the nada reftracker to being not exported via
	  CS_CSUTIL_EXPORT.
	- res augmented csws with CS_CSWS_EXPORT.
	- res removed a superflouos csTriangle from the ASE plugin.
	- Jorrit added better error reporting to walktest in order to find
	  out why CS is now broken.
	- Jorrit added better error reporting to the csparser plugin. From
	  this I discovered that the image loader plugins are not working.
	- Jorrit fixed a compile error in the image loader multiplexer. This
	  fixes CS again.
	- Jorrit added CS_ENTITY_INVISIBLEMESH and CS_ENTITY_NOHITBEAM flags.
	  The first flag controls the visibility of the mesh (ONLY the
	  visibility of the mesh, HitBeam() is not affected). The second flag
	  controls if HitBeam() will hit the mesh. The original
	  CS_ENTITY_INVISIBLE flag is redefined as a combination of
	  CS_ENTITY_INVISIBLEMESH and CS_ENTITY_NOHITBEAM.
	- Jorrit added equivalent flags to the loader: 'invisiblemesh'
	  and 'nohitbeam'.
	- Jorrit modified the culler plugins to respect the new
	  CS_ENTITY_NOHITBEAM flag. They will ignore CS_ENTITY_INVISIBLEMESH.
	- Jorrit modified the engine to respect CS_ENTITY_INVISIBLEMESH and
	  ignore CS_ENTITY_NOHITBEAM (for drawing).
	- Jorrit modified the engine to respect CS_ENTITY_NOHITBEAM when
	  calculating intersections.
	- Jorrit fixed the visibility cullers so that they now respect the
	  CS_ENTITY_INVISIBLEMESH flag when doing visibility
	  culling. Previously the engine had to do that later on after the
	  visibility culler did its job. This even fixes a bug with Dynavis
	  where an invisible mesh would still contribute to culling.
	- Jorrit did a significant change in the way visibility of child
	  meshes is handled. A child mesh is no longer considered to be
	  automatically invisible when the parent is invisible. You have to
	  set the invisible flag individually on every child if you want that.
	- Jorrit added a -silent commandline option for the standard reporter
	  listener plugin. If you give that option then it will no longer
	  pop up the yellow messages for warnings at startup.
	- Keith Fulton fixed very obvious bug in
	  csSpriteCal3DMeshObject::RecalcBoundingBox() where old bbox was not
	  cleared out before new points were added.
	- Keith Fulton added a skeleton update as soon as an animation cycle is
	  added, which makes the bbox update. This enables accurate colliders
	  to be created.
	- res changed the imgplex plugin to set the dither flag on all image
	  loaders.
	- Eric Sunshine augmented cspace.i to take into account the new
	  CS_CSUTIL_EXPORT, CS_CSTOOL_EXPORT, etc. export macros in order to
	  keep Swig from barfing on them.
	- Eric Sunshine augmented pubapi.dox and devapi.dox to take into
	  account the new CS_CSUTIL_EXPORT, CS_CSTOOL_EXPORT, etc. export
	  macros in order to keep Doxygen from barfing on them.
	- John Harger fixed the copying method in csAnonRenderBufferManager
	  that would cause a crash if you ever tried to actually use one in
	  certian configurations
	- John Harger added some necessary includes to make mdltool.cpp compile
	  as a DLL.
	- John Harger fixed genmesh, so that the anonymous buffers are
	  actually retrieved.
17-Mar-2004
	- Duhprey added a simple terraformer loader plugin
	- Eric Sunshine fixed copy/paste error in terraformer loader makefile
	  which broke it.  DIR.SIMPLEFORMERLDR referenced the wrong path.  Also
	  fixed formatting of help message.  Added appropriate SubInclude
	  invocation to its parent Jamfile to ensure that it gets built.
	- John Harger exported functions in csutil, via CS_CSUTIL_EXPORT, to
	  make csutil viable for compilation as a shared library.  So far I
	  have tested it on MSVC 7.1 and it has worked without error.
	- res removed '#define CS_CSUTIL_LIB' from the csutil sources. The idea
	  is to #define with a compiler (resp. preprocessor) option.
	- res augmented libcsgfx with CS_CSGFX_EXPORT.
16-Mar-2004
	- Jorrit fixed a bug in iSector->HitBeamPortals(). It would not
	  initialize the mesh to 0 which could cause bad errors in some
	  cases.
	- Eric Sunshine fixed copy/paste error in win32/csosdefs.h.  It defined
	  CS_IMPORT_SYM as __declspec(dllexport) rather than as
	  __declspec(dllimport).  Also fixed a few minor issues in csexport.h.
	- res fixed the software NR and software shader plugin to compile
	  again.
	- John Harger fixed csparser and xmlshader to report an error when
	  a shader file could not be found, rather than dereferencing a null
	  pointer.
	- Eric Sunshine worked around MSVC6 limitation where it barfed on
	  csRef<> when confronted with copy-constructors and assignment
	  operators for types T and T2.  It turns out that MSVC6 will accept
	  these as long as the templated versions (T2) appear before the
	  non-templated versions (T).
	- res renamed T& csHash<>::Fetch(key, fallback) to Get() and
	  T* csHash<>::Fetch(key) to GetElementPointer(). This way, familiar
	  name(s) are kept, but code utilizing the old-style Get() syntax will
	  fail to compile, thus forcing examination of the code as well.
15-Mar-2004
	- Anders Stenberg added a first version of a TerraFormer plugin. It
	  will be responsible for feeding data to other plugins like terrain
	  and vegetation renderers. Also introduced a new concept to CS:
	  Thoroughly commented code!
	- Eric Sunshine changed cs.mak so that "mkdir -p" for $(OUTDIRS) is now
	  performed silently since it provided very little useful information
	  to the viewer yet was extremely verbose.
	- Eric Sunshine re-enabled the assignment-compatible (<class T2>)
	  copy-constructor and assignment operator in csRef<>.  It turns out
	  that if T and T2 are the same class, then the compiler will not
	  invoke the T2 copy-constructor or assignment operator, but will
	  instead just perform memberwise copy/assignment.  For this reason, we
	  need to have copy-constructors and assignment operators for both T
	  and T2.
	- Eric Sunshine made the following changes to the new TerraFormer
	  plugin:
	    - Fixed nasty copy/paste errors in the makefile.
	    - Updated makefile to new style which does not pollute $(OUT).
	    - Added reference for plugin to user.mak.
	    - Added missing Jamfile.
	    - Added missing .csplugin meta-information file.
	    - Fixed several compilation errors and warnings.
	- Eric Sunshine renamed the csHash<>::Get() methods to Fetch(), and
	  GetAll() to FetchAll().  This was done in order to force people to
	  examine invocations of these methods and to adjust the code
	  appropriately.  This was necessary because the recent changes to the
	  Get() methods radically changed the return semantics but, in numerous
	  cases, did not cause the compiler to emit a diagnostic.  The result
	  of this situation was that the behavior of previously valid programs
	  would silently change, usually by breaking.
	- Eric Sunshine fixed a few cases where code had not been updated to
	  reflect the new return semantics of csHash<>::Get() -- now renamed to
	  Fetch().  The new name, Fetch(), made it possible to find and repair
	  these otherwise difficult-to-diagnose bugs, the most notable of which
	  was csKeyboardDriver::GetKeyState() which was returning bogus
	  results.
	- res changed some more occasions of csHash<>::Get() to Fetch().
	- res fixes some signed vs unsigned warnings in the xmlshader, cg, arb
	  and fixed shader plugins.
	- Eric Sunshine added java, javac, ant (Java build tool), and Java SDK
	  checks to configure.ac.  Also added new --with-java option which is
	  enabled by default.
	- Eric Sunshine made some changes to pacify SourceForge.  They are
	  concerned that we have been using >500MB of web server space even
	  though we are alloted only 100MB.  Therefore, CVS snapshots are now
	  only distributed in .tar.bz2 format (rather than .tar.bz2, .tgz, and
	  .zip), and we only keep one snapshot around at a time rather than
	  two.  This should free up about 130MB.  Further, we no longer publish
	  "apidev" for online viewing or download.  This will save another
	  100MB.  Finally, documentation offered for download is now only
	  published in .tar.bz2 format (rather than .tar.bz2, .tgz, and .zip).
	- John Harger fixed the warnings in glshader_ps1.
	- res fixed a problem in csPortalContainer::Draw() where a ref to an
	  object on the stack was stored (and thus the data was subsequently
	  corrupted).
	- res added a workaround to the generic render step for the issue that
	  the transforms in the rendermeshes will be changed to reflect the
	  portal transform. However, as meshes usually keep just 1 copy RM,
	  it'll affect the original mesh as well. Now the RMs are copied before
	  drawing behind the portal and restored afterwards. Makes the shape
	  room mirror in flarge work, but a better solution should be
	  researched.
	- John Harger added the beginnings of the macros for the DLL
	  compilation on Windows. Added include/csextern.h, modified
	  include/csdef.h and csutil/win32/csosdefs.h
14-Mar-2004
	- Keith Fulton committed Performance enhancements to sprcal3d
	  giving about 3x FPS in debug mode in viewmesh for a cal3d model.
	  Most of the enhancements are to minimize calls to
	  CalRenderer::getNormals due to a lot of unnecessary lighting updates.
	- Jorrit added back the Get() to csHash that res removed a while ago.
	  Having that Get() there does NOT restrict the csHash to be used on
	  objects that have a default constructor.  It only adds that
	  restriction if that Get() is actually used.  [Eric notes that for
	  slightly older compilers, the restriction is placed upon the entire
	  template, even if the Get() method is never invoked.]
	- Eric Sunshine reverted Jorrit's reversion to Frank's csHash<>::Get()
	  changes (after explaining why the original Get() method was so
	  undisirable that it warranted removal).
	- Eric Sunshine removed obsolete #include "iengine/statlght.h" from
	  simple.txi tutorial.
	- Eric Sushine augmented the csRef<> copy-constructor and assignment
	  operator so that they allow assignment from compatible csRef<> types,
	  rather than requiring assignment from the exact same type of csRef<>.
	  This means that the following type-compatible assignments will now
	  work as expected:
	    struct iFoo : public iBase {...};
	    csRef<iFoo> f = ...;
	    csRef<iBase> b(f);
	    b = f;
	- res disabled Eric's new csRef<> copy-constructor and assignment
	  operator, as it caused problems on VC7. Specifically, MSVC7 doesn't
	  seem to call that constructor, messing up reference counting.
13-Mar-2004
	- John Harger fixed the nVidia part of the PS1 plugin so that it will
	  use the correct texture target on a 'tex' instruction.
	- Jorrit reverted a change res made to the sprite3d normal calculation
	  on 7 August 2002. This change caused access to uninitialized memory.
	- Jorrit fixed the 'addghost' command in walktest so that it no longer
	  uses the deprecated SCF_QUERY_INTERFACE to get the polygon mesh
	  for collision detection.
	- Jorrit fixed a problem with the 'addghost' command. It caused an
	  overflow in the collision detection routine because that routine
	  was hardcoded to max 1000 triangles. The ghost was colliding with
	  the camera because it ended up at the same spot and also made sure
	  the table cannot overflow and cause memory corruption).
	- Jorrit fixed movement of ghosts in walktest.
	- res fixed a crash in CSWS caused by csApp::GetFont() having a wrong
	  prototype.
	- res changed glrender3d to not call G2D->FinishDraw() when finishing
	  3D graphics. This makes more sense as BeginDraw() isn't called when
	  beginning 3D gfx and fixes CSWS (it used to come up with black
	  components).
	- res changed the OR compatibility shader to respect the primary
	  color's alpha value.
12-Mar-2004
	- res augmented configure.ac to look for the OpenAL, Cg, and CgGL
	  libraries under a couple different names (differing by case) to
	  ensure that the libraries will be found when cross-building for
	  Windows from Linux.
	- Eric Sunshine fixed win32/csosdefs.h so that it only defines
	  CS_IMPLEMENT_PLATFORM_APPLICATION and CS_IMPLEMENT_PLATFORM_PLUGIN if
	  the client has not already provided definitions for these macros.
	- Eric Sunshine re-simplified the Cg and CgGL checks in configure.ac by
	  reverting Frank's changes and instead using the library name
	  "aliases" feature of CS_CHECK_LIB_WITH().
	- res added another alias for Cg resp. CgGL: the Linux Cg libs use a
	  mixed case 'Cg' in the names.
	- Eric Sunshine reverted Frank's last change to the Cg and CgGL checks.
	  The "Cg" and "CgGL" capitalizations are already accounted for by the
	  first argument of CS_CHECK_LIB_WITH(), which is the library's most
	  common name.
11-Mar-2004
	- Eric Sunshine performed an overhaul of the "Creating an External
	  Crystal Space Application" HOWTO since it was extremely outdated.
	  Also overhauled and simplified the related
	  cs-config/Makefile.template.
	- Eric Sunshine performed some minor cleanup of material recently added
	  to apimod98.txi.
	- Jorrit fixed a bug in csImageMemory. If the 'destroy' flag was set
	  to false it would still destroy the memory at destruction because
	  the superclass (csImageFile) does that. Solved by overriding the
	  destructor and FreeImage() and clearing the 'Image' pointer if
	  destroy_image is not set. This fixes a bug with map2cs.
	- res silenced some VC compiler warnings in regcomp.c.
	- res fixed some constness issues on VC6 in the freefnt2 and fontplex
	  plugins.
	- res removed some unused stuff from csfont.
	- duhprey removed collision detection for the sky in terrain
	- John Harger fixed a the constants, the SUB and the PHASE instructions
	  in the PS1 shader plugin for ATI cards.
10-Mar-2004
	- res made the following changes related to fonts:
	    - Removed iFontServer::GetFont() and GetFontCount().
	    - Removed iFont::SetSize(). The size is now a parameter to
	      LoadFont().
	    - Changed the behaviour of LoadFont() accordingly; now, only for
	      same font name/font size pairs instances of the same font will
	      be returned.
	- res added a note to the movie recorder HOWTO that the plugin can
	  also be loaded via the command line.
	- res partially rewrote the Custom Font HOWTO. It stated that the
	  best approach for custom fonts would be bitmap fonts converted from
	  truetypes. However, using fontplex offers better I18N support.
	- Eric Sunshine fixed `--plugin=' example in the movie recorder HOWTO
	  so that it shows the proper full SCF class name (which is required by
	  --plugin=), rather than only the final component of the name.  Also
	  fixed some typographical, grammatical, and Texinfo mark-up problems;
	  as well as TeX `hbox' warnings.
	- res updated cslight and g2dtest for his recent font changes.
	- res added an example of setting the font size in the old vs new way
	  to the resp. API mod paragraph.
	- res changed csHash<> interface to contain two variants of Get(); one
	  that returns a pointer to the contained data or 0, the other returns
	  a reference to the data or a user-specified fallback value. This
	  change removes the need for contained types to have a constructor
	  accepting a single parameter, which would be used to construct a
	  'zero' return value in case a key wasn't found in the hash.
	- res changed the csRefDocumentation slightly; at one place, 'csRef'
	  was used, tho 'csRefCount' would make more sense there.
	- res fixed the xwindow plugin after the csHash<>::Get() change.
9-Mar-2004
	- Wouter clarified a comment on iLightingInfo::InitializeDefault().
	- Reed added "relight" command to Walktest.
8-Mar-2004
	- Philip Wyett eliminated warning in odeparticles.cpp.
	- Jorrit fixed the old OpenGL renderer so that disabling texture
	  mapping again works correctly (only lightmaps are rendered).
	- Wouter removed old comment from iSector::GetLights() that
	  instructed the user not to add dynamic lights to the list,
	  but to use SetSector() instead. This method has been removed.
	- John Harger finally implemented the cylinder emitter type in
	  particles.
	- res fixed the movie recorder to emit a proper warning when the movie
	  couldn't be created.
7-Mar-2004
	- Jorrit added a db_mesh_name field to csRenderMesh (but only
	  in debug mode!). This field is updated by the engine (before
	  calling AddRenderMeshes()) and can be used for debugging
	  purposes. Without this field it is extremely hard to discover
	  the source of a csRenderMesh.
	- Jorrit again fixed a few errors throughout the Crystal Space
	  project as reported by valgrind.
	    - engine: portal containers didn't initialize the material field.
	      Although this material field is strictly not needed it was used
	      by the csRenderMeshList to sort two portals relative to each
	      other.
	    - NR OpenGL renderer: in the csVBORenderBuffer implementation there
	      was a potentially serious lack of initialization with the
	      'lastLock' field.
	    - Thing mesh: the useLightmap field was not initialized.
6-Mar-2004
	- Anders Stenberg finally found and fixed a clipper problem in NR,
	  which actually turned out to be more than a clipper problem.
	- Jorrit fixed a few errors throughout the Crystal Space project
	  as reported by valgrind. Please people! Remember to initialize
	  your variables!!!
	    - engine: current_visnr was not initialized in csSector.
	    - engine: with NR enabled the fog structure was not initialized
	      (but it was used in csPortalContainer).
	    - spr3d: single_step field was not initialized to false.
	    - spr3d: frame_increment field was not initialized to 1.
	    - explosion mesh: lighted_particles was not initialized to false.
5-Mar-2004
	- Jorrit changed 'userobject' in csKDTree to a csRef<iBase>.
	- Eric Sunshine increased robustness of CS_STATIC_VARIABLE_CLEANUP by
	  making it operate gracefully if invoked multiple times; rather than
	  simply crashing.  Also fixed it so that it does not realloc() a null
	  pointer since doing so is not portable.
4-Mar-2004
	- Eric Sunshine renamed the CS Java bindings package to
	  com.crystalspace (was net.sourceforge.crystal).
	- Jorrit fixed a 'verbose' message to use the reporter instead
	  of printf in thing mesh plugin.
	- Jorrit removed the iTextureManager->SetVerbose() function. This was
	  not used and it is also better to handle this using -verbose
	  commandline option if needed.
	- Jorrit fixed the handling of CS_ENTITY_CAMERA objects in the new
	  renderer. This fixes stuff like skyboxes (like the one used in the
	  csdemo space demo).
	- Jorrit fixed a few broken CS_ASSERT's in glrender3d.
	- Jorrit attempted to fix the stencil clipper in combination with
	  stencil shadows but failed so far (NR OpenGL renderer).
3-Mar-2004
	- Eric Sunshine added REGEX.AVAILABLE=no to msvcgen/required.mak to
	  ensure that generic/regex.c gets included in csutil project file.
	- Jorrit did a considerable cleanup of the NR OpenGL clipping system.
	  Only two options are now possible: stencil and glClipPlane. Stencil
	  is now default because it is usually (a lot) faster then glClipPlane.
	  This gives a huge performance boost in some cases.
	- Jorrit also added MaxTextureSize config option to r3dopengl.cfg.
	- Jorrit added PreferClipPlane config option to r3dopengl.cfg.
	- Jorrit added some more reporting to the NR OpenGL renderer if
	  -verbose is used. More specifically the maximum texture size,
	  VBO support, point sprite support, the use of nVidia extensions,
	  the use of ATI extensions, and if glClipPlane is prefered are now
	  all reported.
	- Jorrit optimized NR GL clipping a bit more by caching the current
	  values given to SetupClipper().
	- Jorrit added more reporting to the NR GL renderer. Also removed
	  the bugplug counter for triangles and meshes if verbose is not
	  given.
	- Jorrit added a small optimization to the NR GL renderer with
	  ApplyObjectToCamera().
	- Eric Sunshine converted csappframe.mak, csgeom.mak, csgfx.mak,
	  cstool.mak, and csws.mak to the new style where built resources are
	  placed in a target-specific subdirectory of $(OUT) rather than
	  directly polluting $(OUT).
2-Mar-2004
	- Jorrit modified the stdrep plugin (standard reporter listener) so
	  that it now prints all messages on standard output if the
	  -verbose commandline option is given.
	- Jorrit disabled the rule for GF Go and MX in gldrivers.xml since
	  it prevents proper operation of the r3dtest map (i.e. stencil
	  shadows no longer work then).
	- Jorrit fixed cs-config. For some reason it was adding
	  csappframe as a standard library. But csappframe should not be
	  standard because it adds things like CS_IMPLEMENT_APPLICATION
	  which many applications already have on their own.
	- John Harger added an experimental plugin to provide fragment program
	  support for DX8 type video cards (GF3/4,R8500-9200) using the
	  DX8 pixel shader language. Please read the readme.txt file before
	  you try to use this. I would like anyone interested to test it out
	  using PS 1.4 programs (for ATI) and PS 1.1 (for nVidia). Let me know
	  of any problems or errors. PS 1.4 emulation will work on all Radeon
	  8500 and up, while PS 1.1 will only work on nVidia GeForce 3 and up.
	- Norman Kraemer added the missing csGetMouseDesc, csGetJoystickDesc
	  and FromEvent methods/funtions in the csInputDefinition class.
	- John Harger fixed the Cg plugin so it works again. Also added a
	  <profile></profile> option to force a profile instead of using
	  whatever the newest supported profile is. (Useful for forcing
	  arbvp1 vertex programs so you can use the "glstate") Newest profile
	  is still the default behavior.
	- Eric Sunshine eliminated a few compilation warnings about potentially
	  uninitialize variables in glfontcache.cpp
	- Eric Sunshine eliminated a slew of compilation warnings from the new
	  glshader_ps1 plugin.
	- Eric Sunshine updated user.mak and shaderplugins/Jamfile so that the
	  new glshader_ps1 plugin actually gets built.  Also augmented
	  msvcgen/workspaces.mak to take this new plugin into account.
	- res removed regex.c from msvcgen/win32.mak again. Seems it appears
	  in some other place, and thus occurs twice in the generated VC
	  libcsutil project.
1-Mar-2004
	- res augmented the Win32 canvas to allow retrieval/setting of the
	  window rectangle (via PerformExtension()).
	- Eric Sunshine added missing LibDepends rule invocations to the
	  various "common" library Jamfiles throughout the project.  This
	  should fix the problem where "static" linking failed because the
	  libraries appeared in the wrong order in the emitted link command.
	  Also added explicit documentation to various Jamfiles stating that
	  the Jam rules are presently (and unfortunately) order-sensitive, such
	  that Jam must see LibDepends invocations before it sees associated
	  LinkWith invocations.
	- Eric Sunshine updated the OpenDivX "sufficiently recent" configure
	  check so that it tests for DEC_PARAM::color_depth rather than just
	  checking for DEC_PARAM.  Apparently, the color_depth member was added
	  to OpenDivX some time after DEC_PARAM was introduced.
	- Eric Sunshine fixed 'regexp' check in configure.ac so that it
	  actually works.  It needed to include <sys/types.h> before <regex.h>
	  as mandated by POSIX.
	- Eric Sunshine refactored csRegExpMatcher in order to avoid duplicated
	  code.  Also improved robustness of error handling.
	- Eric Sunshine privatized CS's copy of glibc's "regex" implementation.
	  It now resides in libs/csutil/generic, including regex.h which had
	  been in include/csutil.
	- Eric Sunshine restored csutil.mak and csutil/Jamfile so that they
	  once again perform wildcard on *.c.
	- Eric Sunshine eliminated compilation complaint from unix/instpath.cpp
	  about CS_CONFIGDIR and CS_PLUGINDIR being undefined when building
	  with GNU make.
	- res fixed a problem with the link library order when doing static
	  builds: the LinkStaticPlugins Jam rule didn't respect that the last
	  occurance of a lib has to remain when filtering out duplicates from
	  the list of libs later passed to the linker; instead, it preserved
	  the first.
	- Eric Sunshine converted csutil.mak, macosx.mak, unix.mak, and
	  win32gcc.mak to the new style where built resources are placed in a
	  target-specific subdirectory of $(OUT) rather than directly polluting
	  $(OUT).
	- res changed the data/config/Jamfile to also install .xml files.
	  Needed for the GL driver db.
	- res fixed mk/msvcgen/win32.mak to include generic/regex.c into the VC
	  projects of csutil.
	- Eric Sunshine fixed glrender.mak and gl_render3d.mak so that they
	  install data/config/gldrivers.xml, which is needed by the OpenGL
	  driver database.
	- Eric Sunshine fixed bugs in aws.mak and aws/Jamfile where they
	  neglected to set up a dependency for the derived skinlex.cpp upon the
	  derived skinpars.hpp.  As a result, by happenstance, skinlex.cpp,
	  which includes skinpars.hpp, was being compiled before skinpars.hpp
	  had been generated by Bison, thus skinlex.cpp incorrectly #included
	  the factory-supplied skinpars.hpp rather than the generated one.
	  This problem manifested, for instance, when Bison 1.875 was
	  installed.  skinlex.cpp would find the factory-supplied skinpars.hpp
	  (created by Bison 1.35) and define awslex(yystype), yet the generated
	  skinpars.cpp (created by the installed Bison 1.875) would be
	  expecting awslex(YYSTYPE).
	- res removed references to the old gl*.cfg configs from glrender.mak.
	- res disabled ARB_vertex_program ext in the GL driver db for GeForce
	  MX and Go hardware (known to emulate it in software.)
29-Feb-2004
	- Eric Sunshine augmented the configure.ac Python check so that it can
	  detect a working Python installation on MacOS/X despite the fact that
	  the Python link library is missing.  Apparently, the Python
	  installation on MacOS/X is still using the one-level linker
	  namespace, which means that undefined symbolic references in
	  extension modules will be satisfied by the executable itself as the
	  extensions are loaded, rather than being resolved by a link library.
	  This allows CS's pure Python `pythmod' extension to work on MacOS/X.
	  Unfortunately, however, it does not help for the CS plugin `cspython'
	  since none of the CS Python example programs will be able to link
	  against the missing link library.
	- Eric Sunshine augmented cspython/pythmod_setup.py so that it now
	  accepts additional compiler and linker flags, and so that multiple
	  library directories can be specified rather than only a single one.
	  It is also now possible to tell pythmod_setup.py which compiler to
	  use, rather than hard-coding g++.
	- Eric Sunshine added "-framework AppKit -framework Foundation" to the
	  linker flags for the `pythmod' extension to ensure that it can be
	  loaded on MacOS/X.
	- Eric Sunshine augmented pythmod_setup.py so that it filters out
	  "-arch i386" from the linker arguments if present.  This allows the
	  `pythmod' extension to build cleanly on MacOS/X for PowerPC.
	- Eric Sunshine fixed problem with Cygwin when linking the `pythmod'
	  extension where "-lgdi32 -lshell32" appeared in the link statement
	  before the standard CS libraries (cstool, csutil, etc.).  This
	  resulted in unresolved symbolic references since the CS libraries
	  rely upon gdi32 and shell32.
	- Eric Sunshine sanitized the definitions of CC, CXX, OBJC, and OBJCXX
	  in the makefile build system so that they no longer contain a
	  trailing "-c".  This makes these variables more consistent with
	  like-named variables in makefiles the world over.
	- Eric Sunshine fixed copy/paste bug in cspython.mak where
	  `cspythonclean' rule did not get defined if Swig was not detected.
28-Feb-2004
	- Philip Wyett removed reference to 'include/imesh/thing' dir from
	  CS spec file.
	- Vincent Knecht augmented CS spec file to compute flarge and partsys
	  lightmaps.
	- res simplified the GL color (de)composition in the canvases. No need
	  to juggle with pixel formats here.
	- res changed the GL canvases to use scissor instead of manual
	  clipping.
	- res fixed a few memory leaks in VFS.
27-Feb-2004
	- Jorrit enabled the Dynavis write queue again since it appears to
	  be giving better fps in most cases. Perhaps we need to come up with
	  a way to avoid the write queue overhead in cases where it would
	  be worse.
	- Jorrit fixed the walktest movement recording feature to also record
	  'perftest' command. That way it is possible to make walkthroughs
	  through a level with performance tests included.
	- Jorrit fixed playback of a recorded file in walktest so that it
	  ignores the sectors it cannot find. In that case it will simply
	  stay in the current sector. This makes it possible to use a
	  recorded sequence that was recorded while in a multi-sector
	  level and reuse that same sequence in a single-sector level (provided
	  it represents exactly the same geometry).
	- Jorrit removed the last remnants of perfstat usage in Walktest and
	  then he removed the perfstat plugin itself.
	- Jorrit added 'playonce' command to Walktest. This is similar to
	  'play' but it doesn't loop the recorded demo. Assigned alt-r to
	  this command.
	- Jorrit extended walktest demo playback so that it shows the fps after
	  finishing one run.
	- Jorrit fixed a bug in portals. The default polygon mesh for
	  visibility culling would be empty (because the VISCULL flag was
	  not set for the portals).
	- Jorrit extended Dynavis with a special case for single polygon
	  objects (portals are often such objects). Since portals are
	  expensive to render it is worth the effort to try to do a little
	  more work on them.
	- Jorrit changed Dynavis so that the polygon based culler is selected
	  if there are less then 10 polygons.
	- res fixed csutil.mak to not use all .c files, but only regexp_impl.c.
26-Feb-2004
	- Eric Sunshine fixed the old renderer gl3d, soft3d, null3d, and the
	  ISO engine plugins so that they once again build successfully
	  following Anders Stenberg's rewrite of the shader variable system.
	  Also eliminated some related compilation warnings.
	- Jorrit put a pointer to the meshwrapper in csPortalContainer so
	  that getting the movable is more correct and more efficient.
	- Jorrit added an optimization to Dynavis where it would insert
	  an inverted version of the portal clipper to the coverage buffer
	  to improve culling.
	- Jorrit added the 'toggle_invertedclipper' command to Dynavis to
	  switch the new feature on/off (default on).
	- Jorrit made all Dynavis switches static so that they operate on
	  all instances of Dynavis at once.
	- Jorrit fixed a bug in the NR texture manager for OpenGL. If the
	  sourceType of the texture is equal to GL_UNSIGNED_SHORT_5_6_5
	  (i.e. 16 bit) then it would allocate not enough memory to keep
	  the image_data in.
	- Jorrit modified the thing plugin so that by default it will only
	  give 10 warnings about bad UV coordinates unless the -verbose
	  commandline option is given.
	- Jorrit did a big optimization to the NR by removing a
	  CS_QUERY_REGISTRY in a critical spot (csGLShaderFVP::SetupState()).
	- Jorrit fixed a bug in the NR texture manager. It would use
	  SCF_QUERY_INTERFACE to get the shader manager from the object
	  registry instead of CS_QUERY_REGISTRY in some case.
	- Anders Stenberg optimized rendermesh sorting in NR to minimize
	  vertex buffer switches. This requires mesh plugins to supply an
	  ID for geometry to be effective, which currently only genmesh
	  and thing (through polygonmesh) is augmented to do.
	- Jorrit fixed a BIG BIG bug in Dynavis which had the effect that
	  Dynavis would do nearly all the work needed to cull objects but
	  nothing would be culled. This bug was introduced 19-Feb.
	- Jorrit temporarily disabled the write queue in Dynavis since it
	  now seems to cause a lot of overhead. To be investigated!
	  This might be related to nodes which don't get culled if the
	  write queue is enabled. This can possibly be solved by letting
	  the nodes respect the write queue too.
	- Eric Sunshine changed SCF_QUERY_INTERFACE(context, iMeshWrapper) in
	  csThingLoader::Parse() to use SCF_QUERY_INTERFACE_SAFE() since
	  `context' might be null.  Reported by Atis Elsts <atisel@inbox.lv>.
	- Eric Sunshine augmented the OpenDivX check in configure.ac so that it
	  tests for presence of DEC_PARAM since at least one user's
	  installation seems to be lacking this necessary typedef.
	- res made the following changes:
	    - Added sanity check to some csStrNew() variants.
	    - Added a iConfigFile implementation for XML format config. Only
	      reading, though.
	    - Added support for regular expressions. Uses implementation from
	      the system's runtime, if available, otherwise uses built-in
	      implementation borrowed from glibc.
	    - Added a "GL driver database". Depending on a set of rules
	      the GL canvases now load certain config settings. See
	      data/config/gldrivers.xml.
	- res fixed a cut'n'paste error in the regexp configure check.
	- Eric Sunshine removed empty & unused data/config/render3d/opengl.cfg
	  and data/config/render3d/render3d.cfg.  Also fixed a couple other
	  configuration file-related problems.
	- res fixed regexp_impl.c to actually honor the result of the regexp
	  check.
	- res merged the old config/gl*.cfg configs into the the new driver
	  database and removed the old mechanism for driver-specific settings.
	- res changed the driver DB implementation to report what rules have
	  been applied.
25-Feb-2004
	- Fritz Elfert fixed the following lighting related crash in sprcal3d:
	  Previously, csSpriteCal3DMeshObject managed a set of relevant lights
	  in a private set.  Since introduction of the new iLightManager API,
	  this internal set ran badly out of sync, resulting in various crashes
	  when lights were removed from a sector.  Now, csSpriteCal3DMeshObject
	  properly uses the light manager's GetRelevantLights() function.
	- Jorrit added a new 'colorsectors' command to BugPlug (default
	  assigned to ctrl-shift-c).  This command will set dynamic ambient of
	  all sectors to a different color (max 14 different colors).  This is
	  useful for debugging complex portal based levels so you can easily
	  see what object belongs to what sector.
	- Jorrit fixed a bug with the ball mesh where colors generated by the
	  special 'PaintSky()' and related routines were no longer being
	  honored.
	- Jorrit fixed the default clip plane that is set by csEngine::Draw().
	  It was currently not used by anything but it will now be used.
	- Jorrit enhanced Dynavis and Frustvis to use the clip planes as
	  defined by the last portal that was traversed. This can benefit
	  performance a bit.
	- Jorrit fixed a bug in waterdemo.  It would forget to call
	  Invalidate() after changing the genmesh vertices.  This bug triggered
	  after Jorrit made a modification so that simply calling GetVertices()
	  on a genmesh does not make the vertex buffers dirty in NR.
	- Eric Sunshine augmented the csRGBpixel constructor so that client can
	  optionally specify alpha value.
	- Anders Stenberg reworked the shader variable system, and hopefully
	  improved the performance of it quite a lot.
	- Anders Stenberg fixed a broken shader (lightmap.xml)
	- Duhprey fixed the scattering base, it probably wouldn't show up
	  otherwise
	- Eric Sunshine fixed vfs.cfg so that it mounts $@data/aws/.  This
	  allows the AWS example programs to locate their .def files following
	  relocation of those files from data/temp to data/aws on 10-Feb-2004.
	- Eric Sunshine removed the ugly "additional object files" hack from
	  the Library rule in library.jam which allowed clients to associate
	  additional object files with a library target.  This hack was needed
	  for a while before the cssys sources were merged physically into the
	  csutil sources.
	- Duhprey fixed a couple bugs with the shader vars change.
	- Eric Sunshine fixed bug in bison.jam where it was not
	  variant-friendly (variant.jam).  When the Bison rule was invoked
	  indirectly via the Plugin rule, this problem would cause generated
	  non-variant files to depend incorrectly upon generated files in the
	  "static" variant.  Also corrected some other inconsistencies and
	  strangeness in bison.jam.
24-Feb-2004
	- Fritz Elfert fixed conversion of bezier mesh factories in map2cs
	  and re-enabled them (With wrong cvs log-message: "Before big
	  camera change", sorry).
	- res added a "mesh" mixmode. Works similar to the "mesh" zmode, if
	  used as the mixmode in a shader pass the rendered mesh's resp.
	  mixmode will be used.
	- res made some fixes so NR properly respects the "alpha" mixmode.
	- Fritz Elfert fixed an msvc compile error in the null renderer.
	- Eric Sunshine added some content to the front page of the API
	  reference manual since people seem to be regularly been confused by
	  its emptiness and easily miss the links at the very top of the page.
	- Eric Sunshine fixed bugs in odivx.mak and odivx4.mak where $ prefix
	  was missing in a variable expansion.
	- Jorrit fixed a bug in the thing mesh object which he introduced
	  yesterday. This bug caused weird stripes on lightmapped polygons.
	- Duhprey made the software renderer compile with NR, but broke the
	  polyrenderer
	- Eric Sunshine replaced a few forward declarations in some Thing
	  headers with #includes to ensure that class declarations are seen
	  before the classes are used in csArray<> templates.  This should
	  pacify some older compilers.
	- Jorrit fixed the <float/> keyword for portals (g3d->OpenPortal())
	  for the OR OpenGL renderer. The problem was that with some clipping
	  modes the portal clipper would be disabled AFTER setting up the
	  clipper. This would cause the stencil clipper to be disabled
	  again with bad effects.
	- Jorrit partially reverted Eric's changes to including headers in
	  the thing mesh plugin because they break compilation. This will
	  now most likely break compilation on the older compiler but I'm
	  uncertain how to fix this.
	- Eric Sunshine re-applied Eric's changes which Jorrit reverted, but
	  this time with sufficient changes to work around the incredible
	  number of circular dependencies between Thing headers which tripped
	  it up the first time.
	- Eric Sunshine added a few more csGeom classes and interfaces to
	  cspace.i at user request.
	- Eric Sunshine augmented msvcgen/required.mak to ensure that null3d
	  renderer is included in wkstypical and wksall.
	- Eric Sunshine made the Jam 'distclean' rule safer.  If the build
	  directory differs from the source directory, then 'distclean'
	  attempts to remove the 'include' directory which is created by the
	  configure script.  If the build and source directories are the same,
	  then it deletes only volatile.h from include (since it would be
	  incorrect to delete all of CS/include).  Previously, though, the
	  logic for detecting if the build directory differed from the source
	  directory was flawed, and it was possible to fool it into deleting
	  the entire CS/include.  Now, 'distclean' deletes the 'include'
	  directory if and only if the directory contains one file: volatile.h.
	- Eric Sunshine updated several modules to reflect the fact that
	  iSCF::QueryClassList() now returns a csRef<> rather than a raw
	  pointer.
23-Feb-2004
	- Jorrit moved the Engine.Lighthing.LightmapQuality config option
	  from engine.cfg to thing.cfg (and renamed it
	  to Mesh.Thing.LightmapQuality). In addition also moved the flag that
	  is controlled by this option from csEngine to csThing. Lightmaps
	  are part of thing and the engine has nothing to do with them.
	  This move also fixes the -lightqual option which was broken since
	  things moved out of the engine.
	- Jorrit modified the engine to print out more information during
	  lighting only when -verbose is specified on the commandline.
	- Jorrit moved csPolyTextureMapping from include/imesh/thing/polygon.h
	  to include/ivideo/polyrender.h where it belongs.
	- Jorrit moved include/imesh/thing/thing.h to include/imesh/thing.h.
	- Jorrit made all fields in csPolyTextureMapping private and
	  added appropriate getters. Also added an '=' operator so that
	  the Clone() in csThings can use that. This also fixes a bug
	  because res2k added fields to csPolyTextureMapping and forgot
	  to update Clone().
	- res fixed a crash-at-exit in xmlread. An object was deleted,
	  although apparently instances of it were referenced in other places.
	  Now the object isn't forcibly deleted any more, and further, the
	  xmlread plugin won't get unloaded as long as documents (or document
	  systems) of it are still floating around.
22-Feb-2004
	- Duhprey made null renderer for the NR.  (Shaders currently try to
	  load with error, but it appears to be harmless.)
	- res made the following changes:
	    - Updated csRefArray<> to support the reference tracker.
	    - Leak and circular reference fixes.
	    - Fixed some classes which confused the reference tracker.
	    - Removed the custom DecRef() code from the stdrep plugin.
	    - Moved the code to access DbgHelp.dll on Win32 out of
	      callstack.cpp into a separate file. Also created a header for it.
	- Eric Sunshine fixed several makefile and Jamfile problems with the
	  new null renderer for the NR, including a sizable number of
	  copy/paste errors.
	- Eric Sunshine adjusted msvcgen/workspaces.mak to take into account
	  new nullrender3d module.
	- Andrew Craig fixed a ref problem in imgplex plugin that caused it
	  the initialization function to segfault.
	- res unified the shader var syntax for materials and shaders. Both
	  the material parser in csloader and the shaderparse in xmlshader
	  utilize iSyntaxService->ParseShaderVar(). The syntax for a shadervar
	  is now:
	    <shadervar name="..."
	     type="[float|vector2|vector3|vector4|int|texture]">
	     texture|x[,y[,z[,w]]]</shadervar>
	  For SV blocks in shaders the syntax is now
	  <shadervars>...</shadervars>.
20-Feb-2004
	- Jorrit added a csArray::GetIndex() function which will return the
	  index of an element in the array (as input you give a pointer to
	  the element in the array).
	- Fritz Elfert eliminated several MSVC6 compiler warnings.
	- Jorrit removed the index from every polygon. The polygons are
	  now stored in a csArray<csPolygon3D> instead of a
	  csArray<csPolygon3D*>. This saves memory and also makes polygon
	  handling a bit faster.
	- Jorrit made the rapid plugin a bit more optimal (memory usage) by
	  using indexed triangles instead of triangles containing vectors.
	- Jorrit optimized csHash by allocating the buckets with empty
	  elements instead of one.
	- Jorrit did a big optimization in genmesh by allocating the
	  hashes more efficiently (they don't need a hash that is preallocated
	  at 257 items).
	- Jorrit fixed a weird bug in walktest (introduced by res2k) which
	  simply disabled `coordshow' directly after enabling it.
	- Jorrit rewrote the csFrustum code to avoid the old vertex pools.
	  Instead the code now uses csBlockAllocator.
	- Eric Sunshine upgraded Jam's msvcgen.sh so that it can be invoked
	  from a build directory which differs from the source directory.
	- Eric Sunshine applied another ugly patch to msvcgen/Jamconfig to
	  allow it to inherit platform-specific configuration properties from
	  the generated Jamconfig instead of blindly using hard-coded values
	  for items which it could not possibly guess correctly.  (In the
	  future, as noted on numerous occassions previously, the entire ugly
	  hack embodied by msvcgen.sh and msvcgen/Jamconfig must be retired.
	  People should be able to build project files by invoking "jam
	  -sMSVC_VERSION=7 msvcgen" directly.)
	- Eric Sunshine eliminated an entirely superfluous and ugly hack in
	  msvcgen.jam which tried to insure that the resource file (.rc) had
	  the correct path in the generated project file.  The more correct fix
	  involved slightly re-ordering the --strip-root options given to
	  msvcgen.pl.  As a happy side-effect, removal of the hack also fixes a
	  bug in which it was unconditionally referencing mk/visualc7, despite
	  the fact that MSVC_VERSION might be "6".  Also fixed a couple other
	  minor bugs and did a bit of cleanup.
	- Eric Sunshine fixed problem in csXMLShaderCompiler::CompileShader()
	  where some compilers considered the return expression ambiguous.
	  Also fixed bug in ~csXMLShaderCompiler where it failed to invoke
	  SCF_DESTRUCT_IBASE().
	- Norman fixed the frequency conversion routine in the software sound
	  renderer where a float factor was determined by dividing two
	  integers.  When downsampling was performed the downsampled data was
	  zero bytes long (muted).
	- Eric Sunshine augmented cspace.i so that it also publishes csPixmap.
19-Feb-2004
	- res made the following changes:
	    - A few minor cosmetic changes.
	    - In the common texture manager code, 0 was assigned to a struct
	      in NR builds.
	    - The iBase implementation of csGenericRenderStepFactory
	      errorneously used SCF_IMPLEMENT_EMBEDDED_IBASE_END instead of
	      SCF_IMPLEMENT_IBASE_END.
	    - Enabled RTTI for VC debug builds.
	    - Commented out "RTTI enabled" #error in opcode.
	    - Added an interface to obtain call stacks.
	    - Added an call stack implementation for Win32. Pretty much only
	      supports VC debug symbols atm, tho.
	    - Added a mechanism to track where interfaces and references are
	      increased resp. decreased.
	- Neil Mosafi changed csvosa3dl plugin to listen to children as well
	  as properties and use child changes to initiate property listening.
	  This is a more correct way of doing things.
	- res removed a char too much.
	- Neil Mosafi changed vospolygonmesh to use iMeshObjectFactory to set
	  the CS_THING_NOCOMPRESS flag which was previously a flag of
	  iThingFactoryState.
	- res removed SCF_CONSTRUCT_IBASE/SCF_DESTRUCT_IBASE from the
	  csImageMemory ctor/dtor. csImageMemory inherits from csImageFile
	  which already invoked those macros.
	- res fixed a leak where shadervars were created with new, but not
	  properly DecRef()ed.
	- Jorrit fixed a bug in Dynavis with empty occlusion objects. It would
	  try to put those on the coverage buffer with bad initialized arrays.
	  The current solution is very optimal in that objects with no
	  occlusion objects will now be completely ignored for occlusion
	  writing as the old code always attempted to process them (and
	  failed later).
	- Jorrit removed another 16 bytes per polygon by removing the world
	  space plane from every polygon and putting that in a seperate array
	  in csThing. The array in csThing is only created if the object has
	  moved so for most static geometry this optimization will be useful.
	- Jorrit did some small optimizations on thing lighting.
	- Jorrit removed four bytes in every polygon by removing the unnused
	  material there. Also removed the API to set materials on polygons
	  in a thing. This should be done by using the ReplaceMaterials api.
	- Jorrit made thing a bit more memory efficient by calling
	  ShrinkBestFit() on the various arrays that are used during setup of
	  a thing. These arrays are typically not modified after they are
	  created so it is best that they have exactly the size that they need.
	- Jorrit removed 16 bytes from every lightmapped polygon by removing
	  unneeded fields from csGLRendererLightmap (in the GL renderer).
	  Also for software renderer.
	- Jorrit fixed a bug in csBlockAllocator::Compact() so that it actually
	  works.
	- Jorrit optimized thing a bit more by deleting the csSubRectangles2
	  structure after calculating the optimal lightmap distribution.
	- Jorrit fixed a problem with dynamic lighting and things. It would
	  call lm->CalcMaxStatic() all the time which is very slow. The
	  static lightmap doesn't change with dynamic lighting so calling
	  this function is totally wasted.
	- Jorrit implemented a big memory savings in the thing plugin. If a
	  lightmap contains all the same values it will be compressed to that
	  single value. This saves a considerable amount of memory on big
	  maps.
	- Eric Sunshine augmented the OpenAL check in configure.ac so that it
	  utilizes -lm (if available).	This seems to be needed by Suse 7.3
	  Linux.
	- res unbroke the VC7 plugin project templates which he broke (by
	  accident, presumably :-).
	- Eric Sunshine performed more cleanup and clarification of the Smart
	  Pointer HOWTO (smartptr.txi).
18-Feb-2004
	- Jorrit added the ability to specify defaults for mesh object types
	  in the map loader. Here is an example to demonstrate how this works:
	      <plugins>
		<plugin name="thingFact">
		  <id>crystalspace.mesh.loader.factory.thing</id>
		  <defaults>
		    ...
		  </defaults>
		</plugin>
		...
	      </plugins>
	  Basically you attach the defaults to the short plugin name that you
	  can later use in meshobj or meshfact definitions. These defaults
	  can be anything you can specify directly in the meshobj or meshfact
	  (NOT in the params section!). For example, priority, zfill, and
	  zuse are commands you can place there.
	- Jorrit addes the 'staticpos' and 'staticshape' keywords for mesh
	  objects and factories (only 'staticshape' for factories). These
	  options are hints for the engine. When you specify 'staticpos'
	  for a mesh object the engine knows that the object will never move
	  and can optimize for that (in the future, there are no such
	  optimizations at this moment). If you specify 'staticshape' for
	  mesh objects or factories then you tell the engine that the object
	  will never change shape (or animate). If you specify one of these
	  hints for an object but you violate what the hint means (i.e. you
	  move an object that has 'staticpos' set) then the result will
	  be undefined.
	- Jorrit added iMeshObject->GetFlags() and
	  iMeshObjectFactory->GetFlags() so that it is possible to specify
	  flags for mesh objects and factories.
	- Jorrit added the following flags:
		- CS_MESH_STATICPOS for mesh objects
		- CS_MESH_STATICSHAPE for mesh objects
		- CS_FACTORY_STATICSHAPE for mesh factories
	  These flags will be set by the 'staticpos' and 'staticshape'
	  keywords in the map loader.
	  Mesh objects may implement their own additional flags but these
	  flags must be equal to 0x00010000 or higher.
	- Jorrit removed iThingFactoryState->GetFlags(). The only flag that
	  was there (CS_THING_NOCOMPRESS) has now become a flag of
	  iMeshObjectFactory->GetFlags().
	- Jorrit also updated the level building document with information
	  on the new staticpos and staticshape flags.
	- Jorrit added csBlockAllocator::Compact(). This function will remove
	  all blocks that have no items.
	- Jorrit renamed 'static_data' to 'static_poly' in the thing mesh
	  object. This way it is less confusing because csThing also uses
	  'static_data' to refer to the static thing.
	- Jorrit removed two unnused functions from thing mesh plugin.
	- Jorrit removed 4 bytes for every polygon (removed a pointer back
	  to the polygon in csPolyTexture).
	- Jorrit removed 4 bytes for every polygon (removed lightmap_up_to_date
	  field which was actually not needed).
	- Jorrit removed at least 4 bytes by putting csPolyTexture directly
	  in csPolygon3D. This also avoids one of the block allocators.
	- Jorrit removed another 4 bytes from every csPolyTexture by avoiding
	  the redundant csPolyTextureMapping pointer.
	- Eric Sunshine augmented the OpenAL check in configure.ac so that it
	  utilizes -ldl (if available).	 This seems to be needed by Suse 7.3
	  Linux.
	- Eric Sunshine added a couple missing invocations of
	  SCF_IMPLEMENTS_INTERFACE(iParticlesStateBase) to the 'particles'
	  plugin.
	- Eric Sunshine made the following changes to configure.ac:
	    - Fixed typographical problems in OpenDivX check which resulted in
	      syntax error at run-time.
	    - Fixed bug where the OpenDivX version <4 check was not invoked
	      when the version >=4 check failed.
	    - Generalized the -I/usr/local/include and -L/usr/local/lib checks
	      so that the results apply to all subsequent checks automatically
	      rather than having to be applied manually to selected checks.
	- Eric Sunshine made some minor Texinfo mark-up corrections to
	  levbuilding.txi.  Also eliminated several 'hbox' warnings emitted by
	  TeX.
	- Fritz Elfert fixed a trivial compile error, introduced by the
	  addition of the pure virtual GetFlags() earlier today:
	  Implementation was missing in csChunkLodTerrainObject.
17-Feb-2004
	- Jorrit fixed a bug in csPolygonMeshTools::Triangulate(). It would
	  try to allocate a 0 size array in some cases.
	- Jorrit added support for csArray and csBlockAllocator to the
	  memory tracker. Unfortunatelly I found no way to convert the
	  templated type name 'T' to a string I could print out to make
	  the output more usable. So I'm now using the size of the
	  item that is in the array or block allocator. That should help
	  identify which array is using the memory but it is far from perfect.
	- Jorrit changed the csArray and csBlockAllocator memory tracker stuff
	  to use the 'typeid' RTTI function to get the type information. This
	  way we can produce better output.
	- Jorrit fixed another case where a 0-sized memory chunk is allocated.
	  This time in Dynavis.
	- Jorrit fixed csPolygonMeshTools::CalculateEdges() so it doesn't
	  allocate 0-sized chunks.
	- Jorrit added a bool parameter to Dump() for the memory tracker
	  so that you can get a summary alone. Also cleaned up the
	  total summary line a bit.
	- Jorrit fixed a memory leak in the NR OpenGL renderer which would
	  prevent texture images from being cleaned up properly. On big
	  maps this can save a lot of memory.
	- Jorrit fixed a few more ref-leak problems in the NR texture
	  manager.
	- Jorrit fixed a problem with memdebug which fails the build if
	  you build in optimize mode.
	- Fritz Elfert changed sprcal3d loader so that it defers scaling
	  until loading of all model data is completed. Before, scaling
	  randomly either crashed in cal3d or had no effect at all, depending
	  on the position of the <scale> attribute in the xml file. Standard
	  models that come with cal3d should work with this fix now (at least
	  skeleton does), providing a scale of ~ 0.02.
	- Eric Sunshine added an OpenDivX check to configure.ac.
	- Eric Sunshine fixed bugs in glshader_cg.mak, odvix4.mak, and
	  odivx.mak where they would send linker flags to $(AR) when
	  USE_PLUGINS=no.
	- Eric Sunshine moved more PLUGINS.DYNAMIC assignements out of
	  platform-specific makefiles and into user.mak.
	- Norman Kraemer introduced a csWrapTypedObject function to the swig
	  wrapper to get around those swig versions having SWIG_TypeQuery and
	  others declared as defines and not as functions. So refering to them
	  in the main cspython module would fail.
	  He also modified cspython.cpp to utilize the new function.
	- Steven Geens cleaned up the fountain creation code in the socket
	  test of viewmesh. You still have to move around a bit before you can
	  see the fountain, probably a culling problem.
	- Neil Mosafi added support to the csvosa3dl plugin for automatic
	  listening to movement and orientation changes of a3dl metaobjects
	  Also fixed orientation which was incorrectly using degress instead
	  of radians to set the CS angle.
16-Feb-2004
	- Jorrit fixed rain mesh object so it now has a reasonably default
	  box in case the user doesn't call SetBox().
	- Jorrit fixed csNewParticleSystem so that it first calls
	  SetupObject() before getting the bounds of the particle system.
	- Jorrit added csBox2 and csBox3 functions: AddBoundingVertexTest()
	  and AddBoundingVertexSmartTest(). These functions work the same
	  as the old none-Test() functions but in addition they return
	  true if the box was modified by adding the vertex.
	- Jorrit fixed the fountain particle system so that it correctly
	  updates the bounds. This avoids crashes in some cases. In addition
	  the code will also fire a 'ShapeChanged' to the object model
	  listeners (i.e. cullers) in case the bounding box changes.
	- Jorrit made csNewParticleSystem::UpdateBounds() a bit faster by
	  using AddBoundingVertexSmart() instead of AddBoundingVertex().
	- Jorrit fixed a bug in sprcal3d. It would not set the 'polygon_idx'
	  to -1 in HitBeamObject().
	- Jorrit added a new configure --enable-memory-tracker option. With
	  this option you can compile CS with memory tracking enabled
	  (CS_MEMORY_TRACKER define). Using memory tracking CS will keep
	  track of the amount of memory used per source file.
	- Jorrit implemented a new memory tracker (enabled with the
	  --enable-memory-tracker configure option) which tracks, per module
	  and per source file, the number of allocations and how much memory
	  is being allocated (both maximum and current). There is a new
	  object in the object registry that is registered at
	  'crystalspace.utilities.memorytracker' and that implements
	  iMemoryTracker. This object will keep track of all allocations per
	  'module' (plugin or app).
	- Jorrit added a new 'memorydump' command to BugPlug. This command
	  will try to find the memory tracker and then call Dump() on it.
	  Assigned to ctrl-m key.
	- Eric Sunshine applied some additional corrections to .chm creation
	  scripts/configurations to reflect documentation unification.
	- John Harger cleaned up the particles interface a bit, using Eric's
	  suggestion of the iParticlesBase SCF interface for all shared
	  functions
	- Andrew Craig added a GetDefaultMaterial() to the sprcal3d factory
	  that returns the name of the default material on a submesh.
15-Feb-2004
	- Norman Kraemer removed inclusion of recently removed av3dtxt.h in AWS
	  screencanvas header.
	- Norman Kraemer fixed the call to iEventOutlet::Key() method in SDL
	  and SVGA canvas where -1 was used instead of 0 to force a simple
	  cooked code computation from the supplied raw code.  This also
	  silenced the compiler comlaining about converting -1 to unsigned int.
	- Eric Sunshine improved the robustness of the new ALSA check in
	  configure.ac.
	- Eric Sunshine fixed copy/paste error in MSVC6 template files which
	  caused Release_NR and Debug_NR configurations of all projects
	  (applications, plugins, etc.) to appear to be static link libraries.
	- Eric Sunshine added a number of missing `const' qualifiers to
	  arguments of methods in video- and graphics-related interfaces.
	- Norman Kraemer added support for pre-1.0 version of ALSA.
	- Eric Sunshine changed msvcgen.mak so that the pseudo-group projects
	  are now named 'subproj_workspace' rather than 'subproj-workspace'
	  since MSVC6 seems incapable of groking the hyphen in the name.  Issue
	  reported by Luca Cappa (groton); debugged by Fritz Elfert
	  <fritz.elfert@millenux.com>.
	- Eric Sunshine added CS_PATH_NORMALIZE() macro to new path.m4.	 This
	  macro normalizes a pathname by transliterating Windows/DOS
	  backslashes to forward slashes.
	- Eric Sunshine augmented configure.ac so that it invokes
	  CS_PATH_NORMALIZE() on the CFLAGS, LFLAGS, and LIBS resulting from
	  the Perl and Python checks.  This should help to prevent build
	  problems on MSYS/Mingw and Cygwin since the backslashes tended to get
	  interpreted as escapes at inappropriate times.
	- Eric Sunshine made the following documentation-related changes:
	    - Normalized the stored documentation locations so that they are
	      now organized by output format and type:
		CS/docs/html/manual (was CS/docs/html)
		CS/docs/html/api    (was CS/docs/pubapi)
	      If, in the future, we decide to store an 'info' conversion of the
	      manual, for example, it would be placed in CS/docs/info/manual.
	    - Normalized the location of the documentation when installed via
	      GNU make so that it reflects the above layout:
		${prefix}/crystal/docs/html/manual (was crystal/docs/html)
		${prefix}/crystal/docs/html/api	   (was crystal/docs/pubapi)
	      This better mirrors the way documentation is installed by the Jam
	      build system.
	    - Normalized the built documentation locations for both Jam and GNU
	      make so that they mirror the above layouts:
		${builddir}/out/docs/html/api
		${builddir}/out/docs/html/apidev
		${builddir}/out/docs/html/manual
		${builddir}/out/docs/info/manual
		${builddir}/out/docs/dvi/manual
		${builddir}/out/docs/ps/manual
		${builddir}/out/docs/pdf/manual
	    - Normalized the documentation build target names in both Jam and
	      GNU make so that they reflect the documentation which is being
	      built and the output format:
		manualhtml (was htmldoc)
		manualinfo (was infodoc)
		manualdvi  (was dvidoc)
		manualps   (was psdoc)
		manualpdf  (was pdfdoc)
		manualchm  (was chmsupp)
		apihtml	   (was pubapi)
		apichm	   (was chmsupp)
		apidevhtml (was devapi)
	    - Fixed a lot of shell programming portability problems in the Jam
	      build's docs/support/runmakeinfo.sh, runtexi2dvi.sh, and
	      runtexi2html.sh scripts which caused documentation generation to
	      crash and burn horribly on some platforms.
	    - Fixed docs.mak so that it respects the discoveries of configure
	      rather than hard-coding texi2dvi, dvips, and makeinfo.
	    - Fixed bug in docs.mak where building public and developer API
	      references failed if build directory was not the same as source
	      directory.
	    - Eliminated some convolution from docs.mak by utilizing the
	      relatively new $(MKDIRS) and $(SRCDIR) variables.	 (These
	      variables did not exist when docs.mak was created, thus the
	      convolution was necessary at that time.)
14-Feb-2004
	- Norman Kraemer added an ALSA sound driver.  It can be used if you
	  disabled OSS emulation in your ALSA configuration.
	- Norman Kraemer changed the software renderer to check the commandline
	  for the -sounddriver option.	If that ain't given, the configuration
	  will be checked for Sound.Driver entry to contain a sounddriver to
	  use.	If that fails as well, the default system driver
	  (CS_SOUND_DRIVER) is tried.
	- Norman Kraemer changed unix.mak to include the ALSA plugin if
	  available as well as the configure.ac to check for the alsa
	  requisites.
13-Feb-2004
	- Jorrit updated the todo_newrenderer.txt document and added a list
	  of visual differences between walktest/NR and walktest/OR.
	- Jorrit changed csSubRectangles2 to use a global block allocator
	  instead of one allocator per instance.
	- Jorrit changed Dynavis so that it no longer checks the model
	  when it is inserted in dynavis but instead adds it to the queue
	  of models that need to be checked. By doing that the operation of
	  checking the model is delayed until the materials are prepared and
	  this means that things prepare a lot more efficiently. The way it
	  was before the checking of the object model would force a premature
	  prepare of the thing (before materials are ready) which causes the
	  thing to do only a partial prepare. This is inefficient as it will
	  then have to do the prepare again later. Also for some reason it
	  caused memory leaks. This is probably a bug in thing as there
	  should be no leak on multiple prepare calls.
	- Jorrit added a new bugplug 'unprepare' command to unprepare all
	  thing meshes. Assigned to alt-u.
	- Jorrit enhanced the iThingState->Prepare() function so that the
	  lighting is now also done in that stage. This means that the
	  -prepare option with WalkTest will now prepare things a bit
	  more. This option causes lag to disappear when new things come
	  into view.
	- Eric Sunshine completely overhauled the Texinfo formatting in the new
	  sprcal3d.txi so that it formats properly on the printed page, and
	  rewrote much of the discussion.
	- Jorrit changed the lightmap allocator in the OpenGL renderer to
	  use a global block allocator instead of one per superlightmap.
	  Also did this optimization to the NR OpenGL renderer.
	- Keith added iEngine::FindNamedMaterial() and FindNamedTexture() to
	  allow loaders to get materials and textures which have different
	  names from their filenames while not breaking backward compability
	  with prior behavior. This material change required changing .cal3d
	  file format so that <mesh> tags now require material names instead of
	  filenames.
	- Eric Sunshine fixed bugs in aws.mak and aws/Jamfile where they
	  neglected to link the plugin against txtmgr.o (from renderer/common)
	  despite the fact that AWS's csTextureHandleNull is derived from
	  csTextureHandle in txtmgr.o.
	- Jorrit added a note to levbuilding.txi talking about how thing
	  polygons should be quads for most optimal results.
	- Eric Sunshine removed the unused av3dtxt.{h|cpp} and av3dtxtm.{h|cpp}
	  from AWS.  As a happy side-effect, this eliminates AWS's ugly
	  dependency upon renderer/common/txtmgr.o.
12-Feb-2004
	- Jorrit did several documentation enhancements:
	    - Added a link to the new level building section in the
	      documentation guide.
	    - Added a link to the new genmesh creation HOWTO from the
	      features section.
	    - Added a link to the new genmesh creation HOWTO from the
	      genmesh object documentation.
	    - Added links to the meshobject documentation from the level
	      building section (in the node explaining the different mesh
	      object types).
	    - Added a new (but empty) document for the sprcal3d mesh object.
	      Someone please write this :-)
	    - Added links to the new sprcal3d document from the features
	      section.
	- Jorrit did several other documentation enhancements:
	    - Added mention of the isometric engine to the plugin overview
	      section and removed the sentence that claimed you could use
	      the engine as a library. That's no longer possible.
	    - Removed mention of the obsolete effect system from the
	      graphics section.
	    - Replaced 'effects' with 'shaders' in the XML format document.
	- Luca Pancallo added a new 3DS Max export script (in scripts/max).
	  The following things were changed:
	    - Fixes to genmeshes and thingmeshes, added documentation on how
	      to model those, pivot and rotation issues explained.
	    - Added support for right-handed and left-handed genmeshes and
	      sprites.
	    - Added ability to avoid export of some objects "_n_" prefix.
	    - Changed documentation to be more readable and complete (a new
	      guide!).
	- Eric Sunshine fixed bugs in xmlfmt.txi where it was using incorrect
	  section nesting directives (@section vs. @subsection, etc.).
	- Eric Sunshine fixed a lot of Texinfo markup problems in recently
	  added material.  Also fixed numerous grammatical and spelling
	  mistakes.
	- Jorrit did several particle system related changes:
	    - csNewParticleSystem now also implements iParticleState.
	    - csNewParticleSystem supports all the features of iParticleState
	      (more in particular: the rotation, scale, color, alpha, and
	      the self destruct).
	    - The fountain particle system now works through
	      csNewParticleSystem. This means that it is faster and also
	      works with the new renderer.
	- Jorrit fixed a bug in csNewParticleSystem. If lighting was enabled
	  it would pass an invalid color array to the renderer. This could
	  cause very funky but invalid lighting effects.
	- Eric Sunshine augmented the Python SDK check in configure.ac so that
	  it now works correctly with the Python package for Windows which is
	  distributed by www.python.org.
	- Steven Geens added some documentation about sockets and
	  morphanimations in sprcal3d.
	- Andrew Craig fixed a possible uninitialized idle_action in sprcal3d.
11-Feb-2004
	- Jorrit optimized the csNewParticleSystem slightly (used by the
	  rain mesh plugin) and also cleaned it up a bit.
	- Jorrit also simplified csNewParticleSystem by removing all
	  functions to use seperate materials, rotation, scale, ... for
	  particles. By doing that Jorrit managed to significantly optimize
	  csNewParticleSystem again.
	- Jorrit did a small optimization to csNewParticleSystem. If lighting
	  is not enabled it will not call GetRelevantLights() from the
	  light manager.
	- Jorrit restored bugplug screenshot to put screenshot back to /this
	  instead of /tmp.  Having them in /tmp is very confusing as this will
	  mix screenshots of different apps with no way to distinguish them.
	  [Note from Eric Sunshine: Placing them in /this is a bad idea since
	  /this is unpredictable on some platforms.  For instance, on
	  Macintosh, when you double-click to launch an application, /this is
	  not under your control (it may be your home directory, or it may be
	  /, or it may be within the application's wrapper directory).
	  Likewise, on Windows, if you double-click to launch a directory,
	  /this is entirely dependent upon whatever Windows thinks your current
	  directory is at any given moment (which is often not known to the
	  user).  In the long run, this should be changed back to use VFS /tmp
	  since it is more reliable and safer.]
	- Eric Sunshine updated movierec.txi HOWTO.  It still had a reference
	  to the obsolete user.cfg.
	- Jorrit added a new section in the documentation that tries to explain
	  how to build levels for Crystal Space. It discusses various
	  techniques and tells people what tricks they can use to get most
	  optimal performance.
	- Jorrit extended the new documentation about level building with a
	  note about closed vs non-closed objects and Dynavis.
	- Eric Sunshine added iSCF::GetPluginMetadata() which, given an SCF
	  class name, returns an iDocument containing the meta-information for
	  the plugin module which exports the named class.  This complements
	  the existing csGetPluginMetadata() which returns the same information
	  but expects the physical pathname of the plugin module.
	- Eric Sunshine fixed iSCF::QueryClassList() so that it returns
	  csRef<iStringArray> rather than a raw `iStringArray*'.
	- Eric Sunshine fixed a few Texinfo mark-up errors in levbuilding.txi
	  and untabified the @examples in order to ensure that they display
	  properly when formatted.  (Fixing other Texinfo mark-up problems will
	  have to wait until this document stabilizes.)
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.
	- Jorrit fixed a bug in the NR OpenGL renderer DrawMesh implementation
	  which would not correctly set alpha and keycolor mode in some
	  situations.
	- Eric Sunshine made the following changes:
	    - Augmented configure.ac so that it propagates CS_USE_NEW_RENDERER
	      to $(SWIG.FLAGS).
	    - Fixed csperl5.mak, cspython.mak, and csjava/Makefile so that they
	      respect $(SWIG.FLAGS).
	    - Fixed several bugs in, and performed minor cleanup of
	      csjava/Makefile.
	- Eric Sunshine fixed bug in glrender.mak from 4-Feb-2004.  The
	  SRC.GL3D and INC.GL3D variables were not populated correctly when the
	  build directory differed from the source directory.  Specifically,
	  everything from the opengl/effects subdirectory was missed.
	- Eric Sunshine devised and implemented a scheme which allows `msvcgen'
	  to synthesize the familiar pseudo-group projects "grpall", "grpapps",
	  "grplibs", and "grpplugins" despite the fact that the contents of
	  these groups differ from workspace to workspace.  (These groups were
	  originally removed on 4-Feb-2004 with the introduction of multiple,
	  customized workspaces, because the old scheme of createing the group
	  projects was incompatible with customized workspaces.)
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.
	    - Corrected very bizarre code in csEvent::UnflattenCrystal() which
	      performed a static cast of `this' to csPoolEvent, checked if the
	      result of the cast was 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 projects 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 convenience 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.
	- Andrew Craig 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::GetCollisionPairs() 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().
	- Andrew Craig 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 threshold 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...
	- Andrew Craig 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 comparisons.  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.
	- Andrew Craig 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 '--'.
	- Andrew Craig 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 comparison.
	- 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.
	- Andrew Craig 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_threshold 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 comparison 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 FastMeshThreshold 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.FastMeshThreshold config option.
	      - Added SetFastMeshThreshold() function to iEngine.
	      - Added GetFastMeshThreshold() 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 threshold 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.
